单片机课程设计实验报告lcd电子时钟
LCD时钟设计单片机原理课程设计报告
一、设计任务要求分析本设计要实现的功能是:实时显示当前的时钟,并且可以设定闹铃和调整时间,以蜂鸣器鸣响5秒的方式作为闹铃。
二、设计总体方案及其方案论证按照系统的设计功能所要求的,液晶显示电子时钟原理图如图所示。
单片机显示电路键盘电路复位电路晶振电路液晶显示电子时钟原理图本系统以AT89C51单片机为核心,该单片机可把数据进行处理,从而把数据传输到显示模块LCD1602液晶显示器,实现时间及日期的显示。
以LCD 液晶显示器为显示模块,把单片机传来的数据显示出来,并且显示多样化,还可以对时间和日期进行设置,主要靠按键来实现。
三、硬件设计及描述 1、整体结构图①开关部分开关实现校正时间,定闹钟左一开关实现校时左二左三开关实现加减右一开关实现闹钟定时通过控制键来控制所要调节的是时、分、还是秒。
在控制键按下后LCD中会在相应的位置出现光标,这时在通过加数键或减数键来控制时分秒的加或减。
在调闹钟键按下后LCD中也会在相应的位置出现光标,这时也通过加数键或减数键来设置闹钟。
②液晶显示屏③蜂鸣器当单片机的P1^5接口输出为高电平时,蜂鸣器响,当输出为低电平时,蜂鸣器停止。
④复位电路开关为复位键⑤晶振电路选取原则:电容选取22pF,晶振为12MHz。
2、LCD1602简介LCD1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用,正因为如此,所以他不能显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
单片机_电子时钟(LCD显示)课程设计报告
课程设计报告课程名称单片机题目电子时钟(LCD显示)学生指导教师年级 2018级专业计算机科学与技术二级学院信息工程学院信息工程学院2020年12 月23 日《单片机》课程设计任务书摘要本设计使用11.0592MHz晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用LCD1602的并行操作方式显示。
通过使用该单片机,实现将时间显示在LCD1602液晶上,并且按秒实时更新。
AT89C51单片机功耗小,电压可选用4~6V电压供电。
通过板子上的按键可随时调节时钟的时、分,按键设计4个有效按键,分别有开始设置键、设置小时键、设置分钟键、确认设置键盘,通过使用中断定时器进行计时,实现时间显示。
针对LCD液晶显示屏,设置了初始化函数,数据传送函数及指令传送函数,进而实现LCD液晶显示屏显示功能。
在每次的按键按下时,LCD液晶显示屏会随之改变,进而实现功能。
关键词:AT89C51 电子时钟数码管按键目录1 概述 (1)1.1方案设计 (1)1.2设计目的 (1)1.3设计内容 (1)2.硬件设计 (1)2.1 元器件 (1)2.2 硬件 (2)3 软件设计 (3)3.1 主设计流程 (3)3.2 初始化流程图 (3)3.3 时间显示主程序 (5)4 调试结果分析 (6)4.1运行结果 (6)4.2仿真分析 (7)5 总结 (8)参考文献 (9)附录 (10)1 概述1.1方案设计(1)单片机选型选用AT89C51单片机,指令简单,易学易懂,外围电路简单,硬件设计方便,IO 口操作简单,成本低,程序烧写简单,对于设计开发非常实用。
(2)显示方案LCD液晶显示器是一种功耗极低的显示器件,它不仅省电,还能显示文字、曲线、图形等大量的信息,易于彩色化,所以采用LCD显示器来显示时间。
(3)计时方案利用AT89C51内部定时/计数器进行中断定时,配合软件延时实现时分秒的计时。
该方案可以节省硬件成本。
(4)按键设计系统采用独立式按键,共设计了四个按键,分别是“当前时间”、“分钟+”、“小时+”,用来设置校时功能,这样可以使电路更简单。
单片机课程设计基于51单片机的红外控制电子时钟(lcd显示)设计
《单片机原理及应用课程设计》报告—基于红外控制电子时钟(LCD显示)设计巩固和加深对单片机原理和接口技术知识的理解;培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.课程设计要求以AT89C51单片机为核心的时钟,在1602显示器上显示当前的时间,显示格式为“时时:分分:秒秒”,并开始计时。
具体功能如下:用红外遥控器上5个按键设置当前时间,调闹钟,控制开关等。
功能键K1~K5功能如下。
●K1—暂停。
●K2—设置时间。
●K3—秒,分,时之间的切换。
●K4—调闹钟。
●K5—控制开关。
3.硬件设计3.1 设计思想原理框图接收头通过接收红外遥控器发送的数据传送给单片机,通过单片机控制显示屏和蜂鸣器的工作。
1)红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
红外线遥控器使用TC9012专用发射集成模块做的,用频率为38、占空比为1/3的PPM方式调制,当一个键按下超过36ms 振荡器使芯片激活如果这个键按下且延迟大约108ms,这108ms 发射代码由一个起始码9ms ,一个结果码4.5ms (结果码加起始码构成一个12.5ms的引导码), 低8位地址码9ms-8ms, 8位地址码9ms-8ms ,8位数据码9ms-8ms和这8位数据的反码 9ms-8ms 组成,我们提取的即是那8位的数据码。
其数据帧如下图:数字0和1的脉冲如下:当接受端当检测到有红外线发过来, 将接收端置低, 否则置高。
(2023)单片机电子时钟课程设计报告2(一)
(2023)单片机电子时钟课程设计报告2(一)(2023)单片机电子时钟课程设计报告2项目简介本项目是一款基于单片机的电子时钟,具有时间显示、闹钟、定时等功能。
主要硬件为STC89C52单片机和LCD12864液晶显示屏。
硬件设计•CPU:STC89C52单片机•显示屏:LCD12864液晶显示屏•晶振:11.0592MHZ•动态RAM:24C02 EEPROM•按键:4个,分别为模式切换、时间调整、闹钟调整、确定键•电源:220V AC/9V DC电源适配器软件设计主要功能模块•时间显示:采用DS1302时钟芯片定时,单片机通过SPI通讯读取当前时间,并在液晶屏上显示。
•闹钟:通过按键调整,设置闹钟时间,并在设定时间响铃。
•定时:通过按键调整,设置定时时间,在设定时间完成特定操作(如开关灯、控制电器等)。
软件工具•Keil uVision5:C语言编程软件•Proteus 8:电路仿真软件实现效果经过测试,本项目能够准确地显示时间,并能够响应用户的设定,完成指定的功能要求。
同时,通过调整代码和电路连接方式,还可以实现更多功能的扩展,如调整亮度、自定义显示内容等。
总结本项目完成了基于单片机的电子时钟设计,实现了时间显示、闹钟、定时等功能,并且实现效果稳定可靠。
在项目中,我们不仅掌握了单片机的基本原理和编程技能,还提高了对电路设计和仿真的操作能力,是一次非常有益的学习和实践。
改进方向在项目完善过程中,可以考虑以下方向进行改进:•加入天气显示功能,通过网络或传感器获取当地天气信息,与时间一起显示。
•优化UI界面,考虑加入图像、背光等元素,提升用户体验。
•采用更高性能的单片机,提升系统稳定性和响应速度。
总体评价本项目难度适中,能够较全面地考察学生在单片机原理、编程能力和电路设计等方面的知识掌握程度,是一次有益的实践。
同时,项目具有一定的功能性和实用性,能够满足用户的基本需求。
因此,本项目是一次成功的课程设计。
单片机电子时钟(LCD显示)综合实验报告
单片机综合实验报告题目:电子时钟(LCD)显示一、实验内容:以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:●使用字符型LCD显示器显示当前时间。
●显示格式为“时时:分分:秒秒”。
●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。
功能键K1~K4功能如下。
●K1—进入设置现在的时间。
●K2—设置小时。
●K3—设置分钟。
●K4—确认完成设置。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。
二、实验电路及功能说明1)单片机主控制模块以AT89C51单片机为核心进行一系列控制。
2)时钟显示模块用1602为LCD显示模块,把对应的引脚和最小系统上的引脚相连,连接后用初始化程序对其进行简单的功能测试。
测试成功后即可为实验所用,如图:3)时间调整电路用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。
功能键K1~K4功能如下。
K1—进入设置现在的时间。
K2—设置小时。
K3—设置分钟。
K4—确认完成设置。
如图:三、实验程序流程图:主程序:时钟主程序流程子程序:四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。
6MHZ为和现实时间显示相同。
实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。
当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50 运行后显示,K1为进入现在设置时间,当按下K1后显示,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处: 当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。
增加功能:进入时间设置并选择设置位置后K2键位数字增加功能,K3键为数字减小功能。
根据仿真结果能够确定编程正确,基本实现了所有功能,而且有所改进。
电子时钟设计实验报告
编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 Data I/O2 VDD 电源正极10 D3 Data I/O3 V L 液晶显示偏压信号11 D4 Data I/O4 R S 数据/命令选择端12 D5 Data I/O5 R/W 读/写选择端13 D6 Data I/O6 E 使能信号14 D7 Data I/O7 D0 Data I/O 15 BLA背光源正极8 D1 Data I/O 16 BLK 背光源负极单片机电子时钟设计报告一、设计任务本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。
电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。
二、系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用 LED 作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。
本系统设计采用字符型液品显示模块 LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。
1 LCD1602 简介字符型液晶显示模块 LCD1602 已经是单片机应用设计中最常用的信息显示器件。
LCD1602 可以显示两行,每行16 个字符,采用+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
2 LCD1602 功能介绍2.1 引脚功能LCD1602 采用标准 14 脚(无背光)或 16 脚(带背光)接口,各引脚功能见表 1。
表1 引脚功能2.2 LCD1602 读写指令LCD1602 读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令 38H:显示模式设置;②写指令 08H:显示关闭;③写指令 01H:显示清屏;④写指令 06H:显示光标移动设置;⑤写指令 0CH:显示开及光标设置。
LCD电子钟程序(广工单片机课程设计)
LCD电子钟程序(广工单片机课程设计)第一篇:LCD电子钟程序(广工单片机课程设计)#include#define uchar unsigned char#define uint unsigned int#define KEY_IO P3#define LCD_IO P0sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;sbit SPK = P1^2;sbit LED = P2^4;sbit KEY_0 = P3^7;sbit KEY_1 = P3^6;sbit KEY_2 = P3^5;sbit KEY_3 = P3^4;bit new_s, modify = 0;char t0, sec = 0, min = 0, hour = 0;char code LCD_line1[] = “I LOVE U”;char code LCD_line2[] = “Timer: 00:00:00 ”;char Timer_buf[] = “00:00:00”;char a,b,c,k = 0;//--------------------void delay(uint z){uintx, y;for(x = z;x > 0;x--)for(y = 100;y > 0;y--);}//--------------------void W_LCD_Com(uchar com)//写指令 { LCD_RS = 0;LCD_IO = com;// LCD_RS和R/W都为低电平时,写入指令LCD_EN = 1;delay(5);LCD_EN = 0;//用EN输入一个高脉冲 }//--------------------void W_LCD_Dat(uchar dat)//写数据{LCD_RS = 1;LCD_IO = dat;// LCD_RS为高、R/W为低时,写入数据LCD_EN = 1;delay(5);LCD_EN = 0;//用EN输入一个高脉冲 } //--------------------void W_LCD_STR(uchar *s)//写字符串{while(*s)W_LCD_Dat(*s++);}//--------------------void W_BUFF(void)//填写显示缓冲区{Timer_buf[7] = sec % 10 + 48;Timer_buf[6] = sec / 10 + 48;Timer_buf[4] = min % 10 + 48;Timer_buf[3] = min / 10 + 48;Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;W_LCD_STR(Timer_buf);}//--------------------uchar read_key(void){ucharx1, x2;KEY_IO = 255;x1 = KEY_IO;if(x1!= 255){delay(100);x2 = KEY_IO;if(x1!= x2)return 255;while(x2!= 255)x2 = KEY_IO;if else if(x1 == 0xbf)return 1;else if(x1 == 0xdf)return 2;else if(x1 == 0xef)return 3;else if(x1 == 0xf7)return 4;}return 255;} //--------------------void Init(){LCD_RW = 0;W_LCD_Com(0x38);delay(50);W_LCD_Com(0x0c);W_LCD_Com( 0x06);W_LCD_Com(0x01);W_LCD_Com(0x80);W_LCD_STR(LCD_li ne1);W_LCD_STR(LCD_line2);TMOD = 0x01;//T0定时方式1TH0 = 0x4c;TR0 = 1;//启动T0 PT0 = 1;//高优先级, 以保证定时精度ET0 = 1;EA = 1;}//--------------------void main(){uint i, j;uchar Key;Init();while(1){//if(new_s){ //如果出现了新的一秒, 修改时间new_s = 0;sec++;sec %= 60;if(!sec){min++;min %=60;if(!min){ hour++;hour %= 24;}}W_BUFF();//写显示W_LCD_Com(0xc0 + 7);(x1 == 0x7f)return 0;W_LCD_Com(0xC0);//if(!sec &&!min){ //整点报时for(i = 0;i < 200;i++){SPK = 0;for(j = 0;j < 100;j++);SPK = 1;for(j = 0;j < 100;j++);} }} //Key = read_key();//读出按键switch(Key){//分别处理四个按键case0: if(KEY_0){min++;min %= 60;W_BUFF();break;}case1: if(KEY_1){hour++;hour %= 24;W_BUFF();break;}case2: if(KEY_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(KEY_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------void timer0(void)interrupt 1//T0中断函数, 50ms执行一次{TH0 = 0x4c;t0++;t0 %= 20;//20, 一秒钟if(t0 == 0){new_s = 1;LED = ~LED;}if(modify)LED = 0;} K0分加一 K1时加一 K2秒表开始K3秒表结束,恢复正常时间!第二篇:单片机课程设计电子钟课程设计任务书(指导教师填写)课程设计名称电子技术课程设计学生姓名专业班级设计题目数字钟一、课程设计的任务和目的任务:设计一台能显示“时”、“分”、“秒”的数字钟,周期为24小时;具有校时、正点报时功能。
单片机电子时钟课程设计实验报告(1)
单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
基于单片机的电子时钟设计报告(LCD显示)
单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。
显示格式为“时时:分分:秒秒”。
用3个功能键操作来设置当前时间。
功能键K1~K4功能下。
K1—设置小时。
K2—设置分钟。
K3—设置秒。
程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。
2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。
3、参考电路硬件设计电路图如下图所示:硬件电路原理图单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。
显示格式为“时时:分分:秒秒”。
用3个功能键操作来设置当前时间。
功能键K1~K4功能下。
K1—设置小时。
K2—设置分钟。
K3—设置秒。
程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。
2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。
3、参考电路硬件设计电路图如下图所示:硬件电路原理图基于AT89C51单片机的电子时钟设计报告一、设计要求与目的1)设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间。
2)、使用字符型LCD显示器显示当前时间。
显示格式为“时时:分分:秒秒”。
3)、用3个功能键操作来设置当前时间。
4)、熟悉掌握proteus编成软件以及keil软件的使用二、本设计原理本设计以AT89C51单片机为核心,通过时钟程序的编写,并在LCD显示器上显示出来。
单片机LCD电子时钟课程设计报告
宁德师范学院单片机课程设计报告专业电气工程及其自动化学生姓名钱泳舟学号 B**********题目 LCD电子时钟指导教师袁秋凤2015年12月8日1 方案设计与论证1.1 主控制器模块方案1采用STC89C52芯片作为硬件核心。
STC89C52内部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。
方案2采用AT89S52芯片作为硬件核心。
AT89S52片内具有8K字节程序存储空间,256字节的数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。
两种单片机都完全能够满足设计需要,STC89C52相对ATS89C52价格便宜,且抗干扰能力强。
考虑到成本因素,因此选用STC89C52。
1.2 显示模块方案1用LED数码管进行显示。
数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。
方案 2采用LCD的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,LCD1602可显示32个字符,采用LCD的缺点是亮度不够。
比较以上两种方案:方案1硬件简单、功耗小;方案2硬件简单,显示内容多,功耗小,成本低等。
本系统设计要求达到功耗小、体积小、成本低,显示信息多等要求,权衡两种方案,选择方案2。
2 硬件电路设计2.1原理框图2.2 单片机最小系统电路主控制器最小系统仿真电路如下图1所示。
主要由STC89C52单片机、内部时钟电路和按键手动复位电路构成。
图1 最小系统仿真电路图2.2.1 复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用上电复位方式。
如图2所示:图2 复位电路图2.2.2 晶振电路晶振可以选用频率为12MHz的晶振,晶振两端接单片机XTA1、XTA2引脚。
如图3所示图3 晶振电路图2.3 LCD液晶屏显示电路显示电路采用LCD液晶显示器,采用动态扫描显示方式。
单片机电子钟实训报告
一、引言随着电子技术的不断发展,单片机在各个领域得到了广泛的应用。
电子钟作为单片机应用的一个重要实例,具有很高的实用价值。
本实训报告主要介绍了单片机电子钟的设计与实现过程,包括硬件电路设计、软件编程以及调试过程。
二、硬件电路设计1. 单片机选择本实训选用AT89C51单片机作为核心控制器,该单片机具有丰富的I/O端口、较强的计算能力和较大的存储空间,能够满足电子钟的设计需求。
2. 时钟芯片本实训采用DS1302时钟芯片作为时间源,该芯片具有年、月、日、周、时、分、秒的精确计时功能,并具备闰年补偿等功能。
3. 液晶显示屏本实训选用1602液晶显示屏用于显示时间、日期等信息。
1602液晶显示屏具有清晰显示多个字符和符号的特点,方便用户查看时间和其他信息。
4. 按键模块本实训设计按键模块用于用户输入和设置。
按键包括时间设置键、日期设置键、闹钟设置键等,方便用户进行各项操作。
5. 电源模块本实训采用DC5V电源模块,为整个电子钟提供稳定的电源供应。
三、软件编程1. 主程序主程序负责初始化单片机、时钟芯片、液晶显示屏等硬件设备,并进入主循环。
主循环中,程序会不断检测按键状态,根据按键输入调整时间、日期和闹钟设置。
2. 时钟控制程序时钟控制程序负责实现时钟的基本功能,包括计时、闰年补偿等。
程序通过定时器中断,每秒更新一次时间。
3. 显示程序显示程序负责将时间、日期等信息显示在液晶显示屏上。
程序使用1602液晶显示屏的指令集,动态显示时、分、秒和日期。
4. 按键扫描程序按键扫描程序负责检测按键状态,并根据按键输入调整时间、日期和闹钟设置。
程序采用轮询方式检测按键状态,以提高按键响应速度。
5. 闹钟程序闹钟程序负责实现闹钟功能,当时间达到设定的闹钟时间时,电子钟会发出蜂鸣声提示用户。
四、调试过程1. 硬件调试首先,对硬件电路进行调试,检查各元器件是否安装正确,连接是否牢固。
然后,使用万用表检测电源电压、单片机各引脚电压是否正常。
单片机电子时钟实验报告
单片机电子时钟实验报告一、实验目的:1.了解单片机的基本知识和工作原理;2.掌握单片机的时钟生成方法;3.实现一个基本的电子时钟。
二、实验器材:1.STC89C52单片机开发板;2.LCD1602液晶显示屏;3.外部晶体振荡器;4.面包板、杜邦线等。
三、实验原理:单片机是由一个集成电路芯片组成的微型计算机系统。
它具有高度集成和灵活应用的特点,被广泛应用于各种电子设备中。
STC89C52是一种常见的单片机,具有可编程的特点,可以通过编写程序实现各种功能。
为了实现电子时钟功能,我们需要了解单片机的时钟生成方法。
单片机一般内部包含一个振荡器电路,通过外部晶体振荡器提供的时钟信号来控制单片机的工作速度。
具体实现时钟功能需要通过编写程序生成一个固定频率的脉冲信号,并通过控制液晶显示屏显示当前的时间。
四、实验步骤:1.将STC89C52单片机开发板、液晶显示屏、外部晶体振荡器等连接起来,按照电路图进行布线。
2.编写程序,通过设置定时器,生成1毫秒的定时中断信号。
在中断程序中,获取当前的系统时间,并进行相应的显示。
4.观察液晶显示屏,检查是否显示当前的时间,如正常显示,则实验成功。
五、实验结果与分析:经过实验,我们成功实现了一个简单的电子时钟。
液晶显示屏能够正常显示当前的时间,而且精度较高。
实验过程中,我们对单片机的工作原理和编程方法有了更深入的了解。
六、实验心得与体会:通过这次实验,我掌握了单片机的基本知识和工作原理,并实际编写了一个电子时钟程序。
通过实际操作,我对单片机的应用有了更深入的理解,也提高了动手能力和解决问题的能力。
在今后的学习和工作中,我将继续深入学习单片机的原理和应用,不断提高自己的技术水平。
单片机课程设计报告电子时钟
单片机课程设计报告电子时钟单片机课程设计报告电子时钟随着科技的发展,电子产品已经成为人们日常生活不可或缺的一部分,电子时钟也是其中一个重要的产品。
电子时钟主要通过计算机技术来实现时间的显示和调节,而单片机是一种高速度、高可靠性的计算机芯片,通过单片机技术来设计和制作电子时钟,不仅可以提高产品的性能和稳定性,还可以实现更多的功能。
设计目的这个单片机课程设计的目的是通过使用单片机技术来设计一款电子时钟,具体实现以下功能:1. 显示时间:电子时钟能够准确地显示当前的时间,包括小时、分钟、秒钟,同时可以根据需要进行调整。
2. 显示日期:电子时钟也可以显示当前的日期,包括年、月、日。
3. 闹钟功能:电子时钟具有闹钟功能,可以设置闹铃时间,提醒用户特定时间。
4. 睡眠功能:电子时钟还具有睡眠功能,可以设置睡眠时间,使用户在睡眠中就可以关闭闹钟。
设计原理电子时钟的原理是通过单片机技术和电路设计实现。
主要包括三个部分:时钟模块、驱动模块和输入输出模块。
1. 时钟模块电子时钟的时钟模块是最核心的部分,它决定了电子时钟的准确度和稳定性。
一般使用DS1302作为时钟模块,DS1302是一块低功耗时钟芯片,能够提供祥细和稳定的计时功能。
2. 驱动模块驱动模块是电子时钟控制显示的关键部分,通过使用七段LED数字显示器,以及驱动芯片74HC595来控制LED显示器的亮度和显示。
74HC595是一种串行输入并行输出的芯片,可以通过控制引脚来输出对应的电路信号。
3. 输入输出模块输入输出模块是电子时钟中用户进行设置和操作的关键部分,它支持用户与电子时钟进行通信,包括根据用户的操作来控制时钟、日期、闹钟等功能。
例如,用户可以通过按键控制输入模块来实现时钟、日期、闹钟等的选项设置。
设计步骤设计电子时钟的步骤主要包括以下几个方面。
1. 确定电路需求:首先需要明确电子时钟具备哪些特性功能,例如显示日期、时间、使用闹钟等。
2. 电路设计:根据电子时钟设计需求,设计时钟模块、驱动模块和输入输出模块的电路,包括使用电路图工具进行和PCB设计。
单片机电子时钟课程设计报告(一)
单片机电子时钟课程设计报告(一)单片机电子时钟课程设计报告随着科技的不断发展,电子时钟软件的应用越来越广泛。
本文将介绍一个单片机电子时钟的设计过程与实现方法。
一、设计目标本次课程设计我们的目标是设计一款能够进行时间显示的电子时钟。
具体要求如下:1. 时钟实时显示当前时间,包括时、分、秒和星期;2. 描述时钟功能,实现时间的调校、时间格式的调亮和调暗等操作;3. 显示格式清晰美观,操作方便简单,能够长时间稳定地工作。
二、硬件设计1. 硬件搭建:本设计采用单片机AT89C51作为核心CPU。
同时使用16MHz的晶振电路来为微控制器提供准确的时基。
另外,为了实现更好的人机交互,本设计还需要使用LCD液晶显示屏和4个按键。
2. 硬件接口:液晶显示屏需要采用并行接口,并且需要对显示屏背光进行控制。
而4个按键需要分别连接到4个I/O口上,从而实现对电子时钟的各项控制功能。
三、软件设计1. 程序框架:本设计使用Keil编程软件进行程序编写,并采用C语言进行程序设计。
主要的程序框架分为4个部分:数据收集模块、处理模块、显示模块和按键扫描模块。
2. 数据收集模块:数据收集模块采用中断方式,以1秒为间隔进行一次数据收集。
同时还需要对实时时间进行调校和校验。
3. 处理模块:处理模块主要用于完成各种时间处理和格式设置功能,包括对时、分、秒等时间数据进行读取、存储和操控操作。
同时,还要完成处于闹钟和日历两种状态的时间判断和时间更新操作。
4. 显示模块:显示模块主要用于将处理过的时间数据显示在LCD液晶显示屏上,实现时间的实时显示功能。
5. 按键扫描模块:按键扫描模块主要用于检测按键的按下和松开状态,并且根据不同按键的功能实现对时钟的不同控制操作。
四、总结本次设计采用单片机AT89C51作为核心CPU,对硬件和软件进行优化设计,结构合理,功能完善。
最终实现了日期时间的实时显示、闹钟功能、日历功能等多种功能。
同时,本设计能够进行时间调亮和调暗,具有操作方便简单、显示清晰美观等特点。
单片机课程设计实验报告lcd电子时钟
单片机原理与应用课程名称:单片机原理与应用设计题目:LCD电子钟院系:电子信息工程学院班级:自动化0706设计者:全宏宇指导教师:一,设计目标LCD显示电子钟的基本功能1,实现时钟功能;2,实现闹铃功能;3,实现秒表功能;4,具有一定的计时精度。
LCD显示电子钟的基本要求1,掌握单片机开发编程设计的基本流程;2,了解Keil及Proteus软件的基本使用;3,了解LCD的基本使用;4,学习单片机硬件制作。
二,具体实现1,软件平台1)Keil编程Keil 的开发工具的使用的基本过程:○1创建C 或汇编语言的源程序;○2编译或汇编源文件;○3纠正源文件中的错误;○4从编译器和汇编器连接目标文件;○5测试连接的应用程序。
2)Proteus仿真Proteus软件不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
在编译方面,它也支持IAR,Keil,PLAB等多种编译器。
2,硬件开发平台JD51开发板的基本资料○1LED 电路,8 只独立LED 发光管,可做指示或各种闪烁效果用。
○2数码管电路,4只共阳一体8 段数码显示管,可实现各种数据显示,如计数、时钟等。
○3蜂鸣器电路,可用于设计各种提示音、演奏音乐等。
○4键盘电路,学习按键控制相关编程。
○5LCD 显示电路,编程控制LCD 显示。
○6串口电路,学习编程实现JD51 和PC 或其他符合该通信协议的电路之间的通信。
○7红外电路,通过选配的红外遥控器,学习红外解码并可实现红外遥控JD51。
○8温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD 上,通过温度数据处理便可实现温度控制器功能。
○9除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、复位电路、晶振电路等。
本次LCD电子钟实验用到其中的蜂鸣器,按键,LCD显示接口。
3,总体设计1)基本资源的使用本次实验采用了89C52型单片机,1602LCD液晶显示屏,蜂鸣器。
单片机课程设计报告--电子钟系统设计
《单片机原理与应用》课程设计总结报告设计题目:电子钟系统设计指导老师:__姓名:__班级:学号:_成绩:厦门理工学院电气工程与自动化学院2013年6月课程设计任务书对象:10电气工程及其自动化1、2设计题目1:电子钟系统设计一、设计内容及要求利用普中科技51单片机实验箱实现电子钟系统设计,其硬件原理框图如图1所示,其中显示采用液晶LCD1602,温度测量采用DS18B20,系统要求实现以下功能:1、基本功能:1)需要在LCD上显示以下参数信息:日期、时间;2)实现日期和时间可用键盘进行设置调整;3)日期能区分闰年与非闰年,月份与天数的关系;4)能够设置显示的模式:①只显示时间;②只显示日期;③显示日期、时间。
2、扩展功能:1)能显示室内的温度;2)具有闹钟功能,开启闹钟时LCD上应有标志;3)具有秒表功能,要求精确到0.1s;4)能够设置显示的模式:①只显示时间和温度;②只显示日期和温度;③全部显示所有参数。
图1 系统原理框图二、设计任务1、根据设计内容与要求,查找相关芯片与模块DS18B20、LCD1602数据手册,弄清个模块硬件接口原理。
2、根据设计内容与要求,弄清系统及各个模块的工作流程,完成系统的软件设计,包括系统主程序、显示子程序、键盘设置子程序、时间调整子程序等,可使用汇编语言或是C语言编写,建议使用C语言编写。
3、完成系统的仿真与调试,使得系统在脱机情况下,能稳定可靠的工作。
4、编写课程设计报告。
内容提要利用普中科技51单片机实验箱实现电子钟系统设计,其其中显示采用液晶LCD1602,实现以下功能:需要在LCD上显示以下参数信息:日期、时间;实现日期和时间可用键盘进行设置调整;日期能区分闰年与非闰年,月份与天数的关系;能够设置显示的模式:①只显示时间;②只显示日期;③显示日期、时间。
目录课程设计任务书 (1)内容提要 (2)正文 (4)一、课题的意义、本人所做的工作、系统的主要功能及工作流程 (4)二、硬件电路原理描述 (4)三、软件设计流程及描述 (5)四、系统测试 (6)五、结论 (6)心得体会 (6)附录 (6)正文一、课题的意义、本人所做的工作、系统的主要功能及工作流程课题的意义:培养学生的动手的能力及单片机知识的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理与应用课程名称:单片机原理与应用设计题目:LCD电子钟院系:电子信息工程学院班级:自动化0706设计者:全宏宇指导教师:一,设计目标LCD显示电子钟的基本功能1,实现时钟功能;2,实现闹铃功能;3,实现秒表功能;4,具有一定的计时精度。
LCD显示电子钟的基本要求1,掌握单片机开发编程设计的基本流程;2,了解Keil及Proteus软件的基本使用;3,了解LCD的基本使用;4,学习单片机硬件制作。
二,具体实现1,软件平台1)Keil编程Keil 的开发工具的使用的基本过程:○1创建 C 或汇编语言的源程序;○2编译或汇编源文件;○3纠正源文件中的错误;○4从编译器和汇编器连接目标文件;○5测试连接的应用程序。
2)Proteus仿真Proteus软件不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
在编译方面,它也支持IAR,Keil,PLAB等多种编译器。
2,硬件开发平台JD51开发板的基本资料○1 LED 电路,8 只独立LED 发光管,可做指示或各种闪烁效果用。
○2数码管电路,4只共阳一体8 段数码显示管,可实现各种数据显示,如计数、时钟等。
○3蜂鸣器电路,可用于设计各种提示音、演奏音乐等。
○4键盘电路,学习按键控制相关编程。
○5 LCD 显示电路,编程控制LCD 显示。
○6串口电路,学习编程实现JD51 和PC 或其他符合该通信协议的电路之间的通信。
○7红外电路,通过选配的红外遥控器,学习红外解码并可实现红外遥控JD51。
○8温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD 上,通过温度数据处理便可实现温度控制器功能。
○9除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、复位电路、晶振电路等。
本次LCD电子钟实验用到其中的蜂鸣器,按键,LCD显示接口。
3,总体设计1)基本资源的使用本次实验采用了89C52型单片机,1602LCD液晶显示屏,蜂鸣器。
为了实现时钟,定时,闹钟,秒表的功能,用到了单片机的外部中断,计时器中断,及I/O端口.2(1)程序设计的一些关键问题(具体参照后面的程序清单)○1建立Keil工程时,注意对程序编译环境进行设置;设置内容包括器件,频率,产生hex文件等。
○2LCD管脚及控制字;LCD管脚的定义控制字1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。
指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。
指令4:显示开关控制。
D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。
C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示5X7的点阵字符,高电平时显示5X10的显示字符。
指令7:字符发生器RAM地址设置。
指令8:DDRAM地址设置。
指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。
○3LCD实现滚动显示;方法一:采用LCD1602控制命令,显示后画面移动一个字符;方法二:循环使用显示不同位置,形成滚动效果。
○5秒表主要是产生计时基准0.01秒,有了基准之后需要解决的问题是如何实现有效的暂停,清零(达到精准动作),采用中断是很不错的结果。
○6闹铃主要是如何实现闹铃关闭的逻辑,if(f&&g)语句可以实现这一动作。
○7提高计时精度本程序除了调时模式外,其他模式的时候时钟都在跑动,提高了因模式转换而导致的时间精度降低。
(2)Proteus仿真在Proteus中画出如下电路图,添加hex文件,进行虚拟仿真。
2)开发板运行调试在JD51板上烧制程序,根据实际的效果,对中断的反应时间,显示效果做出了调整,整体效果不错,只是音乐的效果不佳,主要是由于如果将蜂鸣器换成扬声器效果会好些,还可以在程序中增加节拍来增加音乐效果。
4,硬件制作根据仿真电路图购买元件进行焊接,下载程序效果后,液晶显示器显示乱码,检查电路后已无连接错误,但功能依然没有实现,相关检查在进行中。
三,设计体会本次课程设计系统地学习了单片编程开发及实际电路的制作。
学习了Keil的C语言编程的基本知识,Proteus仿真软件的模拟仿真,JD51开发实验板的使用,本次课设,时间了较多的其他案例,比较全面的掌握了单片机的运营,包括编程,电路,LCD器件等,在知识上有了很多的长进。
本次课程设计还有很多其他收获,锻炼了自学的能力,特别是动手实践方面的东西,让我深深感受到理论与实际的差距,实际当中会有一些小的问题,这些问题是意想不到的,需要去思考,去解决,这是很锻炼人的。
四,程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define ulong unsigned long#define uint unsigned intuchar idata welcome[16]={" clock "}; //定义第一行显示数组uchar idata lwelcome[16]={" clock "}; //定义第一行显示数组uchar idata llwelcome[16]={" clock "}; //定义第一行显示数组uchar idata lllwelcome[16]={" clock "}; //定义第一行显示数组uchar idata sslcdtimer[16]={" 00:00:00 "};uchar idata tsslcdtimer[16]={" 00:00:00 "};uchar idata lcdtimer[16]={" 00:00:00 "}; //定义第二行显示数组uchar idata mlcdtimer[16]={" 00: : "}; //定义第二行显示数组uchar idata hlcdtimer[16]={" :00: "}; //定义第二行显示数组uchar idata setlcdtimer[16]={" 00:01:00 "};uchar timecount;uchar temps;bit timeflag;bit sstimeflag;sbit ring=P2^0;//蜂鸣闹铃sbit e=P2^7;//LCD显示器Esbit rw=P2^6;//LCD显示器RWsbit rs=P2^5;//LCD显示器RSsbit P10=P1^0; //测试用闪灯sbit Key=P3^2;//秒表暂停,清零sbit Key0=P3^3;//调时,设定闹钟时间,秒表选择sbit Key1=P3^4;//调时,设定闹钟时间改变uchar th1_f; //在中断中装载的T0的值高8位uchar tl1_f; //在中断中装载的T0的值低8位uint m=0;uint n=0;ulong i;uint f=0,g=1;uint j,k;uchar code freq[3][14]={{0xF2,0x42,0xF3,0xC1,0xF5,0x17,0xF5,0xB6,0xF6,0xD0,0xF7,0xD1,0xF8,0xB6},{0xF9,0x21,0xF9,0xE0,0xFA,0x8B,0xFA,0xD7,0xFB,0x68,0xFB,0xE8,0xFC,0x5B },{0xFC,0x8D,0xFC,0xEE,0xFD,0x44,0xFD,0x6D,0xFD,0xB4,0xFD,0xF4,0xFE,0x2D},}; //音乐频率表,低音,中音,高音,系统振荡频率11.0592MHzuint codesong1[]={26,25,23,25,31,26,25,26,23,25,26,25,23,22,21,16,25,23,22,22,23,23,23, 26,23,22,21,25,23,22,21,16,21,15,26,25,23,25,31,26,25,26,23,25,26,25,23,22,21, 16,25,23,22,22,23,23,23,26,23,22,21,25,23,22,21,16,21,15};//编制音乐//**************************************************//软件延时函数(系统晶振为11.0592MHz),延时时间约为40μs//入口条件:无符号整型变量del1,最终的延时时间为(del1*40)μs//**************************************************void delay(uint del1){uchar del2;for(;del1>0;del1--)for(del2=10;del2>0;del2--);}//**************************************************//液晶显示器判忙函数//**************************************************void busy(){uchar temp;temp=0x00;rs=0;rw=1;while((temp&0x80)==0x80){P0=0xff;e=1;temp=P0;e=0;}}//************************************************** //向液晶显示器写命令函数//************************************************** void WR_Com(uchar temp){busy();rs=0;rw=0;P0=temp;e=1;e=0;}//************************************************** //向液晶显示器写数据函数//************************************************** void WR_Data(uchar num){busy();rs=1;rw=0;P0=num;e=1;e=0;}//**************************************************//向液晶显示器写入显示数据函数//入口条件:液晶显示器行首地址(指示第一行还是第二行)和待显示数组的首地址//**************************************************//void disp_lcdchar(uchar addr,uchar temp1)//{// WR_Com(addr);// delay(100);// WR_Data(temp1);//}void disp_lcd(uchar addr,uchar *temp1){uchar i;WR_Com(addr);delay(100);for(i=0;i<16;i++){WR_Data(temp1[i]);delay(100);}}//************************************************** //液晶显示器初始化函数//************************************************** void lcd_ini(){char i;for(i=3;i>0;i--){P0=0x30;rs=0;rw=0;e=1;e=0;delay(100);}P0=0x38;rs=0;rw=0;e=1;e=0;delay(100);}//************************************************** //液晶显示器复位函数//************************************************** void lcd_Reset(){WR_Com(0x01);delay(100);WR_Com(0x06);delay(100);WR_Com(0x0c);delay(100);}//************************************************** //外部中断函数,秒表暂停,清零//************************************************** void modess() interrupt 0 using 0{delay(10000);n++;if(n==3)n=0;}//************************************************** //外部中断函数,模式选择//************************************************** void modepp() interrupt 2 using 1{delay(30000);m++;if(m==6)n=0;if(m==7)m=0;}//************************************************** //定时/计数器中断函数,1S及0.01S//************************************************** void timer0() interrupt 1 using 2{TH0=0xdc;TL0=0x23;sstimeflag=1;if(--timecount==0){timecount=100;timeflag=1;}}//**************************************************//定时/计数器中断函数,装入音乐频率计数初值//************************************************** void timer1() interrupt 3 using 3{TL1=tl1_f;TH0=th1_f; //调入预定时值ring=!ring; //取反音乐输出IO}//**************************************************//主函数//************************************************** void main(){P10=1;lcd_ini();lcd_Reset();/* for(i=0;i<10;i++){temps=welcome[i];disp_lcdchar(0x80+1,temps); //LCD 单字符从左到右显示 delay(10000);}*/disp_lcd(0x80,welcome);delay(10000);disp_lcd(0x80,lwelcome);delay(10000);disp_lcd(0x80,llwelcome);delay(10000);disp_lcd(0x80,lllwelcome);delay(10000);disp_lcd(0x80,llwelcome);delay(10000);disp_lcd(0x80,lwelcome);delay(10000);disp_lcd(0x80,welcome); //LCD滚动显示delay(10000);disp_lcd(0xc0,lcdtimer);P10=0;TMOD=0x11;TH0=0xdc;TL0=0x23;TR0=1;IE=0x86;timeflag=0; //1秒计时标志sstimeflag=0; //0.01秒计时标志timecount=100;while(1){while(m==6)//秒表{IE=0x87;if(n==0) //秒表跑动{if(sstimeflag==1){sstimeflag=0;sslcdtimer[11]+=1;if(sslcdtimer[11]>=0x3a){sslcdtimer[11]=0x30;sslcdtimer[10]+=1;if(sslcdtimer[10]>=0x3a){sslcdtimer[10]=0x30;sslcdtimer[8]+=1;if(sslcdtimer[8]>=0x3a){sslcdtimer[8]=0x30;sslcdtimer[7]+=1;if(sslcdtimer[7]>=0x36){sslcdtimer[7]=0x30;}}}}disp_lcd(0xc0,sslcdtimer);}if(n==1)//秒表暂停{disp_lcd(0xc0,sslcdtimer);}if(n>=2)//秒表清零{disp_lcd(0xc0,tsslcdtimer);for(i=0;i<16;i++)sslcdtimer[i]=tsslcdtimer[i];}}}while(m==0||m>=3) //时钟程序,只要不是调时,就一直运行 {IE=0x86;if(timeflag==1){timeflag=0;lcdtimer[11]+=1;if(lcdtimer[11]>=0x3a){lcdtimer[11]=0x30;lcdtimer[10]+=1;if(lcdtimer[10]>=0x36){lcdtimer[10]=0x30;lcdtimer[8]+=1;if(lcdtimer[8]>=0x3a){lcdtimer[8]=0x30;lcdtimer[7]+=1;if(lcdtimer[7]>=0x36){lcdtimer[7]=0x30;lcdtimer[5]+=1;if(lcdtimer[5]>=0x3a){lcdtimer[5]=0x30;lcdtimer[4]+=1;if(lcdtimer[4]>=0x33&&lcdtimer[5]>=0x35){lcdtimer[5]=0x30;lcdtimer[4]=0x30;}}}}}}}if(m==0){disp_lcd(0xc0,lcdtimer);if(!Key1)//关掉闹钟{g=0;}if(lcdtimer[8]==setlcdtimer[8]&&lcdtimer[7]==setlcdtimer[7]&&lcdtimer[5]==setl cdtimer[5]&&lcdtimer[4]==setlcdtimer[4])f=1; //开启闹钟,播放音乐if(f&&g){/*ring=1;delay(10000);ring=0;f=0; */IE=0x8e;j=song1[i]/10-1;k=2*(song1[i]%10-1);th1_f=freq[j][k]; //取出对应的定时值送给T0tl1_f=freq[j][++k];TR1=1;for(n=0;n<50000;n++); //音符间延时i++;TR1=0;f=0;}}}while(m==1) //调时分{if(!Key1){delay(10000);timeflag=0;lcdtimer[8]+=1;lcdtimer[8]=0x30;lcdtimer[7]+=1;if(lcdtimer[7]>=0x36){lcdtimer[7]=0x30;}}}disp_lcd(0xc0,lcdtimer);delay(8000);mlcdtimer[11]=lcdtimer[11];mlcdtimer[10]=lcdtimer[10];mlcdtimer[5]=lcdtimer[5];mlcdtimer[4]=lcdtimer[4];disp_lcd(0xc0,mlcdtimer);}while(m==2) //调时时{if(!Key1){delay(10000);lcdtimer[5]=0x30;lcdtimer[4]+=1;}if(lcdtimer[4]==0x32&&lcdtimer[5]>=0x34) {lcdtimer[5]=0x30;lcdtimer[4]=0x30;}}disp_lcd(0xc0,lcdtimer);delay(8000);hlcdtimer[11]=lcdtimer[11];hlcdtimer[10]=lcdtimer[10];hlcdtimer[8]=lcdtimer[8];hlcdtimer[7]=lcdtimer[7];disp_lcd(0xc0,hlcdtimer);}while(m==3)//显示闹铃时间{if(!Key1){}disp_lcd(0xc0,setlcdtimer);}while(m==4) //调闹铃分{if(!Key1){delay(10000);setlcdtimer[8]+=1;if(setlcdtimer[8]>=0x3a){setlcdtimer[8]=0x30;setlcdtimer[7]+=1;if(setlcdtimer[7]>=0x36){setlcdtimer[7]=0x30;}}}disp_lcd(0xc0,setlcdtimer);delay(8000);mlcdtimer[11]=setlcdtimer[11];mlcdtimer[10]=setlcdtimer[10];disp_lcd(0xc0,mlcdtimer);}while(m==5)//调闹铃时{if(!Key1){delay(10000);setlcdtimer[5]+=1;if(setlcdtimer[5]>=0x3a){setlcdtimer[5]=0x30;setlcdtimer[4]+=1;}if(setlcdtimer[4]==0x32&&setlcdtimer[5]>=0x34) {setlcdtimer[5]=0x30;setlcdtimer[4]=0x30;}}disp_lcd(0xc0,setlcdtimer);delay(8000);hlcdtimer[11]=setlcdtimer[11];hlcdtimer[7]=setlcdtimer[7];disp_lcd(0xc0,hlcdtimer);}}}。