单片机电子时钟显示

合集下载

基于单片机电子时钟设计

基于单片机电子时钟设计

基于单片机电子时钟设计电子时钟是一种利用单片机技术来实现精确时间显示的装置。

它可以准确地显示时间,并且可以根据需要进行闹铃功能等扩展。

接下来,我将详细介绍基于单片机的电子时钟设计。

首先,我们需要选择合适的单片机来实现电子时钟。

目前,常用的单片机有STC51系列、PIC系列、AVR系列等。

在选择单片机时,我们需要考虑其性能参数、价格以及开发环境等因素。

接下来,我们需要设计电子时钟的电路结构。

电子时钟的核心是单片机,通过连接显示屏、RTC(实时时钟)、按键以及扬声器等设备,来实现时间的显示、调整以及报警功能。

首先,我们需要选择合适的显示屏。

常用的显示屏有数码管、液晶显示屏、LED点阵等。

数码管和液晶显示屏可以直接连接到单片机的IO口,而LED点阵需要借助驱动芯片来完成控制。

其次,我们需要选择合适的RTC模块,以确保时钟的准确性。

RTC模块可以借助于DS1302等实时时钟芯片来实现。

同时,我们还需要连接按键,来实现对时钟进行调整的功能。

通过按键的组合操作,我们可以调整年、月、日、小时、分钟等时间参数。

此外,如果我们希望实现报警功能,我们还需要连接一个扬声器。

通过控制扬声器的开关,我们可以在设定的时间点播放报警铃声。

在硬件设计完成后,我们就可以进行软件开发工作了。

首先,我们需要编写主程序来初始化硬件设备,并进入主循环。

在主循环中,我们需要不断读取RTC模块的时间数据,并在显示屏上进行实时显示。

同时,我们也需要编写按键检测和处理的程序。

按键检测可以通过查询IO口的状态来实现,而按键处理则需要根据按键的值进行相应的功能调整。

如果需要实现报警功能,我们还需要编写报警处理的程序。

在设定的时间点,我们可以通过控制扬声器的开关来实现报警铃声的播放。

最后,我们需要进行整体的调试和测试工作。

通过不断地调整和优化程序,来确保整个电路和软件的正常运行。

总结起来,基于单片机的电子时钟设计包括硬件设计和软件开发两部分。

通过选择合适的单片机、显示屏、RTC模块、按键和扬声器等设备,并编写相应的程序,我们可以实现一个功能完善的电子时钟。

基于单片机的电子时钟设计

基于单片机的电子时钟设计

基于单片机的电子时钟设计电子时钟是一种显示时间的设备,通常基于单片机设计。

它不仅可以准确显示时间,还可以具备闹钟、日历等功能。

本文将介绍基于单片机的电子时钟的设计。

首先,我们来看单片机的选择。

在设计电子时钟时,常用的单片机有PIC、AVR和STM32等。

这些单片机都有较强的计算能力和丰富的外设接口,非常适合用于电子时钟的设计。

具体的选择可以根据需求和个人熟悉程度做出决定。

接下来,我们需要设计时钟的显示部分。

一般来说,电子时钟的显示可以采用液晶显示屏或LED数码管。

液晶显示屏具有占用空间小、显示效果清晰等优点,适合用于大号时钟;而数码管则适合用于小型时钟。

根据具体需求选择合适的显示器件。

在电子时钟设计中,如何准确获取时间是关键。

可以利用主频计数的方法,通过单片机的定时器来获取时间。

比如用32.768kHz的振荡源作为单片机的时钟源,然后每秒进行一次中断计数,通过累加中断计数值,即可得到秒数、分钟数、小时数等。

在此基础上,可以进一步添加日历计算功能,如年、月、日的计算。

闹钟功能是电子时钟的重要组成部分之一、我们可以通过按键输入设置闹钟的时间和开关状态。

当闹钟时间到达时,可以通过蜂鸣器或液晶显示器等方式提醒用户。

