万年历1602时钟程序

上传人:公**** 文档编号:563690788 上传时间:2022-09-15 格式:DOCX 页数:15 大小:21.38KB
返回 下载 相关 举报
万年历1602时钟程序_第1页
第1页 / 共15页
万年历1602时钟程序_第2页
第2页 / 共15页
万年历1602时钟程序_第3页
第3页 / 共15页
万年历1602时钟程序_第4页
第4页 / 共15页
万年历1602时钟程序_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《万年历1602时钟程序》由会员分享,可在线阅读,更多相关《万年历1602时钟程序(15页珍藏版)》请在金锄头文库上搜索。

1、#include #include #define uchar unsigned char#define uint unsigned int#define yh 0x80 /LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定 为1(100000000=80)#define er 0x80+0x40 /LCD 第二行初始位置(因为第二行第一个字符位置地址是0x40)sbit ds=P22;/温度传感器信号线sbit dula=P2飞;/数码管段选线sbit wela二P2“7;/数码管位选线sbit beep二P23;/蜂鸣器sbit rs=P35;/定义 1602 液晶 RS 端s

2、bit lcden二P34; /定义 1602 液晶 LCDEN 端sbit IO=P3; /数据线 sbit SCLK二P4;sbit RST二P5;sbit ACC0二ACC”0;sbit ACC7二ACL7;sbit key1=P34;/设置键sbit key2=P35;/加键sbit key3=P3 飞;/减键uchar code tab1=20 - -; /年显示的固定字符uchar code tab2= : : ;/时间显示的固定字符 uchar a,miao,shi,fen,ri,yue,nian,week,key1n,temp; uchar num;float f_temp;v

3、oid delayms(uin t z)/延时函数uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void di() /蜂鸣器报警声音beep=0; delayms(50);beep=1;uchar BCD_Decimal(uchar bcd)/BCD码转十进制函数,输入BCD,返回十进制 uchar Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);/DS1302时钟部分子程序/void writ e_by te(uchar dat)/写一个字节ACC=dat;RST=1;for(a=

4、8;a0;a-)IO=ACC0;SCLK=0; /产生上升沿写入数据,从低位写入SCLK=1;ACC=ACC1;uchar read_by te()/读一个字节RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1; /产生下降沿输出数据,先输出低位,保存到ACC中 SCLK=0;ACC=ACC1;return (ACC);void write_1302(uchar add,uchar dat)/向 1302 芯片写函数,指定写入地址, 数据RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar

5、read_1302(uchar add)/从1302读数据函数,指定读取数据来源地址 uchar temp;RST=0;SCLK=0;RST=1;write_byte(add); temp=read_byte();SCLK=1;RST=0;return(temp);void dsl302_init() /1302 芯片初始化子函数(2012-06-18, 12:00:00,week7) RST=0;SCLK=0;write_1302(0x8e,0x00); /允许写,禁止写保护write_1302(0x80,0x00); /向DS1302内写秒寄存器80H写入初始秒数据00 write_130

6、2(0x82,0x00);/向DS1302内写分寄存器82H写入初始分数据00 write_1302(0x84,0x12);/向DS1302内写小时寄存器84H写入初始小时数 据12write_1302(0x8a,0x07);/向DS1302内写周寄存器8aH写入初始周数据4write_1302(0x86,0x17);/向DS1302内写日期寄存器86H写入初始日期数 据18write_1302(0x8&0x06);/向DS1302内写月份寄存器88H写入初始月份数 据06write_1302(0x8c,0x12);/向DS1302内写年份寄存器8cH写入初始年份数 据12write_1302

7、(0x8e,0x80); /打开写保护/18b20温度传感器部分子程序/ void ds18b20_init(void) /18B20 复位,初始化函数uint i;ds=0;i=103;while(i0)i-;ds=1;i=4;while(i0)i-;bit tempreadbit(void) /读1位函数uint i;bit dat;ds=0;i+;/i+ 起延时作用ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return (dat);uchar tempread(void) /读1个字节uchar i,j,dat;dat=0;for(i=1;i=8;i+) j=t

8、empreadbit();dat=(j1); /读出的数据最低位在最前面,这样刚好一个字 节在DAT里return(dat);void tempwr it eb yt e(uchar dat) /向 18B20 写一个字节数据uint i;uchar j;bit testb;for(j=1;j1;if(testb) /写 1ds=0;i+;i+;ds=1;i=8;while(i0)i-;elseds=0;/写 0i=8;while(i0)i-;ds=1;i+;i+;void tempchange(void) /DS18B20 开始获取温度并转换ds18b20_init();delayms(1)

9、;tempwritebyte(Oxcc); / 写跳过读 ROM 指令 tempwritebyte(0x44); / 写温度转换指令uchar get_temp()/读取寄存器中存储的温度数据uchar a,b;ds18b20_init();delayms(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();/读低8位b=tempread();/读高8位temp=b;temp=8;/两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625;/温度在寄存器中为12位 分辨率位0.0625temp=f_temp*1

10、0+0.5; /乘以10表示小数点后面只取1位,加0.5是四 舍五入f_temp=f_temp+0.05;return temp;/temp 是整型/显示程序/void wri te_1602com(uchar com)/液晶写命令函数rs=0;lcden=0;P0=com;delayms(5);lcden=1;delayms(5);lcden=0;void wri te_1602da t(uchar da te)/液晶写数据函数rs=1;lcden=0;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;/温度显示子函数void write_temp(

11、uchar add,uchar dat)/向LCD写温度数据,并指定显示位置 uchar gw,sw;gw二da t%10;/取得个位数字sw=da t/10;/取得十位数字write_1602com(er+add);/er 是头文件规定的值 0x80+0x40write_1602dat(0x30+sw);/数字+30 得到该数字的 LCD1602 显示码write_1602dat(0x30+gw);/数字+30 得到该数字的 LCD1602 显示码write_1602dat(0xdf);/显示温度的小圆圈符号,0xdf是液晶屏字符库的该 符号地址码write_1602dat(0x43); /

12、显示C符号,0x43是液晶屏字符库里大写C的地 址码/1602液晶刷新显示年月日函数3为年,6为月,9为日void write_nyr(uchar add,char date)char shi,ge;shi=date/10;ge=date%10;write_1602com(0x80+add);write_1602dat(0x30+shi); write_1602dat(0x30+ge);/ / 1 6 0 2液晶刷新显示时分秒函数4为时, 7为分, 1 0为秒void write_sfm(uchar add,char date)char shi,ge;shi=date/10;ge=date%1

13、0; write_1602com(0x80+0x40+add);write_1602dat(0x30+shi); write_1602dat(0x30+ge);/写液晶星期显示函数void write_week(char we)write_1602com(0x80+12);switch(we)case 1:write_1602dat(M);delayms(5);write_1602dat(O);delayms(5);write_1602dat(N);break;case 2: write_1602dat(T);delayms(5);write_1602dat(U);delayms(5);write_1602dat(E);break;case 3: write_1602dat(W);delayms(5);write_1602dat(E);delayms(5);write_1602dat(D);break;case 4: write_1602dat(T);delayms(5);write_1602dat(H);delayms(5);write_1602dat(U);break;case 5: write_1602dat(F);delayms(5);write_1602dat(R);delayms(5);write_1602dat(I);break;case 6

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号