基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟.docx
《基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟.docx》由会员分享,可在线阅读,更多相关《基于51单片机与DS1302时钟芯片和LCD1602液晶显示的数字时钟.docx(9页珍藏版)》请在三一文库上搜索。
1、.PROTEUS仿真图:LM016LDNGC1C222pF22pF+5VX1U119XT AL112MHz18XT AL2C39RSTD20uFN1kGR12529CPSEN9308+5VALET31EAAD1.5V1.5VNGU21P1.0/T2282X1VCC1+5VP1.1/T2EX13VCC2P1.284P1.3657X2P1.42563RSTP1.577SCLKP1.6368X2I/OP1.7DS1302KEIL C程序:#include #include LCD1602.h#include DS1302.hvoid Delay1ms(unsigned int count)unsig
2、ned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);main()SYSTEMTIME CurrentTime;LCD_Initial();Initial_DS1302();GotoXY(0,0);Print( tian ma dian zi);GotoXY(0,1);Print(Time: );1DCLDN+5V G39P0.0/AD038P0.1/AD137P0.2/AD236P0.3/AD335P0.4/AD434P0.5/AD533P0.6/AD632P0.7/AD721P2.0/A822P2.1/A923P2.2/A1024P2.3/A1125
3、P2.4/A1226VP2.5/A13527+P2.6/A1428P2.7/A1510P3.0/RXD11P3.1/TXD12P3.2/INT013P3.3/INT114P3.4/T015P3.5/T116P3.6/WR17P3.7/RDSDES W0 1 2 3 4 5 6 7SDEV V VR R ED D D D D D D DRP11234567890123411111V15+2345678910KRV1D10kNG.while(1)DS1302_GetTime(&CurrentTime);TimeToStr(&CurrentTime);GotoXY(6,1);Print(Curren
4、tTime.TimeString);Delay1ms(400);#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#include /Port Definitions*sbit LcdRs= P20;sbit LcdRw= P21;sbit LcdEn= P22;sfrDBPort= 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/内部等待函数*unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();/w
5、hile(DBPort&0x80);/在用 Proteus 仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,/ 可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80=0x80/ 实际硬件时打开此语句LcdEn=0;return DBPort;/向LCD写入命令或数据*#define LCD_COMMAND0/ Command#define LCD_DATA1/ Data#define LCD_CLEAR_SCREEN0x01/清屏#define LCD_HOMING0x02/光标返回原点.void LCD_Write(bit style, unsigned
6、 char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input; _nop_();/ 注意顺序LcdEn=1;_nop_();/ 注意顺序LcdEn=0;_nop_();LCD_Wait();/ 设置显示模式 *#define LCD_SHOW0x04/ 显示开#define LCD_HIDE0x00/ 显示关#define LCD_CURSOR0x02/ 显示光标#define LCD_NO_CURSOR0x00/ 无光标#define LCD_FLASH0x01/ 光标闪动#define LCD_NO_FLASH0x00/ 光标不闪
7、动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/ 设置输入模式 *#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00/ default#define LCD_MOVE0x01/ 画面可平移#define LCD_NO_MOVE0x00/defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/ 移动光标或屏幕
8、*/*#define LCD_CURSOR0x02#define LCD_SCREEN0x08#define LCD_LEFT0x00#define LCD_RIGHT0x04.void LCD_Move(unsigned char object, unsigned char direction)if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x10|direction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|direction);*/ 初始化 LCD* void LCD_Initial()Lcd
9、En=0;LCD_Write(LCD_COMMAND,0x38);/ 8 位数据端口 ,2 行显示 ,5*7 点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);/ 开启显示 , 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); / 清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);/AC 递增 , 画面不动/* void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_C
10、OMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;/*void LCD_LoadChar(unsigned char user8, unsigned char place)unsigned char i;LCD_Write(LCD_COMMAND,0x40|(place*8);for(i=0; i0; i-).DS1302_IO = ACC0;/ 相当于汇编中的RRCDS1302_C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 DS1302 时钟 芯片 LCD1602 液晶显示 数字
链接地址:https://www.31doc.com/p-6198458.html