闹钟的开关状态可以通过EEPROM等非易失性存储器来保存,以实现断电重启后不丢失设置的功能。

除了基本的显示和计时功能,电子时钟还可以增加其他实用的功能。

比如温湿度显示功能,可以通过外部传感器获取环境的温度和湿度,并显示在屏幕上。

还可以添加定时开关机功能,通过按键设置时间和开关状态,控制电源的开关。

这些功能的实现都需要通过合理的硬件设计和软件编程来完成。

总的来说,基于单片机的电子时钟设计需要首先选择合适的单片机,并根据具体需求设计显示部分、时间获取部分、闹钟部分以及其他扩展功能。

其中涉及到硬件设计和软件编程的内容,需要有一定的电子和计算机基础知识。

通过合理的设计和编程,我们可以实现一个功能齐全、准确可靠的电子时钟。

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序 /*8位数码管显示时间格式 055000 标示05点50分00秒S1 用于小时加1操作S2 用于小时减1操作S3 用于分钟加1操作S4 用于分钟减1操作*/#includereg52.hsbit KEY1=P3^0; //定义端口参数sbit KEY2=P3^1;sbit KEY3=P3^2;sbit KEY4=P3^3;sbit LED=P1^2; //定义指示灯参数code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管09unsigned char StrTab[8]; //定义缓冲区unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00void delay(unsigned int cnt){while(cnt);}/********************************************************** ********//* 显示处理函数 *//********************************************************** ********/void Displaypro(void){StrTab[0]=tab[hour/10]; //显示小时StrTab[1]=tab[hour%10];StrTab[2]=0x40; //显示StrTab[3]=tab[minute/10]; //显示分钟StrTab[4]=tab[minute%10];StrTab[5]=0x40; //显示StrTab[6]=tab[second/10]; //显示秒StrTab[7]=tab[second%10];}main(){TMOD |=0x01; //定时器0 10ms inM crystal 用于计时TH0=0xd8; //初值TL0=0xf0;ET0=1;TR0=1;TMOD |=0x10; //定时器1用于动态扫描 TH1=0xF8; //初值TL1=0xf0;ET1=1;TR1=1;EA =1;Displaypro(); //调用显示处理函数while(1){if(!KEY1) //按键1去抖以及动作{delay(10000);if(!KEY1){hour++;if(hour==24)hour=0; //正常时间小时加1Displaypro();}if(!KEY2) //按键2去抖以及动作 {delay(10000);if(!KEY2){hour;if(hour==255)hour=23; //正常时间小时减1 Displaypro();}}if(!KEY3) //按键去抖以及动作{delay(10000);if(!KEY3){minute++;if(minute==60)minute=0; //分加1Displaypro();}if(!KEY4) //按键去抖以及动作{delay(10000);if(!KEY4){minute;if(minute==255)minute=59; //分减1Displaypro();}}}}/********************************************************** ********//* 定时器1中断 *//********************************************************** ********/void time1_isr(void) interrupt 3 using 0 //定时器1用来动态扫描static unsigned char num;TH1=0xF8; //重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描case 1:P2=1;P0=StrTab[num];break;case 2:P2=2;P0=StrTab[num];break;case 3:P2=3;P0=StrTab[num];break;case 4:P2=4;P0=StrTab[num];break;case 5:P2=5;P0=StrTab[num];break;case 6:P2=6;P0=StrTab[num];break;case 7:P2=7;P0=StrTab[num];break;default:break;}num++; //扫描8次,使用8个数码管if(num==8)num=0;}/******************************************************************//* 定时器0中断 *//********************************************************** ********/void tim(void) interrupt 1 using 1{static unsigned char count; //定义内部局部变量TH0=0xd8; //重新赋值TL0=0xf0;count++;switch (count){case 0:case 20:case 40:case 60:case 80:Displaypro();break; //隔一定时间调用显示处理case 50:P1=~P1;break; //半秒 LED 闪烁default:break;}if (count==100){count=0;second++; //秒加1 if(second==60){second=0;minute++; //分加1 if(minute==60){minute=0;hour++; //时加1 if(hour==24)hour=0;}}}}。

