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

    基于AT89S51单片机的多功能电子万年历的设计.docx

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

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

    基于AT89S51单片机的多功能电子万年历的设计.docx

    1、基于AT89S51单片机的多功能电子万年历的设计单片机应用系统设计课题:姓名:班级:学号:指导老师:日期:电子万年历的设计基于 AT89S51单片机的多功能一、 绪论:现在是一个知识爆炸的新时代,新产品、新技术层出不穷,电子技术的发展更是日新 月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活, 改变着我们的世界。近些年,随着科技的发展和社会的进步, 人们对电子万年历的要求也越来越高,传统的电子万年历已不能满足人们的需求。 人们对多功能电子万年历的功能及工作顺序都非常熟悉,但是却很少知道它的内部结构以及工作原理。由于单片机具有灵活性强、 成本低、功耗低、保密性好等

    2、特点,还有,单片机是微型计算机的一个重要分枝,单片机是 把中央处理器、随机存储器、只读存储器、定时器 /计数器、并行接口接口、串行接口、 A/D转换器等主要计算机部件, 集中在一块集成电路芯片上。 虽然只是一个芯片,但从功能上它就相当于一台完整的微机。随着科学技术的迅猛发展,单片计集成度高、体积小、 运算速度快、功耗低、运行可靠、价格低廉等诸多优点,越来越显现出来。在日常生活方面,我们使 用彩电、录放机、 VCD照相机、手机等等可以说举不胜举。所以多功能电子万年历一般都 以单片机为核心,外加一些外围设备来实现。 由单片机作为多功能电子万年历的核心控制器, 通过按键可以进行定时、校时功能。输出设

    3、备显示器可以用液晶显示技术和数码管显示技术。意义:电子万年历作为电子类小设计不仅是市场上的宠儿, 也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性, 因此对作者的要求比较高, 不仅考察了对单片机的掌握能力更加强调了对 神农百草膏单片机扩展的应用。而且在操作的设计上要力 求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为比赛题目还是练 习题目都是很有价值。二、 系统总体方案设计:1、共具备两个功能:(1)显示年月日及分秒信息(2)具有可调整日期和时间功能。2、硬件电路的总体框图:图1总体硬件框图3、所用芯片U1AXTAL1YTA I oP0.0/AD0 P 0

    4、.1/AD1 P0.2/AD2P0.3/AD3P0.4/AD4X IAL2P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P 2.1/A9P SENP2.2/A10P2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P 1.0/T2P 3.0/RXDP 1.1/T2EXP 3.1/TXDP 1.2P 3.2/INT0P 3.3/INT1P 1.3P 1.4P3.4/T0P 1.5P3.5/T1P 1.6P 3.6/WRP 1.7P 3.7/RDAT89C52191894681229_3031_11_12233J517三、硬件系统设计:1

    5、、硬件原理图:DNGLM016LX222pFX1+5VAn*I 01U22+5VX1VCC1VCC2RSTSCLKX2I/O536123U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1.0P3.0/RXDP1.1P3.1/TXDP1.2P3.2/rNT0P1.3P3.3/rNTTP1.4P3.4/T0P1.5P3.5/T1P1.6P3.6

    6、/WRP1.7P3.7/RD1892930 k21 22- -23n25 F27-2810073635-343239V5+fl o 上工 fl oR -DNGU3VCCDQGND DS18B20P0 口作为6位液晶显示电路的驱动接口,这是由于 P0 口,它的驱动能力强,故只需外接上拉电阻便可以把 LED数码,在单片机进行动态扫描的时候不会 8位LED数码管的 ,由一个8位的I/O 口图3 硬件原理2、硬件原理:在硬件电路中采用 输出驱动电路工作处于开漏状态 管点亮。因为共阴的LED数码管它的驱动电流是分开的 影响彼此的电流,故该电路中的8位LED数码管均用共阳阴极的数码管。 位选线分别由相应的

    7、 P2. 0P2. 5控制,而将其相应的段选线并联在一起 控制,即 P0 口。P3 口与八个校时按键相连,以成功实现万年历校时的功能。四、系统软件设计:1、程序流程框图:2、年调整程序流程图,图4 程序流程框图月、日调整程序流程图类似。图5 年调整程序流程图3、源程序代码:#include 温度传送数据 IO 口0 /#include Command/#include LCD1602.hvoid show_time(); /液晶#define LCD_DA TA/#include DS1302.h显示程序1 / Data#define uint unsigned int/*1602 液 晶 显

    8、#define#define uchar unsigned char示部分子程序LCD_CLEAR_SCREENchar*/0x01 / 清屏hide_sec,hide_min,hide_hour#define LCD_HOMING,hide_day,hide_week,hide_m0x02 / 光onth,hide_year; /秒 ,分 ,时/Port标返回原点到日 ,月,年位闪的计数Definitions*void LCD_Write(bit style,char*unsigned char input)done,count,temp,flag,Up_Ke*y_flag,down_fla

    9、g;sbit LcdRs = P 2人5;LcdEn=0;uchar temp_value; /sbit LcdRw = P 2人6;LcdRs=style;温度值sbit LcdEn = P 2人7;LcdRw=0;ucharsfr DBPort = 0x80;_nop_();TempBuffer5,week_value/P0=0x80,P1=0x90,P2DBPort=input;2;=0xA0,P3=0xB0. 数据端口_nop_();/注意顺序内部等待函数LcdEn=1;*_nop_();/注意顺序sbit DS1302_CLK = PIT;*LcdEn=0;/实时时钟时钟线引脚*_n

    10、op_();sbit DS1302_IO = P 1人6;*LCD_Wait();/实时时钟数据线引脚unsigned charsbit DS1302_RST = P15;LCD_Wait(void)/实时时钟复位线引脚/ 设 置 显 示 模 式sbit p ortOI = P 3人0;LcdRs=0;*sbit p ort02 = P 3人1;LcdRw=1;*sbit p ort03 = P 3人2;_nop_();/ 延 时一个 时*sbit p ort04 = P 3人3;钟周期#define LCD_SHOWsbit ACC0 = ACCS;LcdEn=1; _nop_();0x04

    11、 /显示开sbit ACC7 = ACC7;#define LCD_HIDEsbit Set_Key = P 2人0;0x00 /显示关/模式切换键LcdEn=0;sbit Up_Key = P 2;return DBPort;/加法按钮#define LCD_CURSORsbit Down_Key = P 2人2;/向 LCD 写入命令或数据0x02 /显示光/减法按钮*标sbit out_Key_Key= P 2人3;*#define LCD_NO_CURSOR/立刻跳出调整模式按钮*0x00 /无光标sbit DQ = P19 /#define LCD_COMMAND#define LC

    12、D_FLASH0x01 / 光标闪闪动 void void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38);/8 位数据端口 ,2 行显示 ,5*7 点阵while(*str!=0)LCD_Write(LCD_DATA,*str);str+;LCD_Set_KeyDisplay(unsig ned char DisplayMode) LCD_Write(LCD_CO MMAND, 0x08|DisplayMode);LCD_Write(LCD_CO MMAND,0x38);LCD_Set_KeyDisplay( LCD_SHOW|LCD_NO_

    13、CU RSOR); / 开启显示 , 无 光标/ 设 置 输 入 模幵*卄*卄*卄*卄*卄*卄*#defineLCD_AC_UP_KEYLCD_Write(LCD_CO MMAND,LCD_CLEAR_SC REEN); /清屏LCD_Set_KeyInput(LC D_AC_UP_KEY|LCD_NO_ MOVE); /AC 递增 , 画面不动/*DS1302部分子*/typedef_SYSTEMTIME#define0x02LCD_AC_DOWN0x00/default/ 液 晶 字 符 输 入 的 位 置*时钟序structunsigned char Second; unsigned c

    14、har Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month;#define LCD_MOVEvoid GotoXY(unsigned charunsigned charYear;0x01 / 画x, unsigned char y)unsignedchar面可平移DateString11;#define LCD_NO_MOVEif(y=0)unsignedchar0x00TimeString9;/defaultLCD_Write(LCD_COSYSTEMTIME;/定义的M

    15、MAND,0x80|x);时间类型voidif(y=1)SYSTEMTIMELCD_Set_KeyInput(unsigneCurrentTime;d char InputMode)LCD_Write(LCD_COMMAND,0x80|(x-0x40);LCD_Write(LCD_CO#define AM(X)XMMAND, 0x04|InputMode);#define PM(X)(X+12)/将字符输出到液晶显示/ 转成 24 小时制void#define DS1302_SECOND/ 初 始 化Print(unsighttp:/www.shenn0x80/时钟LCD*ned char *

    16、str)芯片的寄存器位置,存放时/ 相char#define DS1302_MINUTE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH 0x88#define DS1302_YEAR0x8C voidDS1302InputByte(unsigned char d) / 实时时钟写入一 字节 (内部函数 ) unsigned char i;ACC = d; for(i=8; i0; i-) DS1302_IOACC0; 当于汇编中的 RRCDS1302_CLK

    17、 = 1;DS1302_CLK = 0;ACC = ACC 1;unsigned charDS1302OutputByte(void) /实时时钟读取一字节 (内部函数 )unsigned char i;for(i=8; i0; i-)ACC = ACC 1; /相当于汇编 中的 RRCACC7DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0; return(ACC);void Write1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302 地址 , ucData: 要写的数据 DS1302_

    18、RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr);/ 地址,命令DS1302InputByte(ucDa); / 写 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0;unsignedRead1302(unsigned ucAddr) /读取 DS1302 某 地址的数据unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); / 地址,命令 ucDat

    19、aDS1302OutputByte();/ 读 1Byte 数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEM TIME *Time) / 获取时钟 芯片的时钟数据到自定义 的结构型数组 unsignedReadValue;ReadValue Read1302(DS1302_SECON D);Time-Second (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue Read1302(DS1302_MINUT E);Time-Minute (R

    20、eadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValueRead1302(DS1302_HOUR);Time-Hour (ReadValue&0x70)4)*10+ (ReadValue&0x0F);ReadValueRead1302(DS1302_DAY);Time-Day (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValueRead1302(DS1302_WEEK);Time-Week (ReadValue&0x70)4)*10+ (ReadValue&0x0F);ReadValue Read1302(

    21、DS1302_MONTH );Time-Month (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValueRead1302(DS1302_YEAR);Time-Year (ReadValue&0x70)4)*10 + (ReadValue&0x0F); Time-DateString5 = Time-Month/10 + 0;Time-DateString6= Time-Month%10 + 0;elseTime-DateString10 = 0; / 字符串末尾加 0 ,判 断结束字符 voidDateToStr(SYSTEMTIME *Time

    22、) /将时间年 ,月 ,日,星期数据转换成液晶显 示字符串,放到 数组里 DateString if(hide_year2) /这里的 if,else 语句都是判 断位闪烁 ,2 就不显示 ,输出字符串为 2007/07/22Time-DateString0= 2;Time-DateString1= 0;Time-DateString5 = ;Time-DateString6 = ;Time-DateString7if(hide_dayDateString8 = Time-Day/10 + 0;Time-DateString9 = Time-Day%10 + 0;else void TimeT

    23、oStr(SYSTEMTIME *Time) /将时 ,分 ,秒数据 转换成液晶显示字符放到 数组 TimeString; if(hide_hourTimeString0 = Time-Hour/10 + 0;Time-TimeString1= Time-Hour%10 + 0;elseTime-TimeString0 = ;Time-DateString2 = Time-Year/10 + 0;Time-DateString3 = Time-Year%10 + 0;elseTime-DateString0 = ;Time-DateString1 = ;Time-DateString2 = ;

    24、Time-DateString3 = ;Time-DateString4Time-DateString8 = ;Time-DateString9 if(hide_weekWeek%10 + 0; / 星 期的数据另外放到 week_value 数组 里,跟 年, 月 ,日的分开存放 ,因为等一 下要在最后显示elseweek_value0 Time-TimeString1 = ;Time-TimeString2if(hide_minTimeString3 = Time-Minute/10 + 0;Time-TimeString4 = Time-Minute%10 + 0;elseTime-Ti

    25、meString3 = ;Time-TimeString4 = ;Time-TimeString5if(hide_month2)week_value1 = 0;if(hide_secTimeString6 = Time-Second/10 + 0;Time-TimeString7 = Time-Second%10 + 0;else/*ds18b20序*/子程unsignedReadOneChar(void)charTime-TimeString6 = ;Time-TimeString7 = ;Time-DateString80;void/时钟芯片初始化unsigned char Second=

    26、Read1302(DS1302_ SECOND);if(Second&0x80) /判断 时钟芯 片是否 关闭Initial_DS1302(void)Write1302(0x8e,0x00);/写入允许Write1302(0x8c,0x07);/ 以下写入初始化时间 日期:07/07/25. 星期 : 3. 时间 :23:59:55Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); /禁止写入/*ds18b20 子函数(晶振 12MHz )*


    注意事项

    本文(基于AT89S51单片机的多功能电子万年历的设计.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

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




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

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

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

    收起
    展开