智能电子钟LCD显示
电子钟工作原理
电子钟工作原理一、引言电子钟是现代生活中常见的时间显示设备。
它通过利用电子技术,以数字或者模拟方式显示时间,并且具备精准度高、功能强大等特点。
本文将介绍电子钟的工作原理以及相关的技术原理。
二、数字显示方式(1)LED数字显示电子钟常用的一种数字显示方式是采用LED(Light Emitting Diode,发光二极管)。
LED具有低能耗、长寿命、亮度高等特点,能够清晰地显示数字。
电子钟通过控制LED的亮灭状态以及显示位置,实现时间信息的显示。
通过内部的电子电路,模拟时钟信号被转换为数字信号,并通过LED显示出来。
(2)液晶数字显示另一种常见的数字显示方式是液晶显示。
液晶是一种能够调节光的透过度的物质,它通过改变电场的作用来控制光的透过程度,从而实现数字的显示。
电子钟使用液晶显示器,将时钟信号经过电路转换为数字信号,并通过液晶显示屏显示出来。
液晶显示器具有功耗低、反应速度快等特点。
三、时间信号接收电子钟为了能够准确地显示时间,需要接收到时间信号。
常见的时间信号来源有以下几种。
(1)自动接收电台信号一种常用的方式是通过内置的天线接收无线电台发出的时间信号。
电子钟内部的电路会识别并解码接收到的信号,从而获取到准确的时间信息进行显示。
(2)GPS信号接收另一种方式是使用全球定位系统(GPS)信号,通过接收卫星发射的时间信号来同步时间。
GPS信号具有高精度、稳定性好等特点,能够提供准确的时间信息。
四、电子震荡器电子钟内部的电子震荡器是电子钟能够精准计时的核心部件。
常见的电子震荡器有以下两种。
(1)晶体振荡器晶体振荡器是现代电子产品中常用的主要时钟源,电子钟也不例外。
它使用到的是晶体振荡的机械谐振原理,通过电子电路的控制,使晶体保持稳定的振动频率,从而提供准确的时钟信号。
(2)石英振荡器石英振荡器是晶体振荡器的一种,由石英晶体构成。
石英晶体具有稳定的振荡频率,其内部的电路和电容能够控制振荡频率,从而提供准确的时钟信号。
LCD显示电子时钟设计
LCD显示电子时钟设计LCD显示电子时钟是一种以液晶显示技术为基础的电子时钟设计。
液晶显示器(Liquid Crystal Display,简称LCD)是指通过操控液晶分子的取向和透光性来显示图像的显示器,具有薄、轻、便携、低功耗、对环境光适应性强等特点,因此被广泛应用于各种电子设备中。
设计一个LCD显示电子时钟的目的是为了制作一个精确显示时间的时钟装置,并且通过液晶显示器来实时显示时间。
具体的设计思路如下:1.显示屏设计:选择一款适用的液晶显示屏,通过与微控制器连接来实时显示时间。
可以选择有背光功能的液晶显示屏,以便在光线较暗的环境中也可以清晰显示。
2.微控制器选择:选择一款适用的微控制器,来控制液晶显示器的驱动和时间的计算。
常用的微控制器有PIC、AVR等,可以根据需求选择性能和功能适配的型号。
3.时钟电路设计:通过时钟电路提供准确的时间信号,并连接到微控制器中,用于计时和更新时间。
时钟电路可以通过晶振或者RTC(实时时钟芯片)实现。
4.按键输入设计:设计一组按键接口,用于调整和设置时间。
通过按键,可以实现时间的调整、闹钟设置、12/24小时制切换等功能。
5.动态电源设计:由于时钟是一个长时间运行的装置,因此需要设计一个适合的动态电源电路,以保证电源的稳定和可靠性。
可以选择使用电池供电,以应对停电等特殊情况。
6.温度补偿设计:由于液晶显示器的性能受环境温度的影响较大,可以采用温度传感器来感知环境温度,并通过微控制器对温度进行补偿,以提高LCD显示器的准确性。
7.其他功能设计:根据实际需求,可以增加其他功能模块,如闹钟、报时、温湿度检测、闪烁灯效果等。
总结起来,设计一个LCD显示电子时钟需要考虑液晶显示屏、微控制器、时钟电路、按键输入、动态电源、温度补偿等方面的因素。
通过合理的设计和电路连接,可以实现一个功能齐全、精确显示时间的电子时钟。
智能电子钟(LCD显示)
注:本程序并没有显示星期,如有需要,可自行添加。
/*******************************************************实验名称:智能电子钟(LCD显示)*实验效果:1602显示时钟,按K1进入时间设置,K2分别选择秒* 分时日月星期年,按K3时间加一/******************************************************/#include<reg52.h>#include"ds1302.h"#include"lcd1602.h"#define uint unsigned int#define uchar unsigned char/********************************************************声明:本实验所有IO口只与“1302时钟按键设置”仿真图配套**/******************************************************/sbit K1=P3^2; //接的是INT0 K1时钟设置(按一下开始调节时间,再按一下退出调节时间)sbit K2=P3^3; //接的是INT1 K2选择秒分时日月星期年sbit K3=P3^4; //接的是TO K3加时间void Cursor(); //设置时光标闪烁void Delay10ms();void Int0Configuration();//外部中断0设置void LcdDisplay(); //显示函数uchar SetState,SetPlace; //设置状态、光标位置void main() //主函数{uchar i;Int0Configuration(); //外部中断0设置lcd1602Init(); //1602初始化ds1302Init(); //1302初始化while(1){if(SetState==0) //如果没有键按下,就显示时间{ //SetState的高低由中断控制,按下K1则为1,再次按下则为0 ds1302readtime();}else{if(K2==0) //消除抖动{Delay10ms();if(K2==0) //如果K2被按下,则光标移动{SetPlace++;if(SetPlace>=7) //年月日星期时分秒共7个时间SetPlace=0;}while((i<50)&&(K2==0)) //松手检测{Delay10ms();i++;}i=0;}if(K3==0) //如果K3被按下,则时间每次加1{Delay10ms(); //消除抖动if(K3==0){TIME[SetPlace]++;if((TIME[SetPlace]&0x0f)>9) //换成BCD码{TIME[SetPlace]=TIME[SetPlace]+6;}if((TIME[SetPlace]>0x60)&&(SetPlace<2)) //分秒只能到59{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x24)&&(SetPlace==2)) //小时只能到23{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x32)&&(SetPlace==3)) //日只能到31{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x13)&&(SetPlace==4)) //月只能到12{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x7)&&(SetPlace==5)) //周只能到7{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x99)&&(SetPlace==6)) //年只能到2099{TIME[SetPlace]=0;}}while((i<50)&&(K3==0)) //松手检测{Delay10ms();i++;}i=0;}}LcdDisplay(); //Lcd1602显示时间}}void LcdDisplay() //显示函数{writecom(0x80+0x40);writedata('T');writedata('I');writedata('M');writedata('E');writedata(':');writedata('0'+TIME[2]/16); //时writedata('0'+(TIME[2]&0x0f));writedata(':');writedata('0'+TIME[1]/16); //分writedata('0'+(TIME[1]&0x0f));writedata(':');writedata('0'+TIME[0]/16); //秒writedata('0'+(TIME[0]&0x0f));writecom(0x80);writedata('D');writedata('A');writedata('T');writedata('E');writedata(':');writedata('2'); //年writedata('0');writedata('0'+TIME[6]/16);writedata('0'+(TIME[6]&0x0f));writedata('-');writedata('0'+TIME[4]/16); //月writedata('0'+(TIME[4]&0x0f));writedata('-');writedata('0'+TIME[3]/16); //日writedata('0'+(TIME[3]&0x0f));}void Delay10ms() //延时10ms{uchar a,b,c;for(c=1;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);}void Int0Configuration() //设置外部中断0{IT0=1;//跳变沿触发EX0=1;//打开外部0中断EA=1; //打开总中断}void Int0() interrupt 0 //如果按下K1就进入中断{Delay10ms();if(K1==0){// writecom(0x80+0x40+12);// writecom(0x0f);SetState=~SetState;SetPlace=0;ds1302Init();//调过时间后再按下K1,调好的时间就被写进DS1302 }}------------------------------------------------------分割线------------------------------------------------------#ifndef _LCD1602_H_#define _LCD1602_H_//---包含头文件---//#include<reg52.h>//---宏定义关键词---//#ifndef uint#define uint unsigned int#endif#ifndef uchar#define uchar unsigned char#endif//---定义1602的IO口---//sbit E=P2^2;sbit RW=P2^1;sbit RS=P2^0;//---声明全局函数---//void delay1ms(uint z);void writecom(uchar com);void writedata(uchar dat);void lcd1602Init();#endif#include"lcd1602.h"/*********函数功能:延时函数,延时1ms*********/void delay1ms(uint c){uchar a,b;for (; c>0; c--)for (b=199;b>0;b--)for(a=1;a>0;a--);}/*********函数功能:向1602写入一个字节的指令*********/ void writecom(uchar com){E=0; //使能端口RW=0; //低电平选择写入RS=0; //低电平选择写入指令P0=com; //放入指令delay1ms(1); //等待数据稳定E=1; //高电平期间写入delay1ms(5); //保持时间E=0; //变低}/*********函数功能:向1602写入一个字节的数据*********/void writedata(uchar dat){E=0;RW=0;RS=1; //高电平选择写入数据P0=dat;delay1ms(1);E=1;delay1ms(5);E=0;}/*********函数功能:初始化LCD1602*********/void lcd1602Init(){writecom(0x38); //开显示writecom(0x0c); //开显示,不显示光标writecom(0x06); //写一个字符指针加1writecom(0x01); //清屏writecom(0x80); //设置数据指针起点}-------------------------------------------分割线--------------------------------------------------- #ifndef _DS1302_H_#define _DS1302_H_//---包含头文件---//#include<reg52.h>#include<intrins.h>//---宏定义关键词---//#ifndef uint#define uint unsigned int#endif#ifndef uchar#define uchar unsigned char#endif//---定义1302的IO口---//sbit IO=P2^7;sbit CE=P2^5;sbit SCLK=P2^6;//---声明全局函数---//void ds1302write(uchar addr,uchar dat);uchar ds1302read(uchar addr);void ds1302Init();void ds1302readtime();//---加入全局变量---//extern uchar TIME[7];#endif#include"ds1302.h"uchar READ_ADDR[]={0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; //DS1302的读取地址,与下面的数组时间对应uchar WRITE_ADDR[]={0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //DS1302的写入地址,与下面的数组时间对应uchar TIME[7] = {0x00,0x00,0x12,0x01,0x01,0x02,0x14};//---TIME[7]数组存储分别是秒分时日月星期年---///*********函数功能:向ds1302写数据*********/void ds1302write(uchar addr,uchar dat){uchar n;CE=0;SCLK=0; //先将SCLK置低电平_nop_();CE=1; //然后将CE置高电平_nop_();for(n=0;n<8;n++)//开始传送8位地址命令{IO=addr&0x01;//从低位开始传送addr>>=1;SCLK=1; //上升沿读取数据_nop_();SCLK=0; //下降沿放置数据_nop_();}for(n=0;n<8;n++)//写入8位数据{IO=dat&0x01;dat>>=1;SCLK=1;_nop_();SCLK=0;_nop_();}CE=0; //数据传送结束_nop_();}/*********函数功能:从ds1302读数据*********/ uchar ds1302read(uchar addr){uchar n,dat,dat1;CE=0;SCLK=0; //先将SCLK置低电平_nop_();CE=1; //然后将CE置高电平_nop_();for(n=0;n<8;n++)//开始传送八位地址命令{IO=addr&0x01;addr>>=1;SCLK=1;_nop_();SCLK=0;_nop_();}for(n=0;n<8;n++)//读取8位数据{dat1=IO;dat=(dat>>1)|(dat1<<7);SCLK=1;_nop_();SCLK=0;_nop_();}CE=0;_nop_(); //以下为DS1302复位的稳定时间,必须的SCLK=1;_nop_();IO=0;_nop_();IO=1;_nop_();return dat;}/*********函数功能:初始化DS1302*********/void ds1302Init(){uchar n;ds1302write(0x8e,0x00); //关闭写保护for(n=0;n<7;n++){ds1302write(WRITE_ADDR[n],TIME[n]);}ds1302write(0x8e,0x80); //打开写保护}/*********函数功能:读取时钟信息*********/void ds1302readtime(){uchar n;for(n=0;n<7;n++){TIME[n]=ds1302read(READ_ADDR[n]);//将读取到的时间存入TIME[7]数组里}}以下为仿真图片,K4键没有设置功能。
单片机--电子时钟(LCD显示)
单片机--电子时钟(LCD显示)单片机综合实验报告题目:电子时钟(LCD)显示班级: 0310405班学号: 031040514学生姓名:张金龙指导老师:高林2013年 6 月 17 日一、实验内容:以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—确认完成设置。
如图:三、实验程序流程图:主程序:时钟主程序流程子程序:保护设置计1S (40H )0 (40H )+1(41H )+1 (46H )0 ()恢返N N中 断 服 务 流 程 图(41H )0 (43H )0 (43H )+1(44H )+1 (44H )0(46H )+1(47H )(46H )+1NN(46H )0 (47)+1NN四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。
6MHZ为和现实时间显示相同。
实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。
当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50 运行后显示,K1为进入现在设置时间,当按下K1后显示,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处: 当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。
单片机控制LCD显示电子时钟设计方案
单片机控制LCD显示电子时钟设计方案基于单片机控制LCD显示电子时钟设计摘要本设计使用11.0592MHZ晶振与单片机AT89C52相连接,以AT89C52芯片为核心,采用1602的并行操作方式显示。
通过使用该单片机,实现把时间和温度显示在1602液晶上,并且按秒实时更新。
STC89C52单片机是由深圳宏晶科技公司推出的,功耗小,电压可选用4~6V电压供电。
通过板子上的按键可随时调节时钟的年、月、日、星期、时、分、秒,按键设计3个有效按键,分别有功能选择键、数值增大键、数值减小键。
在每次的按键按下时,蜂鸣器有“滴”的提示声。
再利用DS12887设计实现断电自动保护显示数字的功能,当下次上电时会接着上次上电前的时间继续运行。
本设计的+5V电源采用LM1117电压转换元件,将电源适配器转换得到的12V电压直接变成5V电压供系统使用。
通过软硬件结合达到最终目的。
关键词:单片机AT89C52。
1602液晶。
电子时钟。
DS12887芯片1 / 32AbstractThe design uses a 11.0592MHz crystal with AT89C52 microcontroller is connected to the AT89C52 chip as the core, and 1602 parallel operation. Byusing the microcontroller, the time is displayed in 1602, and updated in real time in seconds. STC89C52 microcontroller is launched by the Shenzhen-Hong Crystal Technology, Inc., low power consumption, voltage can be used to 6V voltage power supply. Through the keys on the board can always adjust theclock of the year, month, day, week, when, minutes, seconds, button design 3 effective keys, function selection key, increase the value of the key, key decreases the value. Each time the button is pressed, the buzzer tone \the display number, then the last time before the power to continue running whenthe next power. The design of the 5V power supply using LM1117 voltage conversion device, power adapter converted directly into 12V voltage 5Vvoltage for system use. Through a combination of hardware and software to achieve the ultimate objective.Keywords:Microcontroller AT89C52。
LCD显示的指针式电子钟
信息工程学院课程设计报告书题目: LCD显示的指针式电子钟专业:电子信息的科学与技术班级: 0311410学号: 031141012学生姓名:何标指导教师:高林2014年 5 月 15 日信息工程学院课程设计任务书2014年5月20 日信息工程学院课程设计成绩评定表目录1 任务提出与方案论证 (6)1.1设计要求 (6)1.2原理说明 (6)2 总体设计 (7)3 详细设计 (8)3.1 AT89C51单片机简介 (8)3.2时钟模块设计 (9)3.3 显示模块设计 (10)3.4 设置模块 (10)3.5 振荡电路 (10)3.6 复位设置 (11)4 总结 (12)参考文献 (13)附录仿真电路图 (14)摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。
单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。
本设计就是应用单片机强大的控制功能制作而成的指针式电子钟,该指针式电子钟实现如下功能:液晶屏模拟表盘与时分秒指针显示当前时钟,K1键用于选择调节对象,K2键用于调整时分秒,在按下K4键时确定调节值,时钟继续运行。
本设计采用的是AT89C51单片机,AT89C51单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592的晶振就能实现零误差的计时,因此可以利用此功能实现计时。
芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。
显示器件采用PG12864LCD液晶,12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
制作一个采用LCD1602显示的电子钟
计算机科学与工程系实验报告实验题目:制作一个采用LCD1602显示的电子钟班级:姓名:学号:日期:一、实验目的掌握单片机使用定时器/计数器控制字符型液晶显示器LCD1602的设计与软件编程二、实验要求在LCD上显示当前的时间。
显示格式为“时时:分分:秒秒”。
设有4个功能键k1~k4,功能如下:(1)k1——进入时间修改。
(2)k2——修改小时,按一下k2,当前小时增1。
(3)k3——修改分钟,按一下k3,当前分钟增1。
(4)k4——确认修改完成,电子钟按修改后的时间运行显示。
三、实验要求提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结三、硬件电路原理图的设计四、编程思路及C51源程序编程思路:1、实现当按下K1之后,使中断T0停止计数2、实现当按下K2之后,使小时加一3、实现当按下K3之后,使分钟加一4、实现当按下K4之后,使中断T0恢复计数源程序:#include<reg51.h>#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#define uchar unsigned char#define uint unsigned intsbit lcdrs = P2^0;sbit lcdrw = P2^1;sbit lcden = P2^2;void delay(uint z)//延时函数,此处使用晶振为11.0592MHz {uint x,y;for(x=z;x>0;x--){for(y=110;y>0;y--){;}}}void write_com(uchar com) //写入指令数据到lcd{lcdrw=0;lcdrs=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) //写入字符显示数据到lcd{lcdrw=0;lcdrs=1;P3=date;delay(5);lcden=1;delay(5);lcden=0;}void init1602()//1602液晶初始化设定{lcdrw=0;lcden=0;write_com(0x3C);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}/*void write_string(uchar *pp,uint n)//采用指针的方法输入字符,n为字符数目{int i;for(i=0;i<n;i++)write_data(pp[i]);}*/void write_sfm(uchar add,uchar date)//向指定地址写入数据{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}#endif#define uchar unsigned char#define uint unsigned intsbit Key1 = P1^0;sbit Key2 = P1^1;sbit Key3 = P1^2;sbit Key4 = P1^3;uchar int_time;//定义中断次数计数变量uchar second;//秒计数变量uchar minute;//分钟计数变量uchar hour;//小时计数变量uchar code date[]=" H.I.T. CHINA ";//LCD第1行显示的内容uchar code time[]=" TIME 23:59:55 ";//LCD第2行显示的内容uchar second=55,minute=59,hour=23;void clock_init(){uchar i,j;for(i=0;i<16;i++){write_data(date[i]);}write_com(0x80+0x40);for(j=0;j<16;j++){write_data(time[j]);}}void clock_write( uint s, uint m, uint h){write_sfm(0x47,h);write_sfm(0x4a,m);write_sfm(0x4d,s);}void Keyscan1(){if(Key1==0) {delay(10);if(Key1==0) while(!Key1); TR0=0;}if(Key4==0) {delay(10);if(Key4==0) while(!Key4); TR0=1;}if(Key3==0){delay(10);if(Key3==0)while(!Key3);minute++;if(minute==60)minute=0;} if(Key2==0){delay(10);if(Key2==0)while(!Key2);hour++;if(hour==24)hour=0;}}void main(){init1602();//LCD初始化clock_init();//时钟初始化TMOD=0x01;//设置定时器T0为方式1定时EA=1; // 总中断开ET0=1; // 允许T0中断TH0=(65536-46483)/256;//给T0装初值TL0=(65536-46483)%256;TR0=1;int_time=0;//中断次数、秒、分、时单元清0second=55;minute=59;hour=23;while(1){clock_write(second ,minute, hour);Keyscan1();}}void T0_interserve(void) interrupt 1 using 1 //T0中断服务子程序{int_time++;//中断次数加1if(int_time==20) //若中断次数计满20次{int_time=0; //中断次数变量清0second++;//秒计数变量加1}if(second==60)//若计满60s{second=0; //秒计数变量清0minute ++;//分计数变量加1}if(minute==60)//若计满60分{minute=0;//分计数变量清0hour ++;//小时计数变量加1}if(hour==24){hour=0;//小时计数计满24,将小时计数变量清0 }TH0=(65536-46083)/256;//定时器T0重新赋值TL0=(65536-46083)%256;}五、仿真运行效果展示仿真初始状态按下k1键,进入修改模式六、实验小结通过本次实验,我掌握了LCD1602编程的方法,将所学知识运用到实践中,这是一件慢慢的过程,首先要把理论知识理解透彻,然后就是例题看懂,弄懂举一反三。
课程设计(论文)基于lcd液晶显示的多功能数字钟的设计(附pcb图及电路原理图)
目录1前言 (1)2总体方案设计 (2)2.1设计内容 (2)2.2设计内容 (2)2.3方案论证 (3)2.4方案选择 (4)3单元模块设计 (5)3.1各单元模块功能介绍及电路设计 (5)3.1.1 温度采集电路 (5)3.1.2 DS1302时钟电路 (5)3.1.3 串行通信接口电路 (6)3.1.4 USB连接电路 (6)3.1.5 按键电路 (7)3.1.6液晶显示显示电路 (7)3.2特殊器件介绍 (7)3.2.1 STC89C52单片机芯片 (7)3.2.2 DS1302介绍 (8)3.2.3 温度传感器DS18B20 (9)3.2.4 液晶显示LCD1602 (9)4软件设计 (10)4.1软件选择 (10)4.2软件设计流程 (10)4.2.1 温度采集流程 (11)4.2.2 日期数据处理流程 (12)5系统的仿真及调试 (13)5.1系统仿真 (13)5.2硬件调试 (13)5.3软件调试 (14)6结论 (16)7总结与体会 (17)7.1设计小结 (17)7.2设计收获及改进 (17)7.3致谢 (17)8参考文献 (18)附录: (19)1前言单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
单片机也被称为微控制器(Microcontroller),它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机诞生于20世纪70年代末,经历了SCM、MCU、SOC三大阶段。
STC单片机完全兼容51单片机,并有其独到之处,其抗干扰性强,加密性强,超低功耗,可以远程升级,内部有专用复位电路,价格也较便宜,由于这些特点使得 STC 系列单片机的应用日趋广泛。
LCD液晶显示电子钟设计
LCD液晶显示电子钟设计《单片机原理及应用》课程设计说明书题目液晶显示电子钟设计系(部)专业(班级) 姓学指起名号导止教日师期课程设计任务书系(部):专业:液晶显示电子钟设计设计一种基于 89S52 单片机的液晶显示电子时钟,要求如下:、能正确显示时间、日期和星期显示格式为:时间: XX 小时:XX 分:XX 秒;日期:XX 年:XX 月:XX 日;星期:X 、时间能够由按键调整,误差小于1S、闹钟功能:时间运行到与闹钟设定时间时,闹钟响设计、报时功能:时间运行到正点时间时,闹钟响,几点钟就响几要求声液晶显示器第一行显示“数字电子钟” ;第二行显示“当前时间” ;第三行显示日期和星期;第四行显示最近一个闹钟的设定时间 2、要求:完成该系统的硬件和软件的设计,在软件上仿真通过,并提交一篇课程设计说明书课题名称设计工作量1、汇编或 C51 语言程序设计;2、程序调试;3、在上进行仿真成功,进行实验板下载调试;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等起止日期第一天工作第二天计划第三天~第六天第六天~第八天第九天~第十天工作内容课题绍,答疑,收集材料,C51介绍设计方案论证,练习编写 C51 程序程序设计程序调试、仿真系统测试并编写设计说明书系教研室年月日主管领导年月日意见意见目录一、液晶的工作原理 4 二、方案设计 4 实物硬件设计 4 系统硬件设计 5 主芯片模块 5 晶振和复位模块 5 按钮模块 6 系统软件设计 6 主程序设计 6 三、仿真和分析 7 四、总结体会 7 参考文献 33一、液晶的工作原理液晶显示屏中的业态光电显示材料,利用液晶的电光效应把电信号转换成数字符、图像等可见信号如图1-1,液晶正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶变的不透明,颜色加深因而能显示数字和图像管脚一共1个CS1左半屏片选端,CS2右半屏片选端;V0液晶显示驱动电压,通过一个电位器接到;RS数据指令选择信号,H为数据,L为指令,也叫D/I;R/W读写选择信号,H为读,L为写,E为使能端,R/W为L时,E信号下降沿锁存 DB7-DB0;R/W为H 时,E为H,数据读到DB7-DB0DB0-DB7数据传输端口复位信号- 和V0为液晶显示驱动电压是一种图形点阵液晶显示器它主要由行驱动器/列驱动器及×64 全点阵液晶显示器组成可完成图形显示,也可以显示8×4个(16×16点阵)汉字图1-1 液晶显示屏二、方案设计实物硬件设计单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS时钟控制模块通过这六个模块的协调工作就可以完成相应的液晶屏控制和显示功能这六个模块的相互连接如图2-1:图2-1 硬件组成框图系统硬件设计本硬件电路主要由四大模块组成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块主芯片模块主芯片模块即单片机模块,1:接外部晶振和微调电容的一端在片内,它是振荡电路反相放大器的输入端2:接外部晶振和微调是容的一端:89C51的复位信号输入引脚,高电平有效当此输入端保持两个机器周期的高电平时,就可以完成复位操作:允许地址锁存信号端EA:该引脚为低电平时则读取外部的程序代码来执行程序P0、P1、P2、P3:8位并行输入输出口每个端口都是8位准双向口,共占32只引脚每一条都能独立地用作输入或输出每个端口都包括一个锁存器、一个输出驱器和输入缓冲器作输出时,数据可以锁存;作输入时,数据可以缓冲图如图3—1图3-1 单片机引脚图晶振和复位模块89C51芯片内部有一个高增益反相放大器,用于构成振荡器如图3—2,反相放大器的输入端为1,输出端2,两个跨接石英晶体及两个电容就可以构成稳定的自激振荡器1 是片内振荡器的反相放大器输入端,2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到1,而2 悬空一个晶体振荡器,接在单片机内部的振荡电路上,两个电容是起振电容,频率越高,应该越小图4-1 晶振模块在振荡器运行时,有两个机器周期以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位复位后P0-P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄存器全部清零当复位脚由高电平变为低电平时,芯片为的00H 处开始运行程序如上图5-1所示复位电路,由于复位时高电平有效,当刚接上电源的瞬间,电容C1两端相当于短路,即相当于给引脚一个高电平,等充电结束时,电容相当于断开,这时已经完成了复位动作图5-1 复位模块按钮模块本模块采用四个按钮进行控制,通过串行口输入输出连接,当K1按键波动一次后,方可进行年、月、日、星期、时、分的改变,当循环满时,按下K0可实现对闹钟的改变按键K2、K3分别实现加一减一的操作图6-1 按钮模块系统软件设计主程序设计图7-1 主程序流程图图8-1 显示程序和初始化子程序流程图三、仿真和分析将程序下载到单片机开发板上,显示如下图,第一行为汉字“数字电子钟”,第二行为时分秒,第三行为年月日以及星期,第四行为闹钟,通过按键可实现时间的调整,也可实现整点报时和闹钟符合设计要求图9-1 实物仿真图程序:#<>#<> #<># #rs=P1^0;//引脚定义 rw=P1^1; en=P1^2; =P1^3;=P3^4;//蜂鸣器引脚定义 k1=P3^5;//按键定义 k2=P3^6; k3=P3^7; k0=P0^0;tkkk;=13ri000; 1[]={00"字电子钟"};//显示字组 2[]={"00时00分00秒"}; 3[]={"XX年x月x日 1"}; 4[]={"闹钟00时00分00秒"};( )//延时函数{ }( xn)//“嘟”xn次函数 {nn;(nn=0;nn<xn;nn++) { }n;(n=;n>0;n--) { }(n=;n>0;n--) {=1; (3);=1; (1); =0; (2);ij; (i=;i>0;i--)(j=;j>0;j--);}}3s//3s报警函数 { }_( )//写指令函数 { }rs=0; rw=0; en=0; P2=; (5); en=1; (5); en=0; n;(n=;n>0;n--) { }=0; (2); =1; (1);_( )//数据指令函数 { }_( X Y)//显示位置函数 {; (X==0) { } (X==1) { } (X==2)X=0x90; X=0x80; rs=1; rw=0; en=0; P2=; (5); en=1; (5); en=0; }{ } (X==3) { } =X+Y; _();X=0x98; X=0x88;_( )//时钟数值函数 { }_1( 1 1)//年月日数值函数 {ge; =1/10; ge; =/10; ge=%10; _(10+); _(0x30+); _(0x30+ge); }ge=1%10; _(20+1); _(0x30+); _(0x30+ge);_2( 2 2)//闹钟数值函数 { }//按键扫描函数 {(k0==0)//闹钟按键操作 {(5); (k0==0) {(!k0); kk++; (kk==1)ge; =2/10; ge=2%10; _(30+2); _(0x30+); _(0x30+ge);}}{ }TR0=0;_(0x0f); _(32);(kk==2) { } (kk==3) { } (kk==4) { }kk=0; TR0=1;_(0x0c);_(36); _(34);(k1==0)//调试按键操作 {(5); (k1==0){ } (k==2) { } (k==3) { } (k==4) { } (k==5) { _(22); _(24); _(10); _(12); k++; (!k1); (k==1) { }TR0=0;_(0x0f); _(14);}} (k==6) { } (k==7) { } (k==8) { k=0;_(0x0c); TR0=1;_(27); _(20);}(k!=0) {(k2==0)//“+1”按键操作 { (5); (k2==0) {(!k2); (k==1)// // //{ ++; (==60)=0;_(4); _(14); _(4);} (k==2) { ++; (==60)=0; _(2); _(12); _(2);} (k==3) { ++; (==24)=0; _(0); _(10);_(0);////} (k==4) { ri++; (ri==32)ri=1;_1(4ri); _(24); _1(4ri);} (k==5) { ++; (==13)=1; _1(2); _(22); _1(2);} (k==6) { ++; (==50)=0;_1(0);}}}_(20); _1(0);//(k==7) { }++; (==8)=0;_1(7); _(27); _1(7);//(k3==0)//“-1按键操作” { (5); (k3==0) {(!k3); (k==1) {--; (==-1)=59;// // //_(4); _(14); _(4);}(k==2) { --; (==-1)=59;_(2); _(12); _(2);} (k==3) { --; (==-1)=23; _(0); _(10); _(0);} (k==4) {ri--;// // //(ri==-1)ri=31;_1(4ri); _(24); _1(4ri);}(k==5) { --; (==-1)_1(2); _(22); _1(2);} (k==6) { --; (==-1)=50; _1(0); _(20); _1(0); } (k==7)}}{ }--; (==-1)=7;_1(7); _(27); _1(7);//}(k==0) {(k2==0) {(5); (k2==0) {(!k2); (kk==3) {0++; (0==60)0=0;_2(60);}}_(36); _2(60);//(kk==2) { } (kk==1) { }0++; (0==24)0=0; 0++; (0==60)0=0;_2(40); _(34); _2(40);//_2(20); _(32); _2(20);//(k3==0) {////(5); (k3==0) { (!k3); (kk==3) { 0--; (0==-1) 0=59;_2(60); _(36); _2(60);} (kk==2) { 0--; (0==-1)0=59; _2(40); _(34); _2(40);} (kk==1) {0--;}}}(0==-1)0=23;_2(20); _(32); _2(20);// }}//初始化函数 {=1;_(0x30); (5); _(0x0c); (5); _(0x01); (5); TH0=(-)/; TL0=(-)%; =0x01; ET0=1; EA=1; }TR0=1;//主函数 {i; (10); ;_(02);//第一排显示 i=0;(1[i]!='\0') { }_(10);//第二排显示 i=0;(2[i]!='\0') { }_(20);//第三行显示 i=0;(3[i]!='\0')_(2[i]); i++;_(1[i]); i++;{ }_(30);//第四行显示 i=0;(4[i]!='\0') { }_(4[i]); i++;_(3[i]); i++;(1) {;(==0&&==0&&TR0==1)//整点报时判断 { }(==0&&==0&&==0&&TR0==1)//闹钟判断 { }(==0&&==0&&==0&&==0&&==0&&TR0==1)//整点报时、闹钟时冲突3s; ();操作}}{ }3s;(1);1//定时器函数 {TH0=/; TL0=%;t++; //50ms计数一次 (t==20) { t=0; ++; (==60) {=0; ++; (==60) {=0; ++; (==24){=0; ++; (==8) { } ri++;(==1||==3||==5||==7||==8||==10||==12) { } (==4||==6||==9||==11) {(ri==31) {(ri==32) { }ri=1; ++; (==13) { }=1; ++;=1;}}ri=1; ++; (==13) { }=1; ++;(==2) {((%4)==0) { }((%4)!=0)(ri==30) {ri=1; ++; (==13) { }=1; ++;}。
LCD12864液晶电子钟
长沙学院《单片机原理及应用》课程设计说明书题目 LCD12864液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期《单片机原理及应用》课程设计任务书系(部):专业:课题名称LCD12864液晶显示电子钟设计设计内容及要求1、课题内容:设计一种基于AT89S52 单片机的液晶显示电子时钟,要求如下:(1)、能正确显示时间、日期和星期显示格式为:时间:XX 小时:XX 分:XX 秒;日期:XX 年:XX 月:XX 日;星期:X。
(2)、时间能够由按键调整,误差小于1S。
(3)、闹钟功能:时间运行到与闹钟设定时间时,闹钟响(持续响3秒)。
(4)、报时功能:时间运行到正点时间时,闹钟响,几点钟就响几声(每声持续响2 秒,每两声之间时间间隔1 秒)。
液晶显示器第一行显示“数字电子钟”;第二行显示“当前时间”;第三行显示日期和星期;第四行显示最近一个闹钟的设定时间。
2、要求:完成该系统的硬件和软件的设计,在Proteus 软件上仿真通过,并提交一篇课程设计说明书。
设计工作量1、汇编或C51 语言程序设计;2、程序调试;3、在Proteus 上进行仿真成功,进行实验板下载调试;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。
进度安排起止日期设计内容(或预期目标)备注第一天课题介绍,答疑,收集材料,C51介绍第二天设计方案论证,练习编写C51程序第三天——第六天程序设计第六天——第八天程序调试、仿真第九天——第十天系统测试并编写设计说明书教研室意见年月日系(部)主管领导意见年月日目录一、整体方案设计 (4)1、单片机的选择 (4)2、单片机结构 (4)二、前期准备 (5)三、程序设计 (8)1、键盘约定 (8)2、界面显示 (9)3、全局变量的定义 (9)4、系统时钟 (9)5、闹钟控制时间的设定 (9)四、总结与体会 (10)参考文献 (11)一、整体方案设计1、单片机的选择单片微型计算机主要由微处理器、存储器、I/O接口电路等组成。
基于单片机的LCD1602电子时钟设计
基于单片机的LCD1602电子时钟设计近年来,随着物联网和智能设备的快速发展,电子时钟作为一种常见的智能设备,广泛应用于家庭、办公室等各种场合。
本文将基于单片机设计一款LCD1602电子时钟,实现时间显示、闹钟设置等功能。
一、硬件设计1.单片机选择在本设计中,选择常用的51系列单片机AT89C51,具有丰富的外设资源和强大的处理能力。
该单片机具有8位数据总线、16位地址总线,并且集成了定时/计数器、中断控制器和串行通信接口等外设。
2.显示模块选择3.时钟模块选择通过接入DS1302时钟模块,可以实现实时时钟的功能。
DS1302模块具有时钟计数器、电压检测电路、串行通信接口等,并且具有低功耗特点。
4.控制板设计根据LCD1602的引脚连接方式,设计一个控制板,用于将单片机、显示模块和时钟模块等连接在一起。
同时,需注意设计供电电路、外设输入输出电平等电路。
二、软件设计1.初始化设置通过单片机的GPIO口配置,将LCD1602和DS1302对应的引脚设置为输出模式,同时初始化LCD显示屏并进行清屏操作。
此外,需设置DS1302时钟模块的时钟、日期、闹钟等参数。
2.时间显示通过读取DS1302时钟模块的计数器,获得当前的小时、分钟和秒数,然后将其格式化为HH:MM:SS的形式,并通过LCD显示出来。
3.时间设置通过单片机的外部中断,当用户按下设置按钮后,进入时间设置模式。
在时间设置模式下,用户可以通过按下不同的按键来调整小时、分钟和秒数。
调整完成后,再次按下设置按钮即可保存设置。
4.闹钟设置通过单片机的定时器中断,设定一个闹钟定时器。
当闹钟定时器触发时,触发相应的中断,然后通过LCD显示闹钟提示。
此外,用户也可以通过按下按钮来设置闹钟时间,并通过单片机的外部中断进行处理。
5.闹钟响铃当闹钟时间到达时,触发相应的中断,通过LCD显示闹钟提示,并通过蜂鸣器发出响铃声。
总结通过本设计,可以实现一款功能齐全的LCD1602电子时钟。
LCD12864液晶显示电子钟设计
LCD12864液晶显示电子钟设计
介绍:
设计目标:
设计一个能够实时显示时间和日期的电子钟,能够精确地获取当前的时间,并对用户的操作作出相应的响应。
设计原理:
该电子钟设计采用了单片机ATmega16作为核心,配合RTC(实时时钟)模块,通过控制液晶显示屏来显示时间和日期。
硬件设计:
1.电源电路:使用直流电源电压为5V,通过稳压芯片将输入电压稳定在5V。
2.单片机电路:将ATmega16与晶振、复位电路、电源电路等连接起来。
3.RTC电路:通过连接RTC芯片和单片机,实现对实时时钟的读取和控制功能。
4.液晶显示屏电路:将液晶显示屏与单片机进行连接,通过单片机控制液晶显示屏的显示。
软件设计:
1.初始化:对单片机和RTC进行初始化设置。
2.获取时间:从RTC读取当前时间和日期。
3.显示时间:将获取到的时间和日期分别显示在液晶显示屏的相应位置。
4.操作功能:通过按键控制,实现对时间和日期的调整和设置功能。
设计步骤:
1.确定电路设计需求和所需元器件。
2.搭建硬件电路,完成电路连接。
3.使用相关软件进行单片机和RTC的编程设置。
4.测试整个电路是否能够正确工作,如对时间进行调整并观察液晶显示屏的显示是否准确。
5.根据需求进行适当的优化和完善设计。
总结:。
基于单片机的多功能LCD时钟
基于单片机的多功能LCD时钟
该时钟的设计思路是通过单片机控制液晶显示器,实时更新时间、日期、温度等信息;同时,结合外部输入信号,实现闹钟功能。
首先,该时钟通过单片机内部定时器实现时间的计时。
通过精确定时器,可以实现秒、分、时的显示和更新。
单片机内部具有RTC(Real-
Time Clock)模块,可实现对日期和时间的实时监控。
其次,该时钟通过温度传感器获取环境温度,并通过单片机控制液晶
屏实时显示。
温度传感器可以是热敏电阻、热敏电容等。
另外,该时钟具有闹钟功能,用户可以设置闹钟时间。
当时间到达设
定的闹钟时间时,时钟会发出报警声音,提醒用户。
此外,该时钟还可以显示日历。
通过单片机计算当前日期,并显示在
液晶屏上。
时钟基于单片机的控制,具有灵活性高、功能强大、可靠性较好等优点。
其通过外设接口与用户进行交互,使得用户操作简单、方便。
整个时钟的设计和制作过程分为硬件设计和软件设计两个部分。
其中,硬件设计包括电路原理图设计、PCB布局设计、外设选型等;软件设计则
包括单片机程序设计、液晶显示程序设计、闹钟功能实现等。
总结起来,基于单片机的多功能LCD时钟是一种功能强大的电子时钟,通过单片机控制液晶显示器实现时间、日期和温度的显示和更新,同时结
合闹钟功能,提供给用户全方位的时间与日期信息。
LCD数字时钟word精品文档6页
; LCD显示时钟,第一行显示设定日期" DATE XXXX-XX-XX " ,第二行显示设定时间" TIME XX-XX-XX " ,开始时两行并列逐字;显示日期和时间,然后定格,时钟继续运行。
祝亚森(0515074240),朱大三(0515074239)RS EQU P3.0 ;写入数据(1)或指令(0)选择端RW EQU P3.1 ;读(1)写(0)控制E EQU P3.2; ;使能LCD EQU P2 ;LCD数据口BF EQU P2.7 ;忙标志YEA1 EQU 30H ;日期储存地址YEA2 EQU 31HMON EQU 32HDAY EQU 33HHOU EQU 34H ;时间储存地址MIN EQU 35HSEC EQU 36HCOUNT EQU 3CB0H ;T0初值COUNT1 EQU 20 ;20*50us=1SSECCOUN EQU 10H ;存放20的地址LEDBUF EQU 40H ;显示数据首地址ORG 0000HLJMP MAINORG 000BH ;T0中断入口LJMP STIME ;调用定时器T0中断服务子程序MAIN: ;装入固定点显示字母或符号SETB PSW.5MOV LEDBUF, #12 ;DMOV LEDBUF+1, #13 ;AMOV LEDBUF+2, #14 ;TMOV LEDBUF+3, #15 ;EMOV LEDBUF+4, #16 ;空格MOV LEDBUF+9, #10 ;-MOV LEDBUF+12,#10 ;-MOV LEDBUF+15,#17 ;TMOV LEDBUF+16,#18 ;IMOV LEDBUF+17,#19 ;MMOV LEDBUF+18,#15 ;EMOV LEDBUF+19,#16 ;空格MOV LEDBUF+20,#16 ;空格MOV LEDBUF+23,#11 ;:MOV LEDBUF+26,#11 ;:MOV LEDBUF+29,#16 ;空格;---------LCD1602初始化-------------------MOV A, #00000001B ;发送清屏操作指令;CALL W_CMD ;调写入指令子程序MOV A, #00001111B ;发送显示开/关控制ACALL W_CMD ;指令,有光标,有闪烁MOV A, #00011100B ;发送光标移动指令ACALL W_CMD ;光标和字一起移动,光标自动右移MOV A, #00111100B ;发送功能设置指令CALL W_CMD ;8位DB,双行,5x7字符MOV DPTR, #TAB ;装入查表地址;---------LCD1602初始化结束---------------------;---------T0定时初始化--------------------------MOV YEA1,#20H ;设置日期初始值MOV YEA2,#08HMOV MON, #10HMOV DAY, #12HMOV HOU,#12H ;设置时间初始值MOV MIN,#59HMOV SEC,#50HMOV TMOD,#01H ;设置T0定时,模式1MOV TH0,#HIGH(COUNT) ;装入高4位初始值MOV TL0,#LOW(COUNT) ;装入低4位初始值SETB EA ;开中断SETB ET0 ;开T0中断允许位SETB TR0 ;开始定时MOV SECCOUN,#COUNT1 ;把数值20放到10H单元中;---------T0定时初始化结束------------------------MOVBUF1: ;日期"年"前两位处理MOV A,YEA1ANL A,#0F0H ;取高四位SW AP A ;高四位和低四位调换MOV LEDBUF+5,A ;把处理的数存放到相应地址中MOV A,YEA1ANL A,#0FH ;取低四位MOV LEDBUF+6,A ;把处理的数存放到相应地址中MOV A,YEA2 ;日期"年"后两位处理ANL A,#0F0HSW AP AMOV LEDBUF+7,AMOV A,YEA2ANL A,#0FHMOV LEDBUF+8,AMOV A,MON ;日期"月"处理ANL A,#0F0HSW AP AMOV LEDBUF+10,AMOV A,MONANL A,#0FHMOV LEDBUF+11,AMOV A,DAY ;日期"日"处理ANL A,#0F0HSW AP AMOV LEDBUF+13,AMOV A,DAYANL A,#0FHMOV LEDBUF+14,AMOV A,HOU ;时间"时"处理ANL A,#0F0HSW AP AMOV LEDBUF+21,AMOV A,HOUANL A,#0FHMOV LEDBUF+22,AMOV A,MIN ;时间"分"处理ANL A,#0F0HSW AP AMOV LEDBUF+24,AMOV A,MINANL A,#0FHMOV LEDBUF+25,AMOV A,SEC ;时间"秒"处理ANL A,#0F0HSW AP AMOV LEDBUF+27,AMOV A,SECANL A,#0FHMOV LEDBUF+28,AJMP2DIS:LCALL DISPLAYLCD ;调用显示子程序SJMP MOVBUF1;-------------定时器T0中断服务子程序----------STIME: MOV TH0,#HIGH(COUNT) ;重新装入高4位初始值MOV TL0,#LOW(COUNT) ;重新装入低4位初始值DJNZ SECCOUN,TIMEEND ;判断是否够1秒(20*50us=1S)MOV SECCOUN,#COUNT1 ;重新装入20PUSH ACC ;堆栈SECCHA: MOV A,SEC ;"秒"处理ADD A,#1 ;秒加1DA A ;十进制调整MOV SEC,ACJNE A,#60H,TIMEEND1 ;判断是否够60秒MOV SEC,#0 ;够60秒后,秒位清0MINCHA: MOV A,MIN ;"分"处理ADD A,#1DA AMOV MIN,ACJNE A,#60H,TIMEEND1MOV MIN,#0HOUCHA: MOV A,HOU ;"时"处理ADD A,#1DA AMOV HOU,ACJNE A,#24H,TIMEEND1MOV HOU,#0DAYCHA: MOV A,DAY ;"日"处理MOV A,#1DA AMOV DAY,ACJNE A,#24H,TIMEEND1MONCHA: MOV A,MON ;"月"处理MOV A,#1DA AMOV MON,ACJNE A,#12H,TIMEEND1YEA2CHA:MOV A,YEA2 ;"年"后两位处理MOV A,#1DA AMOV YEA2,ACJNE A,#99H,TIMEEND1YEA1CHA:MOV A,YEA1 ;"年"前两位处理MOV A,#1DA AMOV YEA1,ACJNE A,#99H,TIMEEND1TIMEEND1:POP ACC ;弹出堆栈TIMEEND:RETI;-------------定时器T0中断服务子程序结束-------------;------------------LCD1602显示子程序------------------DISPLAYLCD:MOV R0, #LEDBUF ;显示首地址MOV R1, #LEDBUF+15MOV R2, #0 ;显示第一个字MOV R3, #10000001B ;发送第一行DDRAM地址设置指令MOV R4, #11000001B ;发送第二行DDRAM地址设置指令LOOP1:MOV A,R3ACALL W_CMDMOV A, @R0MOVC A, @A+DPTR ;查表ACALL W_DA TA ;调用LCD显示字子程序INC R0 ;显示下一个字INC R3MOV A,R4ACALL W_CMDMOV A, @R1MOVC A, @A+DPTR ;查表ACALL W_DA TA ;调用LCD显示字子程序INC R1 ;显示下一个字INC R2 ;下一个数INC R4JNB PSW.5,TGCALL DELAYTG:CJNE R2, #15, LOOP1CLR PSW.5LOOP:MOV A, #00001100B ;发送显示开/关控制ACALL W_CMD ;指令,无光标,无闪烁LJMP EXIT ;跳出LCD1602显示子程序TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 2DH,3AH,44H,41H,54H,45H,20H,54H,49H,4DH W AIT:MOV LCD, #0FFH ;令P2作输入口使用CLR RSSETB RWCLR ENOPSETB EJB BF, WAIT ;判断LCD忙标志RETW_CMD: ;入口参数AACALL WAITMOV LCD, ACLR RSCLR RWSETB ENOPCLR ERETW_DA TA: ;入口参数AACALL WAITMOV LCD, ASETB RSCLR RWSETB ENOPCLR ERETEXIT:RET;------------------LCD1602显示子程序结束------------------ DELAY: MOV R6,#00H ;延时子程序MOV R7,#00HDELAY1: NOPDJNZ R7,DELAY1DJNZ R6,DELAY1RETEND图片看不清的可以放大,这个应该会的,不多说。
课程设计之LCD显示数字时钟设计
课程设计之LCD显示数字时钟设计一、课程目标知识目标:1. 学生能理解LCD显示数字时钟的基本原理,掌握电子元件的功能和使用方法。
2. 学生能描述数字时钟的组成,包括时钟芯片、LCD显示屏、电阻、电容等基本元件。
3. 学生能运用所学知识,分析并解释LCD显示数字时钟的电路图。
技能目标:1. 学生能通过实际操作,学会正确焊接电子元件,搭建LCD显示数字时钟电路。
2. 学生能运用编程软件,编写控制LCD显示数字时钟的程序。
3. 学生能通过调试,解决LCD显示数字时钟中的常见问题,确保其正常运行。
情感态度价值观目标:1. 学生在课程学习中,培养对电子制作的兴趣和热情,提高创新精神和动手能力。
2. 学生通过团队协作,培养沟通、交流和合作的能力,增强团队意识。
3. 学生在掌握电子技术知识的过程中,认识到科技对生活的影响,提高社会责任感和使命感。
课程性质:本课程为实践性较强的电子技术课程,结合理论知识与实践操作,培养学生动手能力和创新能力。
学生特点:学生处于高年级阶段,具备一定的电子技术基础,对实践操作有较高的兴趣和热情。
教学要求:教师需关注学生的个体差异,提供个性化的指导,鼓励学生积极参与实践,注重培养学生的实际操作能力和问题解决能力。
同时,关注学生的情感态度价值观的培养,提高学生的综合素质。
通过课程目标的分解,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 电子元件基础知识:介绍LCD显示屏、时钟芯片、电阻、电容等基本元件的工作原理和功能。
- 教材章节:第二章 电子元件基础- 内容列举:LCD显示屏原理、时钟芯片特性、电阻和电容的分类及应用。
2. 数字时钟原理与设计:分析数字时钟的组成、工作原理,讲解设计方法。
- 教材章节:第三章 数字电路设计- 内容列举:时钟芯片的接口电路、LCD显示接口电路、数字时钟整体设计。
3. 焊接技术:教授焊接工具的使用方法,指导学生进行电子元件的焊接。
智能电子钟LCD显示
智能电子钟LCD显示,有图,求程序智能电子钟LCD显示,有图,求汇编程序,各位大虾帮帮忙!1.设计要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1)计时:秒、分、时、天、周、月、年。
(2)闰年自动判别。
(3)五路定时输出,可任意关断(最大可到16路)。
(4)时间、月、日交替显示。
(5)自定任意时刻自动开/关屏。
(6)计时精度:误差≤1秒/月(具有微调设置)。
(7)键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完成。
以前的程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intucharsbit lcd_rs=P2^5;sbit lcd_rw=P2^6;sbit lcd_en=P2^7; //液晶位定义sbit Sclk=P1^6;sbit Io=P3^5;sbit Rst=P1^7; //DS1302位定义void init();uchar ds_read(uchar com);void ds_write(uchar com,uchar value);void lcd_write_com(uchar com);void lcd_write_date(uchar h,uchar w,uchar date);void delay(uchar z);void main(){init();while(1){lcd_write_date(0,0,'2');lcd_write_date(0,1,'0');lcd_write_date(0,2,table[ds_read(0x8d)/10]);lcd_write_date(0,3,table[ds_read(0x8d)%10]);lcd_write_date(0,4,'-');lcd_write_date(0,5,table[ds_read(0x89)/10]);lcd_write_date(0,6,table[ds_read(0x89)%10]);lcd_write_date(0,7,'-');lcd_write_date(0,8,table[ds_read(0x87)/10]);lcd_write_date(0,9,table[ds_read(0x87)%10]);lcd_write_date(0,11,'D');lcd_write_date(0,12,'a');lcd_write_date(0,13,'y');lcd_write_date(0,14,':');lcd_write_date(0,15,table[ds_read(0x8b)]);//lcd_write_date(1,0,'c');//lcd_write_date(1,1,'u');//lcd_write_date(1,2,'i');lcd_write_date(1,0,'X');lcd_write_date(1,1,'i');lcd_write_date(1,2,'a');lcd_write_date(1,3,'o');lcd_write_date(1,4,'D');lcd_write_date(1,5,'o');lcd_write_date(1,6,'n');lcd_write_date(1,7,'g');lcd_write_date(1,8,table[ds_read(0x85)/10]);lcd_write_date(1,9,table[ds_read(0x85)%10]);lcd_write_date(1,10,'-');lcd_write_date(1,11,table[ds_read(0x83)/10]);lcd_write_date(1,12,table[ds_read(0x83)%10]);lcd_write_date(1,13,'-');lcd_write_date(1,14,table[ds_read(0x81)/10]);lcd_write_date(1,15,table[ds_read(0x81)%10]);}}//*****************液晶写命令操作********************void lcd_write_com(uchar com){lcd_rs=0;lcd_rw=0;lcd_en=0;P0=com;delay(5);lcd_en=1;delay(5);lcd_en=0;}//*******************液晶写数据操作******************void lcd_write_date(uchar h,uchar w,uchar date){lcd_write_com(0x80+0x40*h+w);lcd_rs=1;lcd_rw=0;lcd_en=0;P0=date;delay(5);lcd_en=1;delay(5);lcd_en=0;}//********************初始化*********************void init(){lcd_write_com(0x38);//液晶初始化lcd_write_com(0x0c);lcd_write_com(0x06);lcd_write_com(0x01);ds_write(0x8e,0x00);//打开写保护ds_write(0x84,0x00);//选择24时计时ds_write(0x8c,0x10);//写入10年ds_write(0x88,0x10);//写入10月ds_write(0x86,0x28);//写入27日ds_write(0x8a,0x04);//写入星期3ds_write(0x84,0x15);//写入15时ds_write(0x82,0x15);//写入15分ds_write(0x80,0x00);//写入0秒ds_write(0x8e,0x80);//关闭写保护}//*********************延时操作************************void delay(uchar z){uchar a,b;for(a=z;a>0;a--)for(b=110;b>0;b--);}//******************DS1302读操作**********************uchar ds_read(uchar com){uchar i=0,value=0;Rst=0;Sclk=0;Rst=1;for(i=0;i<8;i++){Io=com&0x01;Sclk=0;Sclk=1;com>>=1;}for(i=0;i<8;i++){Sclk=1;Sclk=0;if(Io){value|=0x01<<i;}}Rst=0;value=(value/16*10)+value%16;return value;}//*******************DS1302写操作*************************void ds_write(uchar com,uchar value){uchar i;Rst=0;Sclk=0;Rst=1;for(i=0;i<8;i++){Io=com&0x01;Sclk=0;Sclk=1;com>>=1;}for(i=0;i<8;i++){Io=value&0x01;Sclk=0;Sclk=1;value>>=1;}}自己修改吧!。
电子钟工作原理
电子钟工作原理
电子钟是一种能够精确显示时间的设备,它的工作原理基于电子技术。
下面将详细介绍电子钟的工作原理。
1. 时钟信号源:电子钟通常使用晶体振荡器作为时钟信号源。
晶体振荡器是一种能够稳定振荡的电子器件,它的振荡频率非常稳定,可以提供准确的时间基准信号。
2. 时钟控制电路:电子钟中的时钟控制电路会接收晶体振荡器的信号,并将其转换为适合于显示的信号。
该电路还会根据用户设置的时间进行计时和调整。
3. 显示器:电子钟通常使用数字显示器,如液晶显示器(LCD)或LED数码管。
时钟控制电路会将计算得出的时间信号转换
成相应的数字形式,并通过显示器显示出来。
4. 电源供电:为了使电子钟正常工作,需要提供稳定的电源供电。
电源供电可以是直流电,也可以是交流电。
电子钟通常还会配备备用电池,以防止停电时钟停止工作。
除了基本的工作原理外,电子钟还可能具备其他功能,如闹钟功能、温度显示、日历功能等。
这些功能可以通过添加相应的电路和模块来实现。
总结起来,电子钟的工作原理包括时钟信号源、时钟控制电路、显示器和电源供电。
通过这些组成部分的协同工作,电子钟能够准确地显示时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能电子钟LCD显示,有图,求程序
智能电子钟LCD显示,有图,求汇编程序,各位大虾帮帮忙!
1.?设计要求
以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:
(1)?计时:秒、分、时、天、周、月、年。
(2)?闰年自动判别。
(3)?五路定时输出,可任意关断(最大可到16路)。
(4)?时间、月、日交替显示。
(5)?自定任意时刻自动开/关屏。
(6)?计时精度:误差≤1秒/月(具有微调设置)。
(7)?键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完成。
以前的程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar
sbit lcd_rs=P2^5;
sbit lcd_rw=P2^6;
sbit lcd_en=P2^7; //液晶位定义
sbit Sclk=P1^6;
sbit Io=P3^5;
sbit Rst=P1^7; //DS1302位定义
void init();
uchar ds_read(uchar com);
void ds_write(uchar com,uchar value);
void lcd_write_com(uchar com);
void lcd_write_date(uchar h,uchar w,uchar date);
void delay(uchar z);
void main()
{
init();
while(1)
{
lcd_write_date(0,0,'2');
lcd_write_date(0,1,'0');
lcd_write_date(0,2,table[ds_read(0x8d)/10]);
lcd_write_date(0,3,table[ds_read(0x8d)_x0010_]);
lcd_write_date(0,4,'-');
lcd_write_date(0,5,table[ds_read(0x89)/10]);
lcd_write_date(0,6,table[ds_read(0x89)_x0010_]);
lcd_write_date(0,7,'-');
lcd_write_date(0,8,table[ds_read(0x87)/10]);
lcd_write_date(0,9,table[ds_read(0x87)_x0010_]);
lcd_write_date(0,11,'D');
lcd_write_date(0,12,'a');
lcd_write_date(0,13,'y');
lcd_write_date(0,14,':');
lcd_write_date(0,15,table[ds_read(0x8b)]);
//lcd_write_date(1,0,'c');
//lcd_write_date(1,1,'u');
//lcd_write_date(1,2,'i');
lcd_write_date(1,0,'X');
lcd_write_date(1,1,'i');
lcd_write_date(1,2,'a');
lcd_write_date(1,3,'o');
lcd_write_date(1,4,'D');
lcd_write_date(1,5,'o');
lcd_write_date(1,6,'n');
lcd_write_date(1,7,'g');
lcd_write_date(1,8,table[ds_read(0x85)/10]);
lcd_write_date(1,9,table[ds_read(0x85)_x0010_]);
lcd_write_date(1,10,'-');
lcd_write_date(1,11,table[ds_read(0x83)/10]);
lcd_write_date(1,12,table[ds_read(0x83)_x0010_]);
lcd_write_date(1,13,'-');
lcd_write_date(1,14,table[ds_read(0x81)/10]); lcd_write_date(1,15,table[ds_read(0x81)_x0010_]);
}
}
//*****************液晶写命令操作********************
void lcd_write_com(uchar com)
{
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
P0=com;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
//*******************液晶写数据操作******************
void lcd_write_date(uchar h,uchar w,uchar date)
{
lcd_write_com(0x80+0x40*h+w);
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=date;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
//********************初始化*********************
void init()
{
lcd_write_com(0x38);//液晶初始化
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
打开写保护ds_write(0x8e,0x00);//
ds_write(0x84,0x00);//选择24时计时
ds_write(0x8c,0x10);//写入10年
ds_write(0x88,0x10);//写入10月
ds_write(0x86,0x28);//写入27日
ds_write(0x8a,0x04);//写入星期3
ds_write(0x84,0x15);//写入15时
ds_write(0x82,0x15);//写入15分
ds_write(0x80,0x00);//写入0秒
ds_write(0x8e,0x80);//关闭写保护
}
//*********************延时操作************************
void delay(uchar z)
{
uchar a,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
//******************DS1302读操作**********************
uchar ds_read(uchar com)
{
uchar i=0,value=0;
Rst=0;
Sclk=0;
Rst=1;
for(i=0;i<8;i++)
{
Io=com&0x01;
Sclk=0;
Sclk=1;
com>>=1;
}
for(i=0;i<8;i++)
{
Sclk=1;
Sclk=0;
if(Io)
{
value|=0x01<<i;
}
}
Rst=0;
value=(value/16*10)+value_x0016_;
return value;
//*******************DS1302写操作************************* void ds_write(uchar com,uchar value)
{
uchar i;
Rst=0;
Sclk=0;
Rst=1;
for(i=0;i<8;i++)
{
Io=com&0x01;
Sclk=0;
Sclk=1;
com>>=1;
}
for(i=0;i<8;i++)
{
Io=value&0x01;
Sclk=0;
Sclk=1;
value>>=1;
}
}
自己修改吧!.。