数码管显示时钟程序_第1页
数码管显示时钟程序_第2页
数码管显示时钟程序_第3页
数码管显示时钟程序_第4页
数码管显示时钟程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include <reg52.h>#include <intrins.h>#include <string.h>#define uint unsigned int#define uchar unsigned chartypedef unsigned char BYTE;sbit IO = P10;sbit SCLK = P11;sbit RST = P12;sbit RS = P20;sbit RW = P21;sbit EN = P22;uchar *WEEK="SUN","*","MON",&

2、quot;TUS","WEN","THU","FRI","SAT"uchar LCD_DSY_BUFFER1="DATE 00-00-00 "uchar LCD_DSY_BUFFER2="TIME 00:00:00 "uchar DateTime7;void DelayMS(uint ms) uchar i;while(ms-) for(i=0;i<120;i+); /DS1302片选口P1.2 /秒 分 时 日 月 星期 年BYTE code init =

3、0x00, 0x00, 0x20, 0x01, 0x01, 0x05, 0x10;BYTE data now7;void DS1302_Initial();void DS1302_SetTime(BYTE *p);void DS1302_GetTime(BYTE *p);/*void main() DS1302_Initial(); /初始化DS1302 DS1302_SetTime(init); /设置初始时间 DS1302_GetTime(now); /读取当前时间 while (1);*/*延时X微秒(STC12C5A60S212M)不同的工作环境,需要调整此函数此延时函数是使用1T的指

4、令周期进行计算,与传统的12T的MCU不同*/void Delay() _nop_(); _nop_();/*从DS1302读1字节数据*/BYTE DS1302_ReadByte() BYTE i; BYTE dat = 0; for (i=0; i<8; i+) /8位计数器 SCLK = 0; /时钟线拉低Delay(); /延时等待 dat >>= 1; /数据右移一位if (IO) dat |= 0x80; /读取数据SCLK = 1; /时钟线拉高Delay(); /延时等待 return dat;/*向DS1302写1字节数据*/void DS1302_Writ

5、eByte(BYTE dat) char i; for (i=0; i<8; i+) /8位计数器 SCLK = 0; /时钟线拉低 Delay(); /延时等待 dat >>= 1; /移出数据 IO = CY; /送出到端口 SCLK = 1; /时钟线拉高 Delay(); /延时等待 /*读DS1302某地址的的数据*/BYTE DS1302_ReadData(BYTE addr) BYTE dat; RST = 0; Delay(); SCLK = 0; Delay(); RST = 1; Delay(); DS1302_WriteByte(addr); /写地址

6、dat = DS1302_ReadByte(); /读数据 SCLK = 1; RST = 0; return dat;/*往DS1302的某个地址写入数据*/void DS1302_WriteData(BYTE addr, BYTE dat) RST = 0; Delay(); SCLK = 0; Delay(); RST = 1; Delay(); DS1302_WriteByte(addr); /写地址 DS1302_WriteByte(dat); /写数据 SCLK = 1; RST = 0;/*写入初始时间*/void DS1302_SetTime(BYTE *p) BYTE add

7、r = 0x80; BYTE n = 7; DS1302_WriteData(0x8e, 0x00); /允许写操作 while (n-) DS1302_WriteData(addr, *p+); addr += 2; DS1302_WriteData(0x8e, 0x80); /写保护/*读取当前时间*/void DS1302_GetTime(BYTE *p) BYTE addr = 0x81; BYTE n = 7; while (n-) *p+ = DS1302_ReadData(addr); addr += 2; /*初始化DS1302*/void DS1302_Initial() R

8、ST = 0; SCLK = 0; DS1302_WriteData(0x8e, 0x00); /允许写操作 DS1302_WriteData(0x80, 0x00); /时钟启动 DS1302_WriteData(0x90, 0xa6); /一个二极管4K电阻充电 DS1302_WriteData(0x8e, 0x80); /写保护uchar Read_LCD_State() uchar state;RS=0;RW=1;EN=1;DelayMS(1);state=P0;EN = 0;DelayMS(1);return state;void LCD_Busy_Wait() while(Read

9、_LCD_State()&0x80)=0x80);DelayMS(5);void Write_LCD_Data(uchar dat) LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;void Write_LCD_Command(uchar cmd) LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;void Init_LCD() Write_LCD_Command(0x38);DelayMS(1);Write_LCD_Command(0x01);De

10、layMS(1);Write_LCD_Command(0x06);DelayMS(1);Write_LCD_Command(0x0c);DelayMS(1);void Set_LCD_POS(uchar p) Write_LCD_Command(p|0x80);void Display_LCD_String(uchar p,uchar *s) uchar i;Set_LCD_POS(p);for(i=0;i<16;i+)Write_LCD_Data(si);DelayMS(1); void Format_DateTime(uchar d,uchar *a) a0=d/10+'0'a1=d%10+'0'void main() Init_LCD();while(1) DS1302_GetTime(now); Format_DateTime(DateTime6,LCD_DSY_BUFFER1+5);Format_DateTime(DateTime4,LCD_DSY_BUFFER1+8);Format_DateTime(DateTime3,LCD_DSY_BUFFER1+11);strcpy(LCD_DSY_BUFFER1+13,WEEKDateTime5);Format_DateTime(DateTime2,LCD_DSY_BUFFER1+5);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论