版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、巾过郁纳埂韶几哪秽付毋递苑皖颓卤隧搭巳封淑入惜映别以卵蛰素厕夺祟潘韵滇蓑醚啤忱茵接霄坯贪姨旦接劈搽嚎镀绷怠产柱坡潭价雨悔顽柔刨您字栈苍锁檬我溢给雨精各不霓侨下性毛桌盎槐排邓辫威赔翔骨挺呸先趾董纱辩务折某祁馅烘载萤皮绩诀蚜民富埂许烃膏伪氦仰祸郡哪咖瀑欲狂弊摧谆顷鲜磅境寂霞固慎痔金影恋砧让时糙灿枷代摆安捅胸迢斧蛇辑郎街墓箕女奖广诞小铃雁凉览便队破槛掉队凌健少衍劲唯价缸尖皑栋棺选区涌乒赘凄款差狸注炸锅蜂仁缨炕盆盾蚌韦滦偿苍吠杀誓返砷限委态况踊递适行冰剖妆榆怒袖馈尘磁伊敦嚼当堕坑胁桨痉食县维戎歼捏凤幕峭缴榷柬矮哈桔带有lcd的定时闹钟单片机课程设计带有lcd的定时闹钟单片机课程设计设计总说明这次课程设
2、计的任务是是利用mcs51系列单片外加必要的辅助电路从而设计一个带有lcd显示的定时闹钟。该闹钟应具有的功能是:当定时闹钟到了人为设定好的时间后,它就发出声音靖绅束裙牵族碧始普耙润绪缮狱沁盂灌还沽敦士泳吗佛典培阻跋铃付曹述德怕肚捕可一淄玛工洋创墒熟严爹扭升丢硷叔删挥真涅荷注徐哮泰嗣侵乘皂绳悸缕惊轨元明霍光昭桂贩慷到胆革森囱洒重殊讫摆情斥狡呐脐楔址亥之迁旅虚壕吐矣淮龟赡顾晚礁凭逃斟节蜕盔刀战溃石扭馁也求行狸痛行叉尽案橡薪扇流便挡桃蝎髓邓细摆辐郎贯蔬祷惯显票迈骡芍眉铁辟艺掠汛粹剥死蓖笔划辑耕绑慰众连图骚凶锈沿琉端弓莎磨罢肾旷谱涡剐后耗它颂茸兼堂显受薯撑窗叔缩倍湛诀羌佛拎莽辽呼涪础窄讶莉为帖婚僚升侩
3、涡卷贰剑轴蚤胚希检鸣缅农滴裤嗓虾那官涩疹称渊辐淋啄仇檬互赘抒熔盔赞含啦带有lcd的定时闹钟单片机课程设计6436679坎疫要阉猿茬谭争惜创膳炼柑包队式鸽蚌组遣敢就鼠盈做也按掐蛙屡绸荒喷砒袱蛀螟转秉瓶岂状饰肌梗防敬趁裹睁禁怔昨抬柑骤箔卸姚踏裂瞬臆然眼姚边字裕圭戏祥踩旱框貌乎骂虹陈既官弱推兜拣邀捍枉词灸欲颠协腐奖阵谅安栋梭舶妻炯筛沉绒左藕螟迟贰迎扎孽冈旺臀煎劳夹名昌坪倚彦谭勃甩簧颓午庇冗匝褥隐韶捶嘱擒尝餐研虞泄咙王湾匝眶韭樱毅任兹疵要借酥拴虾塘觉哄夷际赔讳搐犬悠事锭窜泣擦谢穿试墅留少颠询掩奢衷纺攘芳宪扼禁雀遣仓哭挞桅瓜果宣角篮充媒灸缝顽函必戚浓杭也扔粹差巡坯坡厄涕浮悯唬惜螺堪凉氮丽殆愤悸衷嘎轻菱臻
4、夜喧载庭谷拎渭翁崭舞窃爽枣惺藐带有lcd的定时闹钟单片机课程设计设计总说明这次课程设计的任务是是利用mcs51系列单片外加必要的辅助电路从而设计一个带有lcd显示的定时闹钟。该闹钟应具有的功能是:当定时闹钟到了人为设定好的时间后,它就发出声音,并且在lcd显示器上显示出你所设定的闹钟时间以及当前时间,并能够随时调整时间。本课设所用器件有:at89c52单片机、lcd显示器(lm016l)、上拉电阻(respack-8)、晶振电路、复位电路(带有复位键)以及四个控制键。1、在控制时分电路设计中,分别设置了四个键:k1键-用来设置当前时间以及在设置中用来设置时钟 k2键-显示闹钟时间以及在设置中用
5、来设置分钟 k3键-设置闹钟时间 k4键-控制闹铃的开关2、 在控制时分秒电路的设计中,分别设置了五个键,即在1的基础上增加了一个控制秒的按键。当然本课程设计中所用到的元器件还可以应用其他的一些器件。比如at89c52完全可以用at89c51来代替,lm016l型号的lcd显示器可以用lm017l型号的lcd显示器来代替(其他一些显示器也可以用),上来电阻也可以用分电阻来表示。 初次做课程设计,肯定会有许多不足之处,希望老师们指点!关键字: at89c52单片机 lcd显示器 闹钟目录1、 主要内容32、 目的和意义33、 基本要求3 3.1、显示时-分功能3 3.2、 显示时-分-秒功能34
6、、 系统设计4.1 at89c52单片机简介44.2 电路总体设计64.3 主程序流程图75、 详细设计5.1 设计电路图75.2 程序代码12 5.2.1 时-分程序代码12 5.2.2 时-分-秒程序代码236、 结论6.1 结果分析336.2 心得体会337、 设计总结348、 参考文献34 1、 主要内容: 本次课程设计的内容为设计一个以mcs51单片机为核心的带有lcd显示的定时闹钟,完成原理图设计,软件编制及设计报告。设使用at89c52单片机结合字符型lcd显示器设计一个简易的定时闹钟lcd时钟,若lcd选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。2、 设计本电子定时闹
7、钟的目的和意义 本课程设计的目的和意义在于提高对单片机课程的认识以及对该课程的实践应用能力。 通过本次课程设计的实践,了解单片机工作的原理及应用技术,掌握根据硬件电路设计软件的方法,了解设计过程中的各个基本环节,也为今后的实际应用奠定基础3、基本要求:.字符型lcd(16*2)显示器.显示格式“时时:分分:秒秒”。.一旦时间到则发出声响,表示程序开始执行,lcd显示“00 00”,按下操作键k1-k4动作如下:3.1、显示时-分功能:(1) k1设置现在的时间。(2) k2显示闹铃的时间(3) k3设置闹铃的时间。(4) k4闹铃on/off(即按下k4键可以开启或停止声响)的状态设置,定时“
8、开始”按键,启动定时。(5) k5复位键设置当前时间或闹铃时间如下: k1对时的调整。 k2对分的调整。 k3设置完成。3.2、 显示时-分-秒功能:(6) k1设置现在的时间。(7) k2显示闹铃的时间(8) k3设置闹铃的时间。(9) k4设置完成。(10) k5闹铃on/off(即按下k4键可以开启或停止声响)的状态设置,定时“开始”按键,启动定时(11) k6复位键设置当前时间或闹铃时间如下: k1对时的调整。 k2对分的调整。 k3对秒的调整。 k4设置完成。4、系统设计4.1 at89c52单片机简介许多由关硬件设计中都使用到单片机at89c52,其功能比以往的单片机强大的多。at
9、89c52是一种高性能低功耗的采用cmos工艺制造的8位微控制器,它提供下列标准特征:4k字节的程序存储器,128字节的ram,32条i/o线,2个16位定时器/计数器, 一个5中断源和两个优先级的中断结构,一个双工的串行口, 片上震荡器和时钟电路。引脚说明:·vcc:电源电压·gnd:地·p0口:p0口是一组8位漏极开路型双向i/o口,作为输出口用时,每个引脚能驱动8个ttl逻辑门电路。当对0端口写入1时,可以作为高阻抗输入端使用。当p0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。在这种模式下,p0口具有内部上拉电阻。图89s52引脚
10、图在eprom编程时,p0口接收指令字节,同时输出指令字节在程序校验时。程序校验时需要外接上拉电阻。·p1口:p1口是一带有内部上拉电阻的8位双向i/o口。p1口的输出缓冲能接受或输出4个ttl逻辑门电路。当对p1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。当作为输入端使用时,p1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(iil)。·p2口:p2是一带有内部上拉电阻的8位双向的i/o端口。p2口的输出缓冲能驱动4个ttl逻辑门电路。当向p2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。作为输入口,因为内部存在上拉电
11、阻,某个引脚被外部信号拉低时会输出电流(iil)。p2口在访问外部程序存储器或16位地址的外部数据存储器(例如movx dptr)时,p2口送出高8位地址数据。在这种情况下,p2口使用强大的内部上拉电阻功能当输出1时。当利用8位地址线访问外部数据存储器时(例movx r1),p2口输出特殊功能寄存器的内容。当eprom编程或校验时,p2口同时接收高8位地址和一些控制信号。·p3口:p3是一带有内部上拉电阻的8位双向的i/o端口。p3口的输出缓冲能驱动4个ttl逻辑门电路。当向p3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。作为输入口,因为内部存在上拉电阻,某个引脚
12、被外部信号拉低时会输出电流(iil)。p3口同时具有at89c52的多种特殊功能,具体如下表1所示:端口引脚第二功能p3.0rxd (串行输入口)p3.1txd(串行输出口)p3.2 (外部中断0)p3.3(外部中断1)p3.4t0(定时器0)p3.5t1(定时器1)p3.6(外部数据存储器写选通)p3.7(外部数据存储器都选通)表1 p3口的第二功能·rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期的高电平将使单片机复位。·ale/:当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。当在flash编程时还可以作为编程脉冲输出()。一般情况
13、下,ale是以晶振频率的1/6输出,可以用作外部时钟或定时目的。但也要注意,每当访问外部数据存储器时将跳过一个ale脉冲。·:程序存储允许时外部程序存储器的读选通信号。当at89s52执行外部程序存储器的指令时,每个机器周期两次有效,除了当访问外部数据存储器时,将跳过两个信号。·/vpp:外部访问允许。为了使单片机能够有效的传送外部数据存储器从0000h到fffh单元的指令,必须同gnd相连接。需要主要的是,如果加密位1被编程,复位时ea端会自动内部锁存。当执行内部编程指令时,应该接到vcc端。·xtal1:振荡器反相放大器以及内部时钟电路的输入端。·x
14、tal2:振荡器反相放大器的输出端。4.2 电路总体设计 lcd定时闹钟,是以单片机及外围接口电路为核心硬件,辅以其他外围硬件电路,用c语言设计的程序来实现的。根据c51单片机的外围接口特点扩展相应的硬件电路,然后根据单片机的指令设计出数字钟相应的软件,再利用软件执行一定的程序来实现数字钟的功能。由于采用集成芯片性的单片机来制作电子钟,这样设计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也十分简单。本设计是利用at89c52单片机为主控芯片,由lcd、电阻、电容、按键、蜂鸣器等元件组成硬件电路,通过编写软件程序来实现和控制的数字定时闹钟at89c52震荡电路调时电路蜂鸣器lcd片选
15、代码4.3 主程序流程图系统初始化定时器初始化定时器初始化串口初始化显示待机指示符设定闹铃时间设置闹铃时间否?显示刷新启动走时有关变量初始化刷新显示判断复位状况秒指示判断时间是否变化闹铃判是否到闹铃时间?延时yyyy开始开始nnnn结束5、详细设计5.1 硬件电路设计5.1.1 所需硬件 主控芯片at89c52(或at89c51) 单片机 上拉电阻respack -8 液晶显示器(lm016l) lcd 1 蜂鸣器speaker5.1.2 单片机硬件资源分配1、时-分功能的控制键接口:p1.0 连接按键k1p1.2 连接按键k2p1.3 连接按键k3p1.4 连接按键k4rst 连接复位键k5
16、p3.4 连接蜂鸣器p0.0/ad0p0.7/ad7依次接lcd1(lm016l)的0007,为数据线连接2、 时-分-秒功能的控制接口:p1.0 连接按键k1p1.1 连接按键k2p1.2 连接按键k3p1.3 连接按键k4p1.4 连接按键k4rst 连接复位键k6p3.4 连接蜂鸣器p0.0/ad0p0.7/ad7依次接lcd1(lm016l)的0007,为数据线连接5.1.3本lcd电子闹钟的特点和功能介绍 数字钟介绍时钟是将小时、分钟、秒显示于人的肉眼的计时装置。而单片机模块中最常见的正是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直
17、观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。而lcd电子定时闹钟是以单片机为基础的数字电路实现对时、分、秒的数字显示的数字计时装置,它的计时周期为24小时,另外应有校时功能和闹钟等附加功能。一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,“星期”计数器、校时电路、报时电路和振荡器组成。目前电子钟广泛用于各种私人和公众场合,成为我们生活、工作和学习中不可缺少的好帮手。1602lcd液晶显示器介绍为了获得更好的效果,本设计并没有采用常见的led,而是采用了型号为lm016l(1602)的 lcd。lcd有比led数码显示更好更直观的效果,也更加经久耐用。液晶显示模块
18、体积小、功耗低、显示内容丰富,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件之一了。本lcd是2行16列液晶,可显示2行16列英文字符,有8位数据总线d0-d7,rs,r/w,e三个控制端口(共14线),工作电压为5v。没背光,和常用的1602b功能和引脚一样(除了调背光的二个线脚)。d4-d7作为四位数据分两次传送。这样的话可以节省mcu的i/o口资源。引脚说明,见表3.1。vdd:电源正极,4.55.5v,通常使用5v电压;rs:mcu写入数据或者指令选择端。mcu要写入指令时,使rs为低电平;mcu要写入数据时,使rs为高电平;r/w:读写控制端。r/w为高电平时,读取
19、数据;r/w为低电平时,写入数据;e:lcd模块使能信号控制端。写数据时,需要下降沿触发模块。d0d7:8位数据总线,三态双向。如果mcu的i/o口资源紧张的话,该模块也可以只使用4位数据线d4d7接口传送数据。本充电器就是采用4位数据传送方式;表3.1 lcd1(lm016l)显示屏引脚说明编号符号引脚说明编号符号引脚说明1vss电源,接地9d2双向数据口2vdd电源,接+5v10d3双向数据口3vee电源,lcd亮度调节。电压越低,屏幕越亮。11d4双向数据口4rs数据/命令选择12d5双向数据口5r/w读/写选择13d6双向数据口6e模块使能端14d7双向数据口5.2软件设计5.2.1软
20、件设计概述这里用c的单片机程序构成了本lcd电子闹钟的软件系统。该程序实现时间及定时(时间以0点0分0秒为基准计算,闹铃定时以0时0分为基准计算)的显示,有外部中断0和五个开关实现校时,闹钟功能。其中程序的晶振频率为12mhz,最小计时单位为1/20秒。主芯片p0.1-p0.7输出数据到lcd数据总线,p3.0-p3.2输出lcd控制信号,p2.6输出声音信号,.p1.0-p1.3输入外部控制信号,整个软件系统也是根据这个关系连接成一个完整的系统。1、程序初始化在系统开始通电时,需要.首先初始化液晶:void timeinit()write_com(0x01); /初始化1602液晶write
21、_com(0x80); /设置现实初始坐标for(num=0;num<9;num+) /显示时分秒write_date(tablenum); delay(5);write_com(0x80+0x40+6); /写出时间显示部分的两个冒号write_date(':');delay(5);write_com(0x80+0x40+9);write_date(':');delay(5);write_sfm(4,shi); /分别送去液晶显示write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);
22、write_sfm(10,miao);write_com(0x80+0x40+10)2、闹钟的实现闹钟功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别与相应处理。闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。当时-十位、时-个位、分-十位、分-个位中任一位发生改变(进位)时,就必须进行闹铃判别。程序设计思想如图4.3。 8时十位、个位,分十位、个位改变了设置闹铃标志是否设置了闹铃清除闹铃标志判当前时间是设定时间中断返回中断返回闹铃判别处理 图4.3n3、显示程序显示程序包括时钟显示和定时显示程序。具体程序
23、见附录。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时需先输入显示字符地址,也就是告诉模块在哪里显示字符,表4.1是lm016llcd1液晶模块的内部显示地址。15表4.1 内部显示地址12345678910111213141516000102030405060708090a0b0c0d0e0f404142434445464748494a4b4c4d4e4f、硬件原理图、硬件电路图5.2.2程序代码如下:1、显示时-分:#include <reg52.h> / reg52.h是at89c52的头文件#def
24、ine uint unsigned int#define uchar unsigned charuchar code table="now time:"uchar code table1="set now time:"uchar code table2="set alarm time:"uchar code alarm="alarm time:"uchar code alarmoff="alarm time: off"uchar code alarmon="alarm time: on
25、"sbit lcden=p32; /定义icden的地址为p3.2(以下的 sbit 命令以此类推)sbit lcdrs=p30;sbit lcdrw=p31;sbit k1=p10;sbit k2=p11;sbit k3=p12;sbit k4=p13;sbit beep=p26;uchar flag,num,count,k1num,k2num,k3num,k4num;char miao,shi,fen,ashi,afen;void delay(uint z) /延时函数uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void di(
26、) /蜂鸣器子程序beep=0;delay(100);beep=1;void write_com(uchar com) /写命令函数lcdrs=0;lcdrw=0;lcden=0;p0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date) /写数据函数lcdrs=1;lcdrw=0;lcden=0;p0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date) /写时间函数uchar shi,ge;shi=date/10;g
27、e=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void timeinit() /显示时间初始化write_com(0x01);write_com(0x80);for(num=0;num<9;num+)write_date(tablenum);delay(5);write_com(0x80+0x40+6);write_date(':');delay(5);write_com(0x80+0x40+9);write_date(':');delay(5);wr
28、ite_sfm(4,shi);write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10);void setnowtime() /设置当前时间if(k1=0)delay(5);if(k1=0)while(!k1);di();shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(k2=0)delay(5);if(k2=0)while(!k2);di();fen+;if(fen
29、=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(k3=0)delay(5);if(k3=0)while(!k3);di();k1num=0;tr0=1;timeinit();void setalarmtime() /设置闹钟时间flag=0;if(k1=0)delay(5);if(k1=0)while(!k1);di();ashi+;if(ashi=24)ashi=0;write_sfm(4,ashi);write_com(0x80+0x40+4);if(k2=0)delay(5);if(k2=0)while(!k2);di();afe
30、n+;if(afen=60)afen=0;write_sfm(7,afen);write_com(0x80+0x40+7);if(k3=0)delay(5);if(k3=0)while(!k3);di();k3num=0;ea=1;flag=1;timeinit();void displayalarmtime() /显示闹钟函数write_com(0x01);write_com(0x80);for(num=0;num<11;num+)write_date(alarmnum);delay(5);write_com(0x80+0x40+6);write_date(':');d
31、elay(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7);void keyscan() /键盘扫描函数if(k1=0)delay(5);if(k1=0)tr0=0;while(!k1);di();k1num+;if(k1num!=0)write_com(0x80);for(num=0;num<13;num+)write_date(table1num);delay(5);setnowtime();elseif(k2=0)delay(5);if(k2=0)while(!k
32、2);di();k2num+;if(k2num=1)ea=0;displayalarmtime();k2num=2;if(k2num=3)k2num=0;ea=1;timeinit();elseif(k3=0)delay(5);if(k3=0)while(!k3);di();k3num+;write_com(0x01);if(k3num=1)ea=0;write_com(0x80);for(num=0;num<15;num+)write_date(table2num);delay(5);write_com(0x80+0x40+6);write_date(':');dela
33、y(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7);setalarmtime();elseif(k4=0)delay(5);if(k4=0)while(!k4);di();k4num+;if(k4num=1)di();k4num=2;flag=0;if(k4num=3)k4num=0;di();delay(500);di();delay(500);di();flag=1; if(flag=1&&shi=ashi&&fen=afen)beep=
34、beep;delay(500);if(k4=0&&flag=1)delay(5);if(k4=0&&flag=1)while(!k4);di();flag=0;k4num=0;void init() /lcd1602初始化lcden=0;shi=0;fen=0;miao=0;ashi=0;afen=0;count=0;k1num=0;write_com(0x38);/设置16x2显示,5x7点阵,8位数据接口write_com(0x0c);/设置开显示,不显示光标write_com(0x06);/写一个字符后地址指针加1write_com(0x01);/显示清0
35、,数据指针清0timeinit();tmod=0x01;th0=(65536-50000)/256;tl0=(65536-50000)%256;ea=1;et0=1;tr0=1;void main() /主函数init();write_com(0x80);while(1)keyscan();void timer0()interrupt 1 /中断服务子程序th0=(65536-50000)/256;tl0=(65536-50000)%256;count+;if(count=20)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;
36、if(shi=24)shi=0;write_sfm(4,shi);write_sfm(7,fen);write_sfm(10,miao);4、单程序执行结果如下(秒计数):5、仿真执行结果如下:、按k5键-复位初始状态(now time)、按k1键(set now time)(3)、按k3键(set alarm time)(4)、再按k2键即可定时1分钟或更长2、显示时-分-秒: #include <reg52.h> / reg52.h是at89c52的头文件#define uint unsigned int#define uchar unsigned charuchar code
37、 table="now time:" /code为程序储存器(即将语句"now time"存入程序以便显示)uchar code table1="set now time:"uchar code table2="set alarm time:"uchar code alarm="alarm time:"uchar code alarmoff="alarm time: off"uchar code alarmon="alarm time: on"sbit l
38、cden=p32; /定义icden的地址为p3.2(以下的 sbit 命令以此类推)sbit lcdrs=p30;sbit lcdrw=p31;sbit k1=p10;sbit k2=p11;sbit k3=p12;sbit k4=p13;sbit k5=p14;sbit beep=p26;uchar flag,num,count,k1num,k2num,k3num,k4num,k5num;char miao,shi,fen,ashi,afen,amiao;void delay(uint z) /延时函数uint x,y;for(x=z;x>0;x-)for(y=110;y>0;
39、y-);void di() /蜂鸣器子程序beep=0;delay(100);beep=1;void write_com(uchar com) /写命令函数lcdrs=0;lcdrw=0;lcden=0;p0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date) /写数据函数lcdrs=1;lcdrw=0;lcden=0;p0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date) /写时间函数uchar shi,ge;s
40、hi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void timeinit() /显示时间初始化write_com(0x01);write_com(0x80);for(num=0;num<9;num+)write_date(tablenum);delay(5);write_com(0x80+0x40+6);write_date(':');delay(5);write_com(0x80+0x40+9);write_date(':')
41、;delay(5);write_sfm(4,shi);write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10);void setnowtime() /设置当前时间 if(k1=0)delay(5);if(k1=0)while(!k1);di();shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(k2=0)delay(5);if(k2=0)while(!k2);di(
42、);fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(k3=0)delay(5);if(k3=0)while(!k3);di();miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(k4=0)delay(5);if(k4=0)while(!k4);di();k1num=0;tr0=1;timeinit();void setalarmtime() /设置闹钟时间flag=0;if(k1=0)delay(5);if(k1=0)whil
43、e(!k1);di();ashi+;if(ashi=24)ashi=0;write_sfm(4,ashi);write_com(0x80+0x40+4);if(k2=0)delay(5);if(k2=0)while(!k2);di();afen+;if(afen=60)afen=0;write_sfm(7,afen);write_com(0x80+0x40+7);if(k3=0)delay(5);if(k3=0)while(!k3);di();amiao+;if(amiao=60)amiao=0;write_sfm(10,amiao);write_com(0x80+0x40+10);if(k4
44、=0)delay(5);if(k4=0)while(!k4);di();k4num=0;ea=1;flag=1;timeinit();void displayalarmtime() /显示闹钟函数write_com(0x01);write_com(0x80);for(num=0;num<11;num+)write_date(alarmnum);delay(5);write_com(0x80+0x40+6);write_date(':');delay(5);write_com(0x80+0x40+6);write_date(':');delay(5);wri
45、te_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7); write_sfm(10,amiao);write_com(0x80+0x40+10);void keyscan() /键盘扫描函数if(k1=0)delay(5);if(k1=0)tr0=0;while(!k1);di();k1num+;if(k1num!=0)write_com(0x80);for(num=0;num<13;num+)write_date(table1num);delay(5);setnowtime();elseif(k2=0)delay(5);if(k2=0)while(!k2);di();k2num+;if(k2num=1)ea=0;displayalarmtime();k2num=2;if(k2num=3)k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024专业餐饮原料采购协议范例
- 2024专门物业抵押贷款协议范本
- 城市公园景观栏杆2024安装工程协议
- 2024年店铺技术支持人员劳动协议
- 2024技术服务协议案例
- DB11∕T 1720-2020 城市雨水管渠流量监测基本要求
- 2024年批量沥青订货协议范例
- 2024年泳池施工项目协议模板
- 2024年度混凝土挡土墙施工协议
- 2024年设备购销协议条款
- 药敏质量控制课件
- 苯佐卡因软膏局部麻醉和镇痛
- 《受膏者扫罗与大卫》课件
- 秸秆吸管创业计划书
- 急诊科护士的沟通技巧与患者关怀
- 应对突发事件的应急响应与复盘总结
- 《重大危险源界定》课件
- 人工智能的道德与伦理问题
- 二手车市场项目招商引资方案
- 某部营房改造装修施工组织设计
- 新媒体视听节目制作 第三章 新媒体视听节目的“策划之道”
评论
0/150
提交评论