焊接完成,开始调试 (function(sogouExplorer){ sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});//alert("content script stop js loaded "+document.location); if (typeof comSogouWwwStop == "undefined"){ var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&"; window.comSogouWwwStop = true; setTimeout(function(){ if (!document.location || document.location.toString().indexOf(SERVER) != 0){ return; } function bind(elem, evt, func){ if (elem){ return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func); } } function storeHint() { var hint = new Array(); var i = 0; var a = document.getElementById("hint_" + i); var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});} while(a) { bind(a, "click", storeClick); hint.push({"text":a.innerHTML, "url":a.href}); i++; a = document.getElementById("hint_" + i); } return hint; } if (document.getElementById("windowcloseit")){ document.getElementById("windowcloseit").onclick = function(){ sogouExplorer.extension.sendRequest({cmd: "closeit"}); } var flag = false; document.getElementById("bbconfig").onclick = function(){ flag = true; sogouExplorer.extension.sendRequest({cmd: "config"}); return false; } document.body.onclick = function(){ if (flag) { flag = false; } else { sogouExplorer.extension.sendRequest({cmd: "closeconfig"}); } };/* document.getElementById("bbhidden").onclick = function(){ sogouExplorer.extension.sendRequest({cmd: "hide"}); return false; } */ var sogoutip = document.getElementById("sogoutip"); var tip = {}; tip.word = sogoutip.innerHTML; tip.config = sogoutip.title.split(","); var hint = storeHint(); sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}}); }else{ if (document.getElementById("windowcloseitnow")){ sogouExplorer.extension.sendRequest({cmd: "closeit", data: true}); } } }, 1); } })(window.external.sogouExplorer(window,7));
展示一下代码
8位数码管显示程序:
unsigned char code DS_num[8] = {
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
};
//共阴极
unsigned char code disp_num_null[12] = {63,6,91,79,102,109,125,7,127,111,0,64};
void write_one(unsigned char ds_date,unsigned char setp)
{
int p;
if(setp>7)
{
setp = 0;
}
P2 = P2&0xF8;
P2 = P2|DS_num[setp];
D_LCK = 1;
D_DAT = disp_num_null[ds_date];
for(p=221;p>0;p--)
{
_nop_();
}
D_LCK = 0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/*
**********************************************************************
函数:Delayxus_DS18B20
功能:DS18B20延时函数
参数:t为定时时间长度
返回:无
说明:延时公式:15u+15(近似),晶振12MHz
**********************************************************************
*/
void Delayxus_DS18B20(unsigned int t)
{
for(t;t>0;t--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
_nop_();
_nop_();
}
/********************************************************************/
/*
*********************************************************************
函数:RST_DS18B20
功能:复位DS18B20,读取存在脉冲并返回
参数:无
返回:1:复位成功;0:复位失败
说明:拉低总线至少480us;可用于检测DS18B20工作是否正常
*********************************************************************
*/
bit RST_DS18B20(void)
{
bit ret = 1;
DQ = 0; //拉低总线
Delayxus_DS18B20(32);//为保险期间,延时495us
DQ = 1; //释放总线,DS18B20检测到上升沿后会发生存在脉冲
Delayxus_DS18B20(4);//需要等待15~60us,这里延时75us后可以保持接收到的是脉冲(如果正常的话)
ret = DQ;
Delayxus_DS18B20(15);//延时495us,让ds18b20释放总线,避免影响到下一步的操作
//DQ = 1; //释放总线
return(~ret);
}
/*
*****************************************************************
函数:WR_Bit
功能:向DS18B20写一位数据
参数:i为待写的位
返回:无
说明:总线从高拉到底产生写时序
*****************************************************************
*/
void WR_Bit(bit i)
{
DQ = 0;//产生写时序
_nop_();
_nop_(); //总线拉低持续时间要大于15us
DQ = i;
Delayxus_DS18B20(3);//延时60us;等待ds18b20采样读取
DQ = 1;//
}
/*
*****************************************************************
函数:WR_Byte
功能:DS18B20写字节函数,先写最低位
参数:dat为待写的字数据
返回:无
说明:无
*****************************************************************
*/
void WR_Byte(unsigned char dat)
{
unsigned char i = 0;
while(i++<8)
{
WR_Bit(dat&0x01); //从最低位写起
dat >>= 1;
}
}
/*
*****************************************************************
函数:Read_Bit
功能:向DS18B20读一位数据
参数:无
返回:bit i
说明:总线从高拉到底,持续1us以上,再释放总线为高电平空闲状态产生读时序
*****************************************************************
*/
unsigned char Read_Bit(void)
{
unsigned char ret;
DQ = 0;
_nop_();
_nop_();
_nop_(); //
DQ = 1;
_nop_();_nop_();
_nop_();_nop_();
_nop_(); //
ret = DQ; //读时隙产生7us后读取总线数据,把总线的读取动作防灾15us时间限制的后面是为了保证数据读取的有效性
Delayxus_DS18B20(3); //延时60us,满足读时隙的时间长度要求
DQ = 1; //释放总线
return(ret);//返回读取到的数据
}
/*
*****************************************************************
函数:Read_Byte
功能:DS18B20读一个字节函数,先读最低位
参数:无
返回:读取的一字节数据
说明:无
*****************************************************************
*/
unsigned char Read_Byte(void)
{
unsigned char i;
unsigned char dat = 0;
for(i=0;i<8;i++)
{
dat>>=1; //先读最低位
if(Read_Bit())
dat|=0x80;
}
return(dat);
}
/*
******************************************************************
函数:Start_DS18B20
功能:启动温度转换
参数:无
返回:无
说明:复位后写44H命令
******************************************************************
*/
void Start_DS18B20()
{
DQ = 1;
RST_DS18B20();
WR_Byte(0xcc);
WR_Byte(0x44);
}
/*
*****************************************************************
函数:Read_Tem
功能:读取温度
参数:无
返回:int型温度数据,高8位为高8位温度数据;低8位为低8位温度数据
说明:复位后写BE命令
*****************************************************************
*/
int Read_Tem()
{
int tem = 0;
RST_DS18B20();
WR_Byte(0xcc);
WR_Byte(0xbe);
tem = Read_Byte(); //读出温度低8位
tem|= (((int)Read_Byte())<<8); //读出温度高8位
return tem;
}
DS1302操作程序:
//位寻址寄存器定义
sbit ACC_7 = ACC^7;
//管脚定义
sbit SCLK = P3^5; // DS1302时钟信号7脚
sbit DIO = P3^6; // DS1302数据信号6脚
sbit CE = P3^7; // DS1302片选5脚
/********************************************/
//地址、数据发送子程序
void Write1302 (unsigned char addr,unsigned char dat )
{
unsigned char i,temp;
CE=0; //CE 引脚为低,数据传送中止
SCLK=0; //清零时钟总线
CE = 1; //CE 引脚为高,逻辑控制 有效
//发送地址
for ( i=8; i>0; i-- ) //循环8次移位
{
SCLK = 0;
temp = addr;
DIO = (bit)(temp&0x01); //每次传输低字节
addr >>= 1; //右移一位
SCLK = 1;
}
//发送数据
for ( i=8; i>0; i-- )
{
SCLK = 0;
temp = dat;
DIO = (bit)(temp&0x01);
dat >>= 1;
SCLK = 1;
}
CE = 0;
}
/*********************************************************/
//数据读取子程序
unsigned char Read1302 ( unsigned char addr )
{
unsigned char i,temp,dat1,dat2;
CE=0;
SCLK=0;
CE = 1;
//发送地址
for ( i=8; i>0; i-- ) //循环8次移位
{
SCLK = 0;
temp = addr;
DIO = (bit)(temp&0x01); //每次传输低字
addr >>= 1; //右移一位
SCLK = 1;
}
//读取数据
for ( i=8; i>0; i-- )
{
ACC_7=DIO;
SCLK = 1;
ACC>>=1;
SCLK = 0;
}
CE=0;
dat1=ACC;
//dat2=dat1/16; //数据进制转换
//dat1=dat1%16; //十六进制转十 进制
//dat1=dat1+dat2*10;
return (dat1);
}
/*********************************************************/
void set_day(unsigned char *tem_day)
{
Write1302(WRITE_PROTECT,0x00);
Write1302(WRITE_MONTH,tem_day[0]);
Write1302(WRITE_DAY,tem_day[1]);
Write1302(WRITE_YEAR,tem_day[2]);
Write1302(WRITE_DATE,tem_day[3]); //年代初始化
Write1302(WRITE_PROTECT,0x80);
}
/*********************************************************/
void set_time(unsigned char *tem_time)
{
Write1302(WRITE_PROTECT,0x00);
Write1302(WRITE_MONTH,tem_time[0]);
Write1302(WRITE_DAY,tem_time[1]);
Write1302(WRITE_YEAR,tem_time[2]);
Write1302(WRITE_PROTECT,0x80);
}
/*********************************************************/
void Initial(void) //初始化 DS1302
{
unsigned char item;
Write1302 (WRITE_PROTECT,0X00); //禁止写保护
Write1302 (WRITE_TCC,0x34); //涓流充电初始化
item = Read1302(READ_SECOND);
Write1302(WRITE_SECOND,item|0x80);
Write1302 (WRITE_PROTECT,0x80); //允许写保护
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |