51单片机c语言电子万年历完整程序_第1页
51单片机c语言电子万年历完整程序_第2页
51单片机c语言电子万年历完整程序_第3页
51单片机c语言电子万年历完整程序_第4页
51单片机c语言电子万年历完整程序_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

该程序为 51 单片机 c 语言电子万年历 include reg52 h include define uchar unsigned char define uint unsigned int sbit lcden P3 4 sbit lcdrs P3 5 sbit DATA P0 7 sbit RST P0 5 sbit SCLK P0 6 sbit menu P3 0 菜单 sbit add P3 1 加一 sbit dec P3 7 减一 sbit led0 P1 0 sbit led1 P1 1 sbit led2 P1 2 sbit led3 P1 3 sbit ds P3 2 sbit beep P3 3 uint temp float f temp uint warn l1 270 uint warn l2 250 uint warn h1 300 uint warn h2 320 uint get temp void delayms uint x void write com uchar com void write data uchar date void init void dis temp uint t void Write1302 uchar dat void WriteSet1302 uchar Cmd uchar dat uchar Read1302 void uchar ReadSet1302 uchar Cmd void Init DS1302 void void DisplaySecond uchar x void DisplayMinute uchar x void DisplayHour uchar x void DisplayDay uchar x void DisplayMonth uchar x void DisplayYear uchar x void DisplayWeek uchar x void dis temp uint t void read date void void turn val char newval uchar flag uchar newaddr uchar s1num void key scan void char code table 0123456789 uchar code table2 TUEWESTHUFRISATSUNMON uchar second minute hour day month year week count 0 uchar ReadValue num time void delayms uint x uint i j for i x i 0 i for j 110 j 0 j void write com uchar com lcdrs 0 P2 com delayms 5 lcden 1 delayms 5 lcden 0 void write data uchar date lcdrs 1 P2 date delayms 5 lcden 1 delayms 5 lcden 0 void init lcden 0 write com 0 x38 write com 0 x0c write com 0 x06 write com 0 x01 void Write1302 uchar dat uchar i SCLK 0 拉低 SCLK 为脉冲上升沿写入数据做好准备 delayms 2 稍微等待 使硬件做好准备 for i 0 i 1 将 dat 的各数据位右移 1 位 准备写入下一个数据位 void WriteSet1302 uchar Cmd uchar dat RST 0 禁止数据传递 SCLK 0 确保写数居前 SCLK 被拉低 RST 1 启动数据传输 delayms 2 稍微等待 使硬件做好准备 Write1302 Cmd 写入命令字 Write1302 dat 写数据 SCLK 1 将时钟电平置于已知状态 RST 0 禁止数据传递 uchar Read1302 void uchar i dat delayms 2 稍微等待 使硬件做好准备 for i 0 i 1 将 dat 的各数据位右移 1 位 因为先读出的是字节的最低位 if DATA 1 如果读出的数据是 1 dat 0 x80 将 1 取出 写在 dat 的最高位 SCLK 1 将 SCLK 置于高电平 为下降沿读出 delayms 2 稍微等待 SCLK 0 拉低 SCLK 形成脉冲下降沿 delayms 2 稍微等待 return dat 将读出的数据返回 uchar ReadSet1302 uchar Cmd uchar dat RST 0 拉低 RST SCLK 0 确保写数居前 SCLK 被拉低 RST 1 启动数据传输 Write1302 Cmd 写入命令字 dat Read1302 读出数据 SCLK 1 将时钟电平置于已知状态 RST 0 禁止数据传递 return dat 将读出的数据返回 void Init DS1302 void WriteSet1302 0 x8E 0 x00 根据写状态寄存器命令字 写入不保 护指令 WriteSet1302 0 x80 0 10 4 0 10 根据写秒寄存器命令字 写入 秒的初始值 WriteSet1302 0 x82 59 10 4 59 10 根据写分寄存器命令字 写 入分的初始值 WriteSet1302 0 x84 23 10 4 23 10 根据写小时寄存器命令字 写 入小时的初始值 WriteSet1302 0 x86 28 10 4 28 10 根据写日寄存器命令字 写入 日的初始值 WriteSet1302 0 x88 2 10 4 2 10 根据写月寄存器命令字 写入月 的初始值 WriteSet1302 0 x8c 14 10 4 14 10 nian WriteSet1302 0 x8a 4 10 4 10 ReadValue i x 10 j x 10 write com 0 x80 0 x46 write data i 0 x30 write com 0 x80 0 x47 write data j 0 x30 void DisplayMinute uchar x uchar i j i x 10 j x 10 write com 0 x80 0 x43 write data i 0 x30 write com 0 x80 0 x44 write data j 0 x30 write com 0 x80 0 x45 write data void DisplayHour uchar x uchar i j i x 10 j x 10 write com 0 x80 0 x40 write data i 0 x30 write com 0 x80 0 x41 write data j 0 x30 write com 0 x80 0 x42 write data void DisplayDay uchar x uchar i j i x 10 j x 10 write com 0 x89 write data i 0 x30 write com 0 x8a write data j 0 x30 void DisplayMonth uchar x uchar i j i x 10 j x 10 write com 0 x86 write data i 0 x30 write com 0 x87 write data j 0 x30 write com 0 x88 write data void DisplayYear uchar x uchar i j i x 10 j x 10 write com 0 x81 write data 2 0 x30 write com 0 x82 write data 0 0 x30 write com 0 x83 write data i 0 x30 write com 0 x84 write data j 0 x30 write com 0 x85 write data void DisplayWeek uchar x uchar i x x 3 write com 0 x8c write data table2 x write com 0 x8d write data table2 x 1 write com 0 x8e write data table2 x 2 write com 0 x8c for i 0 i 4 10 ReadValue ReadValue ReadSet1302 0 x83 minute ReadValue ReadValue ReadSet1302 0 x85 hour ReadValue ReadValue ReadSet1302 0 x87 day ReadValue ReadValue ReadSet1302 0 x89 month ReadValue ReadValue ReadSet1302 0 x8d year ReadValue ReadValue ReadSet1302 0 x8b 读星期 week ReadValue DisplayYear year DisplayMonth month DisplayDay day DisplayWeek week DisplayHour hour DisplayMinute minute DisplaySecond second dis temp get temp 温度显示 key scan 按键检测 void turn val char newval uchar flag uchar newaddr uchar s1num newval ReadSet1302 newaddr 读取当前时间 newval newval 将 bcd 码转换成 十进制 if flag 判断是加一还是减一 newval switch s1num case 1 if newval 99 newval 0 DisplayYear newval break case 2 if newval 12 newval 1 DisplayMonth newval break case 3 if newval 31 newval 1 DisplayDay newval break case 4 if newval 6 newval 0 DisplayWeek newval break case 5 if newval 23 newval 0 DisplayHour newval break case 6 if newval 59 newval 0 DisplayMinute newval break case 7 if newval 59 newval 0 DisplaySecond newval break default break else newval switch s1num case 1 if newval 0 newval 99 DisplayYear newval break case 2 if newval 0 newval 12 DisplayMonth newval break case 3 if newval 0 newval 31 DisplayDay newval break case 4 if newval 0 newval 6 DisplayWeek newval break case 5 if newval 0 newval 23 DisplayHour newval break case 6 if newval 0 newval 59 DisplayMinute newval break case 7 if newval 0 newval 59 DisplaySecond newval break default break WriteSet1302 newaddr 1 newval 10 0 i ds 1 i 4 while i 0 i bit tempreadbit void uint i bit dat ds 0 i ds 1 i i dat ds i 8 while i 0 i return dat uchar tempread void uchar i j dat dat 0 for i 1 i 8 i j tempreadbit dat j 1 return dat void tempwritebyte uchar dat uint i uchar j bit testb for j 1 j 1 if testb ds 0 i i ds 1 i 8 while i 0 i else ds 0 i 8 while i 0 i ds 1 i i void tempchange void dsreset delayms 1 tempwritebyte 0 xcc tempwritebyte 0 x44 key scan 按键函数 uint get temp uchar a b tempchange 温度函数 dsreset delayms 1 tempwritebyte 0 xcc tempwritebyte 0 xbe a tempread b tempread temp b temp warn l2 else if t warn l2 warn 10 0 x03 else if t warn h1 warn 40 0 x04 else if t warn h2 warn 10 0 x0c else i 40 while i dis temp get temp DisSecond second void main init Init DS1302 while 1 tempchange read date deal temp key scan void key scan void uchar miao s1num 0 uchar s1num 0 if menu 0 delayms 5 if menu 0 while menu s1num while 1 if menu 0 delayms 5 if menu 0 while menu s1num miao ReadSet1302 0 x81 second miao WriteSet1302 0 x80 miao 0 x80 write com 0 x0f 光标闪射 if s1num 1 year ReadSet1302 0 x8d write com 0 x80 4 年光标 if add 0 delayms 3 if add 0 while add turn val year 1 0 x8d 1 if dec 0 delayms 3 if dec 0 while dec turn val year 0 0 x8d 1 if s1num 2 month ReadSet1302 0 x89 write com 0 x80 7 月光标 if add 0 delayms 3 if add 0 while add turn val month 1 0 x89 2 if dec 0 delayms 3 if dec 0 while dec turn val month 0 0 x89 2 if s1num 3 day ReadSet1302 0 x87 write com 0 x80 10 日光标 if add 0 delayms 3 if add 0 while add turn val day 1 0 x87 3 if dec 0 delayms 3 if dec 0 while dec turn val day 0 0 x87 3 写入日寄 存器 if s1num 4 week ReadSet1302 0 x8b write com 0 x80 14 星期光标 if add 0 delayms 3 if add 0 while add turn val week 1 0 x8b 4 if dec 0 delayms 3 if dec 0 while dec tu

温馨提示

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

评论

0/150

提交评论