基于51单片机的简易电子钟设计

基于51单片机的简易电子钟设计

基于51单片机的简易电子钟设计一、设计目的现代社会对于时间的要求越来越精确,电子钟成为家庭和办公场所不可缺少的设备之一、本设计基于51单片机,旨在实现一个简易的电子钟,可以显示当前的时间,并且能够通过按键进行时间的调整和设置闹钟。

二、设计原理本设计主要涉及到51单片机的IO口、定时器、中断、LCD显示技术等方面知识。

1.时钟模块时钟模块采用定时器0的中断进行时间的累加和更新。

以1秒为一个时间单位,每当定时器0中断发生,就将时间加1,并判断是否需要更新小时、分钟和秒的显示。

同时,根据用户按键的操作,可以调整时间的设定。

2.显示模块显示模块采用16x2字符LCD显示屏,通过51单片机的IO口与LCD连接。

可以显示当前时间和设置的闹钟时间。

初次上电或者重置后,LCD显示时间为00:00:00,通过定时器中断和键盘操作,实现时间的更新和设定闹钟功能。

3.键盘模块键盘模块采用矩阵键盘连接到51单片机的IO口上,用于用户进行时间的调整和设置闹钟。

通过查询键盘的按键状态,根据按键的不同操作,实现时间的调整和闹钟设定功能。

4.中断模块中断模块采用定时器0的中断,用于1秒的定时更新时间。

同时可以添加外部中断用于响应用户按键操作。

三、主要功能和实现步骤1.系统初始化。

2.设置定时器,每1秒产生一次中断。

3.初始化LCD显示屏,显示初始时间00:00:00。

4.查询键盘状态,判断是否有按键按下。

5.如果按键被按下,根据不同按键的功能进行相应的操作:-功能键:设置、调整、确认。

-数字键:根据键入的数字进行时间的调整和闹钟设定。

6.根据定时器的中断,更新时间的显示。

7.判断当前时间是否与闹钟设定时间相同,如果相同,则触发闹钟,进行提示。

8.循环执行步骤4-7,实现连续的时间显示和按键操作。

四、系统总结和改进使用51单片机设计的简易电子钟可以显示当前时间,并且实现时间的调整和闹钟设定功能。

但是由于硬件资源有限,只能实现基本的功能,不能进行其他高级功能的扩展,例如闹铃的音乐播放、温度、湿度的显示等。

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。

二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。

2.软件设计通过C语言编写单片机程序,用于实现时钟功能。

3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。

