欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    完整word版智能电子钟LCD显示仿真图和程序.docx

    • 资源ID:29807055       资源大小:76.31KB        全文页数:23页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    完整word版智能电子钟LCD显示仿真图和程序.docx

    1、完整word版智能电子钟LCD显示仿真图和程序#include #include #define uint unsigned int#define uchar unsigned char#define Date P3 /数码管数据口#define com P1sbit DS1302_CLK = P17; /实时时钟时钟线引脚 sbit DS1302_IO = P26; /实时时钟数据线引脚 sbit DS1302_RST = P16; /实时时钟复位线引脚sbit ACC0 = ACC0;sbit ACC7 = ACC7;uchar code table=0x3f,0x06,0x5b,0x4f

    2、,0x66,0x6d,0x7d,0x07,0x7f,0x6f;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; /秒,分,时到日,月,年位闪的计数sbit Set = P20; /模式切换键sbit Up = P21; /加法按钮sbit Down = P22; /减法按钮sbit out = P23; /立刻跳出调整模式按钮sbit di=P24; /蜂鸣器char done,count,temp,flag,up_flag,down_flag;uchar TempBuffer5,week_val

    3、ue2;void show_time(); /显示程序/* 功能 : 延时,延时时间大概为ms。*/void delayms(int x)int i,j; for(i=110; i0; i-) for(j=x; j0; j-);void beep() di=1;delayms(400); di=0;/*名称: 数码管显示*/xianshi(uchar shi1,uchar shi2,uchar fen1,uchar fen2,uchar miao1,uchar miao2)Date=tableshi1;com=0xfe;delayms(10);Date=tableshi2;com=0xfd;d

    4、elayms(10);Date=tablefen1;com=0xfb;delayms(10);Date=tablefen2;com=0xf7;delayms(10);Date=tablemiao1;com=0xef;delayms(10);Date=tablemiao2;com=0xdf;delayms(10);/*1602液晶显示部分子程序*/sbit LcdRs= P25;sbit LcdRw= P26;sbit LcdEn = P27;sfr DBPort= 0x80; /内部等待函数*unsigned char LCD_Wait(void) LcdRs=0; LcdRw=1; _nop

    5、_(); LcdEn=1; _nop_(); LcdEn=0;return DBPort; /向LCD写入命令或数据*#define LCD_COMMAND 0 / Command#define LCD_DATA 1 / Data#define LCD_CLEAR_SCREEN 0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();/注意顺序LcdEn=1;

    6、_nop_();/注意顺序LcdEn=0; _nop_();LCD_Wait(); /设置显示模式*#define LCD_SHOW 0x04 /显示开#define LCD_HIDE 0x00 /显示关 #define LCD_CURSOR 0x02 /显示光标#define LCD_NO_CURSOR 0x00 /无光标 #define LCD_FLASH 0x01 /光标闪动#define LCD_NO_FLASH 0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|Di

    7、splayMode); /设置输入模式*#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 / default#define LCD_MOVE 0x01 / 画面可平移#define LCD_NO_MOVE 0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/初始化LCD*void LCD_Initial() LcdEn=0; LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7

    8、点阵 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_COMMAND,0x80|x); if(y=1)LCD_Write(LCD_COMMAND,

    9、0x80|(x-0x40); /将字符输出到液晶显示void Print(unsigned char *str)while(*str!=0) LCD_Write(LCD_DATA,*str);str+;/*DS1302时钟部分子程序*/typedef struct _SYSTEMTIME_ unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned c

    10、har DateString11; unsigned char TimeString9;SYSTEMTIME; /定义的时间类型SYSTEMTIME CurrentTime;#define AM(X) X#define PM(X) (X+12) / 转成24小时制#define DS1302_SECOND 0x80 /时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#d

    11、efine DS1302_YEAR 0x8C void DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned char i;ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数)unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于

    12、汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1;DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(un

    13、signed char ucAddr) /读取DS1302某地址的数据unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) /获取时钟芯片的时钟数据到自定义的结构型数组 unsigned

    14、char ReadValue; ReadValue = Read1302(DS1302_SECOND); Time-Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MINUTE); Time-Minute = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR); Time-Hour = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue

    15、 = Read1302(DS1302_DAY); Time-Day = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_WEEK); Time-Week = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH); Time-Month = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time-Ye

    16、ar = (ReadValue&0x70)4)*10 + (ReadValue&0x0F); void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateStringif(hide_yearDateString0 = 2; Time-DateString1 = 0; Time-DateString2 = Time-Year/10 + 0; Time-DateString3 = Time-Year%10 + 0; else Time-DateString0 = ; Time-DateString1 = ; Time-Dat

    17、eString2 = ; Time-DateString3 = ; Time-DateString4 = /; if(hide_monthDateString5 = Time-Month/10 + 0; Time-DateString6 = Time-Month%10 + 0; else Time-DateString5 = ; Time-DateString6 = ; Time-DateString7 = /; if(hide_dayDateString8 = Time-Day/10 + 0; Time-DateString9 = Time-Day%10 + 0; elseTime-Date

    18、String8 = ;Time-DateString9 = ; if(hide_weekWeek%10 + 0; else week_value0 = ; week_value1 = 0; Time-DateString10 = 0; /字符串末尾加 0 ,判断结束字符 void TimeToStr(SYSTEMTIME *Time) if(hide_hourTimeString0 = Time-Hour/10 + 0; Time-TimeString1 = Time-Hour%10 + 0; else Time-TimeString0 = ;Time-TimeString1 = ; Time

    19、-TimeString2 = :;if(hide_minTimeString3 = Time-Minute/10 + 0; Time-TimeString4 = Time-Minute%10 + 0; else Time-TimeString3 = ;Time-TimeString4 = ; Time-TimeString5 = :; if(hide_secTimeString6 = Time-Second/10 + 0; Time-TimeString7 = Time-Second%10 + 0; elseTime-TimeString6 = ;Time-TimeString7 = ; Ti

    20、me-DateString8 = 0;void Initial_DS1302(void) /时钟芯片初始化 unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80) /判断时钟芯片是否关闭 Write1302(0x8e,0x00); /写入允许 Write1302(0x8c,0x07); / Write1302(0x88,0x07);Write1302(0x86,0x25); Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59); Write1302(0x8

    21、0,0x55);Write1302(0x8e,0x80); /禁止写入 void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+) for(j=0;j0;delay-)for(i=0;i0x59) /超过59秒,清零 temp=0; break; case 2:temp=Read1302(DS1302_MINUTE); /读取分数 temp=temp+1; /分数加1up_flag=1;if(temp0x59) /超过59分,清零temp=0;break;case 3: temp=Read1302(DS1302_HO

    22、UR); /读取小时数temp=temp+1; /小时数加1up_flag=1;if(temp0x23) /超过23小时,清零 temp=0; break; case 4: temp=Read1302(DS1302_WEEK); /读取星期数 temp=temp+1; /星期数加1 up_flag=1; if(temp0x7) temp=1; break; case 5: temp=Read1302(DS1302_DAY); /读取日数 temp=temp+1; /日数加1 up_flag=1; if(temp0x31) temp=1; break; case 6: temp=Read1302

    23、(DS1302_MONTH); /读取月数 temp=temp+1; /月数加1 up_flag=1; if(temp0x12) temp=1; break; case 7: temp=Read1302(DS1302_YEAR); /读取年数 temp=temp+1; /年数加1 up_flag=1; if(temp0x85) temp=0; break; default:break;while(Up=0); /void Downkey()/降序按键 Down=1;if(Down=0) mdelay(8); switch(count) case 1: temp=Read1302(DS1302_

    24、SECOND); /读取秒数 temp=temp-1; /秒数减1 down_flag=1; /数据调整后更新标志 if(temp=0x7f) /小于0秒,返回59秒 temp=0x59; break; case 2: temp=Read1302(DS1302_MINUTE); /读取分数 temp=temp-1; /分数减1 down_flag=1; if(temp=-1) temp=0x59; /小于0秒,返回59秒 break; case 3: temp=Read1302(DS1302_HOUR); /读取小时数 temp=temp-1; /小时数减1 down_flag=1; if(temp=-1) temp=0x23; break; case 4: temp=Read1302(DS1302_WEEK); /读取星期数 temp=temp-1; /星期数减1 down_flag=1; if(temp=0) temp=0x7; break; case 5: temp=Read1302(DS1302_DAY); /读取日数 temp=temp-1; /日数减1 down_flag=1;


    注意事项

    本文(完整word版智能电子钟LCD显示仿真图和程序.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开