完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`#include #include //定义DS1302使用的端口 ***it DSIO=P3^4; ***it SCLK=P3^6; ***it CE=P3^5; //定义LCD使用的端口 ***it LCD_E=P2^7; ***it LCD_RW=P2^5; ***it LCD_RS=P2^6; #define LCDIO P0 unsigned char code ds1302readaddr[7]={0x8B,0x81,0x83,0x85,0x87,0x89,0x8D};//读寄存器地址 unsigned char code ds1302writeaddr[7]={0x8A,0x80,0x82,0x84,0x86,0x88,0x8C};//写寄存器地址 unsigned char code time[7]={0x04,0,0,0,0x03,0x08,0x17};//星期 秒 分 时 日 月 年 //初始时间2017年8月3日00点00分00秒星期四 BCD码表示 void lcddisplay(); void ds1302write(unsigned char addr,unsigned char dat); void ds1302read(unsigned char addr); void ds1302init(); void ds1302readtime(); void lcd1602writecom(unsigned char com); void lcd1602writedata(unsigned char data); void lcdinit(); void delayms(unsigned char c); void main() //主程序,显示时间 { lcdinit();//初始化LCD ds1302init();//初始化ds1302 while(1) { ds1302readtime();//读取ds1302的数据 lcddisplay();//lcd显示ds1302的数据 } } void lcddisplay() { lcd1602writecom(0x80);//在第一行显示 lcd1602writedata('0'+Time[3]/16); lcd1602writedata('0'+Time[3]&0x0f); lcd1602writedata(':'); lcd1602writedata('0'+Time[2]/16); lcd1602writedata('0'+Time[3]&0x0f); lcd1602writedata(':'); lcd1602writedata('0'+Time[1]/16); lcd1602writedata('0'+Time[1]&0x0f); lcd1602writecom(0xc0); lcd1602writedata('2'); lcd1602writedata('0'); lcd1602writedata('1'+Time[6]/16); lcd1602writedata('7'+Time[6]&0x0f); lcd1602writedata('-'); lcd1602writedata('0'+Time[5]/16); lcd1602writedata('8'+Time[5]&0x0f); lcd1602writedata('-'); lcd1602writedata('4'+Time[4]&0x07); } //DS1302程序段 //写入地址和数据 void ds1302write(unsigned char addr,unsigned char dat) { unsigned char n; CE=0; _nop_(); SCLK=0; _nop_(); CE=1; for(n=0;n<8;n++) //写入地址码 { DSIO=addr&0x01; addr>>1; SCLK=1; _nop_(); SCLK=0; _nop_(); } for(n=0;n<8;n++) //写入数据码 { DSIO=dat&0x01; dat>>1; SCLK=1; _nop_(); SCLK=0; _nop_(); } CE=0; _nop_(); } void ds1302read(unsigned char addr)//读取数据 { unsigned char n,dat1,dat; CE=0; _nop_(); SCLK=0; _nop_(); CE=1; for(n=0;n<8;n++) { DSIO=addr&0x01; addr>>1; SCLK=1; _nop_(); SCLK=0; _nop_(); } _nop_(); for(n=0;n<8;n++) { dat1=DSIO&0x01; dat1=dat1<<7; dat=(dat>>1)|(dat1); SCLK=1; _nop_(); SCLK=0; _nop_(); } CE=0; _nop_(); SCLK=1; _nop_(); DSIO=0; _nop_(); DSIO=1; _nop_(); return dat; } void ds1302init() //初始化DS1302 { unsigned char n; ds1302write(0x8E,0x00); //关闭写保护 for(n=0;n<7;n++) { ds1302write(ds1302writeaddr[n],Time[n]); } ds1302write(0x8E,0x80); //开启写保护 } void ds1302readtime() //读取时钟信息 { unsigned char n; for(n=0;n<7;n++) { Time[n]=ds1302read(ds1302readaddr[n]); } } //LCD程序段 void lcd1602writecom(unsigned char com) //lcd1602写命令程序 { LCD_E=0; //使能端为0 LCD_RS=0; //数据命令端为0,代表命令 LCD_RW=0; //读写端为0,代表写入 LCDIO=com; //输入端输入一个命令字节 delayms(40); //延迟40ns LCD_E=1; delayms(150); //使能端至少延迟150ns LCD_E=0; //复位 } void lcd1602writedata(unsigned char data) //lcd1602写数据程序 { LCD_E=0; //使能端为0 LCD_RS=1; //数据命令端为1,代表数据 LCD_RW=0; //读写端为0,代表写入 LCDIO=data; //输入端输入一个命令字节 delayms(40); //延迟40ns LCD_E=1; delayms(150); //使能端至少延迟150ns LCD_E=0; //复位 } void lcdinit() //初始化LCD1602 { lcd1602writecom(0x38); lcd1602writecom(0x0c); lcd1602writecom(0x06); lcd1602writecom(0x01); lcd1602writecom(0x80); } void delayms(unsigned char c) //误差 0us { unsigned char a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } ` |
|
相关推荐
1 个讨论
|
|
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11793 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 23:57 , Processed in 0.481541 second(s), Total 36, Slave 29 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号