智能电子钟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 系列单片机的应用日趋广泛。
- 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;
}
}
自己修改吧!.。