(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。

(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。

(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。

三、实验结果经过调试,电子时钟的各项功能都能够正常实现。

在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。

在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。

四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。

通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。

在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。

毕业设计—基于单片机的12864时钟显示

毕业设计—基于单片机的12864时钟显示

学士学位毕业论文(设计)题目:基于单片机的12864时钟显示摘要电子时钟是一种非常广泛日常计时工具,给人们的带来了很大的方便,在社会上越来越流行。

它可以对年、月、日、星期、时、分、秒进行计时,采用直观的数字显示,可以同时显示年月日时分秒等信息,还有时间校准等功能。

该电子时钟主要采用STC89C52单片机作为主控核心,用DS1302时钟芯片作为时钟、液晶12864显示屏显示。

STC89C52单片机是由深圳宏晶科技公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的12864液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。

此外,该电子时钟还具有时间校准等功能。

关键词:STC89C51单片机,DS1302时钟芯片,液晶12864AbstractElectronic clock is a very extensive daily timing tool, to the people has brought great convenience, more and more popular in the community. It can be the year, month, date, day, hour, minute, second for a time, using intuitive digital display, can display information such as year, month, day, hour, and time alignment functions. The electronic clock is used mainly as a master STC89C52 microcontroller core, with theDS1302 clock chip as a clock, LCD display12864. STC89C52 SCM is a Shenzhen Hong Crystal Technology has introduced, power consumption, voltage can be selected 4 ~ 6V voltage power supply; DS1302 clock chip is American DALLAS company launched with a fine current charging low-power real-time clock chip, it can year, month, date, day, hour, minute, second for a time, also has a leap year compensation and other functions, DS1302 and long life, small error; 12864 LCD digital display isused to display that can display year, month, date, day, hour, minute, second and so on. In addition, the electronic clock also has a time calibration function.Key Words:STC89C51 microcontroller, DS1302 clock chip, LCD 12864目录1绪论 (3)1.1时钟发展史 (3)1.2 目前的研究现状 (4)1.3研究目的及意义 (4)2 总体方案设计 (5)2.1 方案的选择 (5)2.1.1设计要求 (5)2.1.2方案的选择 (5)2.2总体方案组成框图 (6)3系统硬件设计 (6)3. 1主芯片模块 (6)3.1.1 中断系统 (8)3.1.2常用寄存器 (8)3.2晶振和复位电路 (10)3.2.1晶振电路 (10)3.2.2复位电路 (11)3.3 DS1302时钟芯片电路 (11)3.3.1 DS1302引脚图 (11)3.3.2 DS1302寄存器 (12)3.3.3 DS1302外围电路 (13)3.4 LCD12864显示模块 (13)3.4.1 LCD12864引脚功能 (13)3.4.2 LCD12864指令说明 (14)3.4.3 LCD12864电路接线 (15)3.5 红外遥控模块 (16)4 系统软件设计 (17)4.1 主程序设计 (17)4.2 LCD12864驱动程序 (19)4.3 DS1302驱动程序 (21)4.4 红外遥控程序 (24)5 调试结果 (25)5.1 正常显示日期时间画面 (26)5.2 进入调整时间日期画面 (26)5.3图片显示画面 (26)6总结 (27)致谢 (28)参考文献 (29)附录一 (31)附录二 (32)1绪论1.1时钟发展史很早以前,人类主要是利用天文现象和流动物质的连续运动来计时。

基于单片机LED点阵显示电子时钟设计

基于单片机LED点阵显示电子时钟设计

.2015~2016学年第一学期《单片机原理及应用》课程设计报告题目:基于单片机LED点阵显示电子时钟设计班级:13级电子信息姓名:指导教师:.电气工程学院2015年11月《单片机原理及应用》任务书摘要LED显示屏作为信息传播的一种重要手段,已经成为城市信息现代化建设的标志,LED显示屏随着社会经济的不断进步,以及LED制造技术的完善,人们对LED显示屏的认识将会越来越深入,其应用领域将会越来越广;LED显示屏经多年的开发、研制、生产,其技术目前已经成熟。

现在各种广告牌不再是白底黑字了,也不再是单一的非电产品,而是用上了丰富多彩的LED电子产品,为城市增添了一道靓丽的风景。

本次课程设计是基于AT89C52单片机的LED点阵电子显示器的设计,采用的并行方式的显示方案来实现。

该电子时钟由AT89C51,74LS373数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时。

用keil软件生成.hex文件,用Proteus的ISIS软件实现了单片机LED 点阵电子时钟系统的设计与仿真。

关键词:单片机;LED点阵;电子显示器目录《单片机原理及应用》 (I)课程设计报告 (I)《单片机原理及应用》任务书....................................................................................................................... I I 摘要.. (IV)第1章方案选择与论证 (1)1.1 设计任务与要求 (1)1.2 总体设计方案 (1)1.2.1 硬件部分的设计 (1)1.2.2 软件部分设计 (3)第2章硬件电路的设计 (3)2.1 晶振电路设计 (3)2.2 复位电路设计 (4)2.3 时分调节电路设计 (4)2.4 驱动电路设计 (5)2.5 总原理图 (5)第3章系统软件设计 (7)3.1 软件流程图 (7)3.2 主要软件程序内容 (8)3.2.1 定时器工作程序 (8)3.2.2 数字显示程序 (9)第4章系统调试与仿真 (14)4.1开发过程 (14)4.2 电路仿真 (17)总结 (22)参考文献 (23)附录 (25)答辩记录及评分表 (36)第1章方案选择与论证1.1 设计任务与要求(1)采用LED灯进行显示(2)可以根据按键来对时间进行调整(3)初始时间为12:00.1.2 总体设计方案1.2.1硬件部分的设计这次硬件电路部分用PROTEUS软件,该软件主要用来进行元器件的绘制和原理图的绘制,PROTEUS软件对绘制好的原理图进行仿真和调试。

51单片机控制基于1602液晶显示 电子时钟【带闹铃和整点报时】

51单片机控制基于1602液晶显示 电子时钟【带闹铃和整点报时】
void buzz_pro(uchar be)//蜂鸣器发声函数
{
switch(be)
{//uint i;
/*用于整点响铃*/case 0:{
buzz=~buzz;
//delay1();
}break;
/*用于闹铃报时*/case 1:{
buzz=~buzz;
//delay(10);
}break;
}
}
void write_com(uchar com)//命令写入函数
{
rs=0;
delay(3);
P0=com;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void write_date(uchar date)//数据写入函数
{
rs=1;
delay(3);
P0=date;
delay(3);
write_date(0x30+ge);
}
void write_ymd(uchar add,uchar date)//年月日写入子程序
{
uchar sh,ge;
sh=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+sh);
write_date(0x30+ge);
sbit buzz=P1^5; //蜂鸣器控制端
uchar code week0[]="Sun";
uchar code week1[]="Mon";
uchar code week2[]="Tue";
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机综合实验报告
题目:电子时钟(LCD)显示
班 级:0310405班
学 号:
学生姓名:张 金 龙
指导老师:高林
2013年 6 月 17日
一、实验内容:
以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:
使用字符型LCD显示器显示当前时间。
显示格式为“时时:分分:秒秒”。
用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。
用1602为LCD显示模块,把对应的引脚和最小系统上的引脚相连,连接后用初始化程序对其进行简单的功能测试。测试成功后即可为实验所用,如图:
3)时间调整电路
用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。 功能键K1~K4功能如下。K1—进入设置现在的时间。K2—设置小时。K3—设置分钟。K4—确认完成设置。如图:
TR0 = 1;
P1 = 0xFF;
while(1)
{
Display_HMS(Hour,Minute,Second); //第二行显示时分秒
DelayMS(500);
Change_Time(); //显示过程中允许修改时间
}
}
return result;
} //写LCD命令
void LCD_Write_Command(uchar cmd)
{
while(LCD_Busy_Check());//判断LCD是否忙碌
RS = 0;RW = 0;E = 0;_nop_();_nop_();P0 = cmd; DelayNOP(); E = 1;DelayNOP();E = 0; } //设置LCD显示位置
{
if(Settime) HMS_String[3] = '>';//显示修改标志
else HMS_String[3] = ' '; //不显示修改标志
HMS_String[4] = h/10 + '0'; //时十位HMS_String[5] = h/10 + '0';
HMS_String[5] = h%10 + '0'; //时个位HMS_String[5] = h%10 + '0';
uchar code Str2[] =" Set New Time";
uchar HMS_String[]=" 00:00:00 ";//带显示的时间串
bit Settime=0; //是否修改时间
bit Change_H_or_M =1;//1表示修改时.0表示修改分
uchar MilliSecond,Hour =23,Minute=59, Second =50; //延时函数
} //LCD初始化
void LCD_Initialize()
{
LCD_Write_Command(0x38);DelayMS(1);
LCD_Write_Command(0x0c);DelayMS(1);
LCD_Write_Command(0x06);DelayMS(1);
LCD_Write_Command(0x01);DelayMS(1);
{
TR0 = 0;
Display_String(Str2,0x00); //第一行提示修改时间
Settime = 1;
}
while (Settime)
{
if(K1 == 0) //确定调整小时还是分钟
{
while(K1 == 0)
Change_H_or_M = !Change_H_or_M;
}
else if(K2 == 0) //增加
sbit K2 =P1^1;//增加
sbit K3 =P1^2;//减小
sbit K4 =P1^3;
sbit SPK=P3^0;
sbit RS =P2^0;
sbit RW =P2^1;
sbit E =P2^2;
uchar code Str1[] =" Current Time "; //一下两个字符串的串长均为16
这次在编程过程中学到了很多新东西,特别是LCD的显示,在设定的显示字符后,正确编译后显示各种设定值,LCD显示16位字符,在最初编程时编译正确但是LCD上的显示字符有缺失,显示不完整,经过不断调试发现空格同样占据字符,只有所有字符不超过16位且位置正确时才能完整正确显示。时间的显示需要每一个显示的位子有定义,而且要给“:”留下特定位子。同时编程时发现还可以显示其他如日期。但本实验不需要且很难完成最终没实现。
{if(--Hour == 0xff) Hour = 23;}
else
{if(--Minute == 0xff) Minute = 59;}
}
else if(K4 == 0) //确定
{
while(K4 == 0);
Display_String(Str1,0x00); //第一行还原显示str1
Settime = 0;
三、实验程序流程图:
主程序:
时钟主程序流程
子程序:
四、实验结果分析
实验结果及分析:单片机的晶振可以根据要求设定。6MHZ为和现实时间显示相同。实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50运行后显示 ,K1为进入现在设置时间,当按下K1后显示 ,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处:当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。增加功能:进入时间设置并选择设置位置后K2键位数字增加功能,K3键为数字减小功能。根据仿真结果能够确定编程正确,基本实现了所有功能,而且有所改进。
}
//显示函数,在LCD指定的行上显示字符串
void Display_String(uchar*str,uchar LineNo)
{
uchar k;
LCD_Set_Pos(LineNo);
for(k=0;k<16;k++) LCD_Write_Data(str[k]);
}
//时分秒显示
void Display_HMS(uchar h,m,s)
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit K1 =P1^0;//选择调整小时,分钟
{
while(K2 == 0);
if(Change_H_or_M==1)
{
if(++Hour == 24) Hour = 0;
}
else
{if(++Minute == 60) Minute = 0;}
}
else if(K3 == 0) //减少
{
whilM == 1)
HMS_String[7] = m/10 + '0'; //分HMS_String[8] = m/10 + '0';
HMS_String[8] = m%10 + '0'; //分HMS_String[8] = m%10 + '0';
HMS_String[10]= s/10 + '0'; //秒HMS_String[11]= s/10 + '0';
if(++MilliSecond == 20) //50*20=1s
{
MilliSecond = 0;
if(++Second == 60)
{
Second = 0;
if(++Minute == 60)
{
Minute = 0;
if(++Hour == 24)
{
Hour = 0;Minute = 0;Second = 0;
}
}
}
}
}
//主函数
void main()
{
TMOD = 0x01;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
IE = 0x82;
SPK = 0;
LCD_Initialize();
Display_String(Str1,0x00); //第一行显示
TR0 = 1;
}
Display_HMS(Hour,Minute,Second);
} //外层While在这里结束
}
//定时器0中断
void Time0() interrupt 1
{
TH0 = (65536 -50000)/256;
TL0 = (65536 -50000)%256; //重新装入50MS定时
void LCD_Set_Pos(uchar pos)
{
LCD_Write_Command(pos | 0x80);
}
//写LCD数据
void LCD_Write_Data(uchar dat)
{
while(LCD_Busy_Check());//判断LCD是否忙碌
相关文档
最新文档