




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 51单片机+带字库液晶12864+DS1302数字时钟C源程序无按键修改功能2021-10-19 16:47经过两天的搜索与调试,在别人程序的根底上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。适用于开发板:51单片机AT89S52+带字库液晶12864(ST7920)+DS1302(实时时钟实现功能:简单,数字时钟+日期以后会不断完美。C语言源程序如下:#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int
2、/*DS1302 端口设置 */sbit SCK=P36; /DS1302时钟sbit SDA=P34; /DS1302 IOsbit RST = P35; / DS1302复位bit ReadRTC_Flag; /读DS1302全局变量/* 12864端口定义*/#define LCD_data P0
3、0; /带字库液晶12864数据口sbit LCD_RS = P24; /存放器选择输入 sbit LCD_RW = P25; /液晶读/写控制sbit LCD_EN = P26; /液晶使能控制sbit
4、; PSB=P21; /并口控制sbit RES=P23;uchar code dis1 = " 电子设计天地" /液晶显示的汉字uchar code dis2 = "有志者,事竟成!"uchar code dis4 = '0','1','2','3',&
5、#39;4','5','6','7','8','9'unsigned char temp;#define delayNOP(); _nop_();_nop_();_nop_();_nop_();void lcd_pos(uchar X,uchar Y); /确定显示位置unsigned char l_tmpdate7=0,7,16,19,10,1,9;/秒分时日月周年09-10-19 16:07:00code unsigned char write_rtc_address7=0x80,0x82,0x84,0
6、x86,0x88,0x8a,0x8c; /秒分时日月周年 最低位读写位code unsigned char read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat );unsigned char Read_Ds1302 ( unsigned char address );void Read_RTC(void);/read RTC void
7、Set_RTC(void); /set RTC void InitTIMER0(void);/inital timer0/*/*
8、160; */* 延时函数
9、; */* &
10、#160; */*/void del
11、ay(unsigned int m) /延时程序
12、; unsigned int i,j; for(i=0;i<m;i+)
13、0; for(j=0;j<10;j+); /*/*
14、160; */*检查LCD忙状态
15、160; */*lcd_busy为1时,忙,等待。lcd-busy为0时
16、,闲,可写指令与数据。 */*
17、60; */*/bit lcd_busy() &
18、#160; bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /*/*
19、;
20、; */*写指令数据到LCD
21、0; */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */*
22、
23、 */*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0;
24、 LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delay(1); LCD_EN = 1; delay(1); LCD_EN = 0; /*/*
25、
26、 */*写显示数据到LCD
27、; */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */*
28、160;
29、160; */*/void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW
30、= 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delay(1); LCD_EN = 0; /*/* &
31、#160; */* LCD初始化设定
32、 */*
33、160;
34、160; */*/void lcd_init() P0=0xFF;P2=0xFF;delay(40);PSB=1; /并口方式。delay(1);RES=0;delay(1);RES=1;delay(10);lcd_wcmd(0x30);delay(100);lcd_wcmd(0x30);delay(37);lcd_wcmd(0x08
35、);delay(100);lcd_wcmd(0x10);delay(100);lcd_wcmd(0x0C); /显示开,关光标 delay(100); lcd_wcmd(0x01); /去除LCD的显示内容 delay(100);lcd_wcmd(0x06);delay(100);void main()uchar i;InitTIMER0();
36、Set_RTC(); lcd_init(); /初始化LCD while(1)if(ReadRTC_Flag) ReadRTC_Flag=0;Read_RTC();lcd_pos(0,0);
37、 /设置显示位置为第一行的第1个字符 i = 0; while(dis1i != '0')
38、 /显示字符 lcd_wdat(dis1i); i+; lcd_pos(1,0); /设置显示位置为第二行的第1个字符 i = 0
39、; while(dis2i != '0') lcd_wdat(dis2i); /显示字符 i+; lcd_pos(2,0); lcd_wdat(dis4l_tmpdate6/16);
40、160; /DS1302是BCD码,进行处理得到十位与个位数。lcd_pos(2,1); lcd_wdat(dis4l_tmpdate6%16);lcd_pos(2,2); l
41、cd_wdat('-');lcd_pos(2,3); lcd_wdat(dis4l_tmpdate4/16);lcd_pos(2,4); lcd_wdat(dis4l_tmpdate4%16);l
42、cd_pos(2,5); lcd_wdat('-');lcd_pos(2,6); lcd_wdat(dis4l_tmpdate3/16);lcd_pos(2,7);
43、0; lcd_wdat(dis4l_tmpdate3%16); /设置显示位置为第三行的第1个字符 lcd_pos(3,0); /设置显示位置
44、为第四行的第1个字符 lcd_wdat(dis4l_tmpdate2/16);lcd_pos(3,1); lcd_wdat(dis4l_tmpdate2%16);lcd_pos(3,2);
45、 lcd_wdat(':');lcd_pos(3,3); lcd_wdat(dis4l_tmpdate1/16);lcd_pos(3,4); lcd_wdat(dis4l_
46、tmpdate1%16);lcd_pos(3,5); lcd_wdat(':');lcd_pos(3,6); lcd_wdat(dis4l_tmpdate0/16);lcd_pos(3,7);
47、160; lcd_wdat(dis4l_tmpdate0%16); /*/*
48、0; */* 设定显示位置
49、; */* &
50、#160; */*/void lcd_pos(uchar X,uchar Y)
51、60; uchar pos; if (X=0) X=0x80; else if (X=1) X=0x90; else if (X=2) X=0x88; else if (X=3) X=0x98; pos
52、 = X+Y ; lcd_wcmd(pos); /显示地址void InitTIMER0(void)TMOD|=0x01;/定时器设置 16位TH0=0xef;/初始化值TL0=0xf0;ET0=1;TR0=1;EA=1;void Write_Ds1302_Byte(unsigned char temp) unsigned char i;for (i=0;i<8;i+) /循环8次 写入数据 SCK=0; &
53、#160; SDA=temp&0x01; /每次传输低字节 temp>>=1; /右移一位 SCK=1; /*/void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0;_nop_();
54、 SCK=0;_nop_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address); /发送地址 Write_Ds1302_Byte(dat); /发送数据 RST=0; /恢复/*/unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00; RST=0;_nop_(); SCK=0;_nop_(); RST=1;_nop_(); Write_Ds1302_Byte(address
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年舟山市卫生健康委员会直属事业单位招聘考试真题
- 护理电脑系统操作规程
- 2025中文学校教师聘用合同
- 2025年初中地理国情认知模拟试题及答案(地理国情知识储备)
- 2025新款设备技术引进合同模板
- 2025-2030精致牛油行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030米粉行业市场发展分析及投资融资策略研究报告
- 2025-2030碳酸饮料行业并购重组机会及投融资战略研究咨询报告
- 2025机械设备购销合同(示范合同)
- 2025-2030石墨化工设备行业市场现状供需分析及投资评估规划分析研究报告
- (二模)温州市2025届高三第二次适应性考试语文试卷(含答案)
- 2024-2025学年人教版数学八年级下册第一次月考模拟练习(含答案)
- 2024山西云时代技术有限公司社会招聘59人笔试参考题库附带答案详解
- 新教科版小学1-6年级科学需做实验目录
- DL∕T 5544-2018 架空输电线路锚杆基础设计规程
- 高层建筑核心筒设计实例分析(共67页)
- 陶瓷砖购销合同模板直接用
- 电机学同步电机-全套课件
- 基于AT89S52单片机的自动干手器的设计与实现
- 《特种设备目录》(2022年第114号)
- 华为双活数据中心解决方案
评论
0/150
提交评论