LCD数字时钟
- 格式:doc
- 大小:38.50 KB
- 文档页数:7
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
下面是单片机的主要发展趋势。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
纵观自己所处的这个快速发展的信息时代,数字电路的技术已广泛应用于各个领域中,它们无处不在我们的身边,我们通常所使用的手机,数码相机,MP3,MP4等电子产品都关联到数字电路的应用,而我想从自己所学专业的某一点出发,来分析数字电路在生活中的广泛应用。
由于时间在日常生活中的重要性,所以以时间为媒介的电子钟就被选为我这次论文选题的目标。
单片机简介单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
数字钟报告数字钟是一种很常见的计时工具,与传统机械钟相比,数字钟拥有更多的功能和便利性。
本次报告将详细介绍数字钟的特点、功能和使用方法。
数字钟的特点主要有以下几点:第一,数字钟使用数字显示时间,清晰明了,更容易读取。
相比于指针式的机械钟,数字钟的时间显示更加准确,误差较小。
第二,数字钟一般采用LED(发光二极管)显示屏或LCD(液晶显示屏)显示屏。
LED屏幕的亮度高,适合在光线较暗的环境下查看。
LCD屏幕则更节能省电,适合长时间使用。
第三,数字钟通常具备闹钟功能和定时器功能。
用户可以通过设置闹钟来提醒自己起床、上班等重要的时间节点。
定时器功能可以帮助用户掌握时间,做好时间分配。
数字钟的功能主要包括时间显示、闹钟、定时器等。
首先,数字钟的核心功能是准确显示时间。
用户可以通过设置按钮来调整时间,以保证钟表时间和实际时间一致。
有些数字钟还可以自动与网络时间同步,确保时间的准确性。
其次,数字钟一般都带有闹钟功能。
用户可以通过设定时间和铃声类型来设置闹钟。
闹钟可以帮助人们按时起床、上班或做其他事情。
另外,数字钟还常常具备定时器功能。
用户可以根据需要设定定时器的时间和模式,比如做饭时设定定时器提醒自己关火,或者在学习时设定定时器提醒休息。
最后,数字钟的使用方法也非常简单。
首先,用户需要根据说明书或者按键标识来设置时间、闹钟和定时器等功能。
设置好后,数字钟会自动运行。
用户可以随时查看时间,并通过按键来开启或关闭闹钟、定时器等功能。
总结来说,数字钟是一种准确、便利、功能丰富的计时工具。
它不仅可以准确显示时间,还可以帮助人们按时起床、做事、掌握时间。
在日常生活中,数字钟扮演着重要的角色,使我们的生活更加有序和高效。
毕业设计课题名称:基于单片机的数字钟设计院系名称专业班级学生姓名学号指导教师完成日期:摘要多功能数字钟的应用非常普遍,由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
本设计具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LCD显示器动态显示“时”、“分”、“秒”、“年”、“月”、“日”的现代计时装置。
另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
关键词:多功能、AT89C51、LCDAbstractThe application of multi-function digital clock very general, by single chip microcomputer as the core controller, digital clock through its clock signal timing function, will realize its time data SCM outputs, using monitors displayed. This design has the timing, reset function of digital clock, is single-chip microcomputer AT89C51 as the core element also adopts LCD display dynamic display "hour"" minutes" and "second", "year", "month", "day" modern timing device. Another is reset function, stopwatch function, and timer function, using the microcomputer digital clock with programming flexible, facilitate function expansion, etc.Keywords: multi-function, AT89C51, LCD目录摘要 (2)Abstract (2)目录 (3)一、设计意义和方案 (3)1.1 任务要求 (3)1.2 设计意义 (4)1.3 设计方案 (4)二、硬件设计 (4)2.1 单片机的介绍及特点 (4)2.2 单片机选择 (5)2.1.1 单片机的引脚说明 (6)2.1.2 定时/计数器 (9)2.2 显示方案 (9)2.3 时钟电路 (10)2.4 复位电路 (10)三、软件设计 (11)四、仿真原理图 (12)五、系统测试 (12)5.1 硬件测试 (12)5.2 软件测试 (13)六、总结 (13)参考文献 (14)附录 (14)程序完整代码 (14)一、设计意义和方案1.1 任务要求⑴通过单片机内定时器控制走时,准确持续走时,调时不影响走时。
注:本程序并没有显示星期,如有需要,可自行添加。
/*******************************************************实验名称:智能电子钟(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键没有设置功能。
《单片机原理及应用》课程设计说明书题目LCD12864 液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期课程设计任务书系(部):专业:目录一、12864液晶的工作原理 (4)二、方案设计 (5)实物硬件设计 (5)系统硬件设计 (5)主芯片模块 (5)晶振和复位模块 (6)按钮模块 (7)系统软件设计 (7)主程序设计 (7)三、仿真和分析 (8)四、总结体会 (8)参考文献 (9)一、12864液晶的工作原理液晶显示屏中的业态光电显示材料,利用液晶的电光效应把电信号转换成数字符、图像等可见信号。
如图1-1,液晶正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶变的不透明,颜色加深因而能显示数字和图像。
管脚一共1个CS1左半屏片选端,CS2右半屏片选端;V0液晶显示驱动电压,通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,也叫D/I;R/W读写选择信号,H为读,L为写,。
E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0。
DB0-DB7数据传输端口。
RST复位信号。
-VOUT和V0为液晶显示驱动电压。
12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
图1-1 12864LCD液晶显示屏二、方案设计实物硬件设计单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS1302时钟控制模块。
通过这六个模块的协调工作就可以完成相应的液晶屏控制和显示功能。
这六个模块的相互连接如图2-1:图2-1 硬件组成框图系统硬件设计本硬件电路主要由四大模块组成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块。
功能完整的1602LCD时钟实验摘要本设计基于单⽚机技术原理,以单⽚机芯⽚STC89C52作为核⼼控制器,通过硬件电路的制作以及软件程序的编制,设计制作出⼀个多功能数字时钟系统。
单⽚机扩展的LCD显⽰器⽤来显⽰年、⽉、⽇、时、分、秒计数单元中的值。
整个设计包括两⼤部分: 硬件部分和软件部分,以单⽚机为核⼼, 配以⼀定的外围电路和软件。
硬件是整个系统的基础, 软件部分则要合理、充分地⽀持和使⽤系统的硬件, 从⽽完成系统所要完成的任务。
本设计采⽤LCD液晶显⽰,电路简单使⽤⼴泛。
该时钟系统主要由时钟模块、闹钟模块、液晶显⽰模块、键盘控制模块以及信号提⽰模块组成。
能够准确显⽰时间(显⽰格式为年:⽉:⽇:时时:分分:秒秒,24⼩时制),可随时进⾏时间调整,具有闹钟时间设置、闹钟开/关、⽌闹功能。
设计以硬件软件化为指导思想,充分发挥单⽚机功能,⼤部分功能通过软件编程来实现,电路简单明了,系统稳定性⾼。
单⽚机在这种情况下诞⽣了基于单⽚机电⼦时钟。
关键词:单⽚机 LCD1602 数字钟This design based on the single chip microcomputer principle, taking single-chip chip STC89C52 as core controller, through the hardware circuit and software production procedure formulation, designed and produced a multi-function digital clock system. SCM extended LCD display used to display date and time, minutes and seconds counting unit of values. The whole design includes two parts, hardware and software of, based on singlechip, match with certain peripheral circuit and software. Hardware is based in the whole system, the software part then be reasonable and fully support and use the system hardware, thus completing system to complete the task. This design USES the LCD, simple circuit is widely used. This clock system mainly by the clock module, alarm module, LCD module, keyboard control module and signal hint module. To accurately display the time (display format for years: month: day: always: component: seconds seconds, 24-hour system), available for time to adjust, with alarm time setting, alarm clock on/off, stop joking function. Design with hardware and software into guiding ideology, give full play to the SCM functions, most functions through software programming realize, circuit straightforward, stability of the system is high. SCM in this case was born based on single-chip electronic clock. Keywords: SCM LCD1602 digital clock前⾔数字钟是采⽤数字电路实现对时,分,秒数字显⽰的计时装置,⼴泛⽤于个⼈家庭,车站, 码头办公室等公共场所,成为⼈们⽇常⽣活中不可少的必需品,由于数字集成电路的发展和⽯英晶体振荡器的⼴泛应⽤,使得数字钟的精度,远远超过⽼式钟表, 钟表的数字化给⼈们⽣产⽣活带来了极⼤的⽅便,⽽且⼤⼤地扩展了钟表原先的报时功能。
基于单片机的LCD电子时钟设计随着科技的不断发展,单片机已经成为现代电子设备中的重要组成部分。
其中,LCD电子时钟的设计与应用更是受到广泛。
基于单片机的LCD电子时钟设计具有精度高、稳定性好、体积小、耗电量低等优点,被广泛应用于家居、办公、交通运输等领域。
一、设计原理基于单片机的LCD电子时钟设计主要由单片机、时钟电路和LCD显示模块组成。
其中,单片机作为主控制器,负责读取时钟信号并控制LCD显示模块。
时钟电路则产生一个高精度的实时时钟信号,LCD显示模块则负责将时间信息显示出来。
二、硬件设计1、单片机选择:单片机是整个系统的核心,负责读取时钟信号、处理数据并控制LCD显示模块。
常见的单片机型号包括STM32、PIC、AVR等。
根据实际需求,选择合适的单片机型号。
2、时钟电路:时钟电路是整个系统的核心部分,它产生高精度的实时时钟信号。
常见的时钟电路包括石英晶体振荡器、GPS模块等。
根据实际需求,选择合适的时钟电路。
3、LCD显示模块:LCD显示模块负责将时间信息显示出来。
常见的LCD显示模块包括字符型LCD和图形型LCD。
根据实际需求,选择合适的LCD显示模块。
三、软件设计软件设计是整个系统的重要组成部分,它需要实现读取时钟信号、处理数据并控制LCD显示模块的功能。
具体的软件设计流程如下:1、初始化:初始化单片机、时钟电路和LCD显示模块。
2、读取时钟信号:通过时钟电路读取实时时钟信号。
3、处理数据:对读取的时钟信号进行处理,提取出年、月、日、时、分、秒等信息。
4、控制LCD显示模块:将处理后的时间信息通过LCD显示模块显示出来。
5、循环执行:重复执行上述步骤,实现LCD电子时钟的实时更新。
四、调试与优化完成硬件和软件设计后,需要对系统进行调试和优化。
具体的调试和优化步骤如下:1、通电测试:将系统通电,检查各部分是否正常工作。
2、精度测试:检查时钟电路的精度是否满足要求。
3、LCD显示测试:检查LCD显示模块是否能正确显示时间信息。
东北石油大学课程设计课程单片机课程设计题目单片机控制的LCD时钟设计院系电气信息工程学院测控系专业班级学生姓名学生学号指导教师2011年4月6日东北石油大学课程设计任务书课程单片机课程设计题目单片机控制的LCD时钟设计专业姓名学号一、任务设计一款基于STC89C52RC单片机的LCD数字时钟,实现显示当前时间以及具有调整日期与时间的功能。
二、设计要求[1] 使用集成数字电路或单片机作为主控制芯片。
[2] 使用LCD来显示现在的时间,显示格式为:上行显示:年-月-日;下行显示:时时:分分:秒秒。
[3] 使用时钟芯片DS1302实现时钟定时。
[4]具有调整日期与时间的功能。
[5] 写出详细的设计报告。
[6] 给出全部电路和源程序。
三、参考资料[1] 求是科技. 单片机典型模块设计实例导航. 北京:人民邮电出版社. 2005.8[2] 徐淑华, 程退安等.单片微型机原理及应用. 哈尔滨:哈尔滨工业大学出版社. 2005.1[3] 孙余凯. 精选实用电子电路260例. 北京:电子工业出版社. 2007.6[4] 殷春浩, 崔亦飞. 电磁测量原理及应用. 徐州:中国矿业大学出版社. 2003.7[5] 《LCD1602A数据手册》[6] 《DS1302数据手册》完成期限2011.3.28至2011.4.8指导教师专业负责人2011年3月28 日目录第1章绪论....................................................31.1 STC89C52RC单片机概述...............................................31.2 LCD概述............................................................31.3 DL1302简介.........................................................41.4 本设计任务.........................................................4 第2章总体方案论证与设计......................................52.1显示部分...........................................................52.2数字时钟...........................................................52.3温度采集...........................................................62.4总体硬件组成框图...................................................6 第3章系统硬件设计............................................73.1 STC89C52RC单片机最小系统...........................................73.2 温度测量模块.......................................................73.3 时钟模块...........................................................83.4 LCD液晶显示模块....................................................83.5 键盘模块...........................................................93.6 整体电路...........................................................9 第4章系统的软件设计.........................................114.1主程序设计........................................................114.2时间设定程序流程..................................................114.3温度测量流程图..............................................12 第5章系统调试与测试结果分析.................................145.1 使用的仪器仪表....................................................145.2 系统调试..........................................................145.3 测试结果..........................................................14 结论..........................................................15参考文献......................................................16 附录1 程序....................................................17附录2 仿真效果图..............................................27第1章绪论在新的世纪我们已经步入了第二个十年,随着全球经济的复苏和发展,由于在世界范围内人类需求的巨大释放,以及消费结构的升级,同时传统能源的稀缺以及带来的环境的破坏,都将带来新一轮的科技革命的巨变。
; 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,4DHW 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图片看不清的可以放大,这个应该会的,不多说。