欢迎来到天天文库
浏览记录
ID:8522180
大小:17.85 KB
页数:22页
时间:2018-03-31
《基于单片机的时钟、温度显示》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、#include#include#defineucharunsignedchar#defineuintunsignedintsbitrs=P1^0;//寄存器选择sbitrw=P1^1;//读写信号线sbitlcden=P1^2;//led使能端sbitscl=P1^3;//时钟线sbitrst=P1^5;//复位线sbitio=P1^4;//数据口sbitkey_set_time=P3^4;//设置时间键sbitkey_add=P3^5;//加键sbitkey_minus=P3^6;//减键sbitkey_set_al
2、arm=P3^7;//设置闹钟键sbitbee=P1^6;//蜂鸣器接口sbitdq=P1^7;//ds18b20测温uchargetTimebuf[7];//存放时间数据uchartime[]={"::"};//时间格式字符串uchardate[]={"20--"};//日期格式字符串ucharweeklist[]={"SunMonTueWedThuFriSat"};//星期字符列表ucharweek[]={""};//星期格式字符串intcount;//设定秒分时日月星期年的时候count的值分别为intalarm;//是否进入闹钟设置界面123分别代表开
3、关分小时的设置intisOpen;//闹钟是否开启默认不开启intfen,shi;//闹钟的分钟小时intisRing;//闹钟是否在响ucharisInit_1302;//是否初始化时钟完毕intnum;inttemperature;//温度inttemp_flag;//温度正负标志voiddelay(uintx){inty;while(x--){for(y=100;y>0;y--);}}voidwrite_1602com(ucharcom){//1602写指令rs=0;lcden=0;P2=com;delay(5);lcden=1;delay(5);lcd
4、en=0;}voidwrite_1602data(uchardat){//1602写数据rs=1;lcden=0;P2=dat;delay(5);lcden=1;delay(5);lcden=0;}voidinit_1602(){//初始化1602液晶rw=0;lcden=0;write_1602com(0x38);//设置显示模式write_1602com(0x0c);//显示开关及光标是否显示和闪动write_1602com(0x06);//光标移动方向write_1602com(0x01);//清屏}voidwrite_ds1302_byte(uchar
5、temp){//ds1302写一个字节数据uchari;for(i=0;i<8;i++){io=temp&0x01;//将数据放到IO口上scl=0;//scl为低时准备数据scl=1;//上升沿写入temp>>=1;}}voidwrite_ds1302(ucharadd,uchardat){//向地址add写入数据datrst=0;scl=0;rst=1;write_ds1302_byte(add);write_ds1302_byte(dat);scl=1;rst=0;}ucharread_ds1302(ucharadd){//ds1302读数据uchari
6、,dat;rst=0;scl=0;rst=1;write_ds1302_byte(add);//首先写入要读的数据处的地址for(i=0;i<8;i++){if(io==1){dat
7、=0x80;}scl=1;scl=0;//下降沿读取数据dat>>=1;}scl=1;rst=0;returndat;}voidread_time(ucharcurr_time[]){uchari;ucharucAddr=0x81;for(i=0;i<7;i++){curr_time[i]=read_ds1302(ucAddr);//格式为:秒分时日月星期年ucAddr+=2;}
8、}voidset_time(uchar*pSecDa){//设定时间uchari;ucharucAddr=0x80;write_ds1302(0x8e,0x00);for(i=7;i>0;i--){write_ds1302(ucAddr,*pSecDa);//秒分时日月星期年pSecDa++;ucAddr+=2;}write_ds1302(0x8e,0x80);}voidinit_ds1302(){//ds1302初始化isInit_1302=read_ds1302(0x81);//读出时钟状态if(isInit_1302&0x80){//说明没有初始化wri
9、te_ds1302(0x8e,0x00
此文档下载收益归作者所有