1602显示秒表

合集下载

单片机LCD1602A秒表程序

单片机LCD1602A秒表程序

ORG 0030H
MAIN:
ACALL SET_LCD
;LCD 初始化设置子程序
TOOP:
ACALL WR_THL ACALL RESET_18B20
;将报警上下线写入暂存寄存器 ;18B20 复位子程序
JNB FLAG,TOOP1
;18B20 不存在
ACALL MEU_OK
;显示"OK"菜单
ACALL RE_THL
6
嵌入式应用软件园,版权所有,请勿转载/销售。
第 2 章 程序功能
1.1 程序功能 程序中包含 LCM 用到的所有函数:初始化、写指令、写数据、判
忙碌、清屏幕。 在单片机的 P1 端口上接有 LCD 模块,用来显示计时时间。P3.3、
P3.4 端口分别接有按键 K1、K2,做秒表的计时控制按钮。 K1:暂停和起动秒表。只能暂停和起动二次。 K2:重新开始计时,计时值从 0 开始。
1.2 操作方法 1. 按一下 K2 键,准备计时。 2. 按一下 K1 键,计时开始。 3. 按一下 K1 键,暂停计时。 4. 按一下 K1 键,计时开始,在第 2 步的基础上累计时。 5. 按一下 K1 键,暂停计时。 6. 重复第 1~5 步,循环使用秒表。
7
1.3 原理图
嵌入式应用软件园,版权所有,请勿转载/销售。
MOV A,#0CCH
;跳过 ROM 匹配
ACALL WRITE_18B20
;调写入子程序
MOV A,#44H
;发出温度转换命令
ACALL WRITE_18B20
;调写入子程序
ACALL RESET_18B20
;调复位子程序
MOV A,#0CCH
;跳过 ROM 匹配

第10章 用LCD1602显示的秒表设计

第10章 用LCD1602显示的秒表设计
2
10.2 硬件设计
图10-2 用LCD1602显示的秒表电路原理图
3
10.3 程序设计
开始 初始化 初始显示
按键1是否按下? N
Y
按键1次数加1
按键1次数等于1、3
按键1次数等于2、4
开定时器
关定时器
显示第1次(或第3次) 按下的提示信息
显示第2次(或第4次) 按下的提示信息
break
break
秒计数单元=60? N
分计数单元=60? N
时计数单元=24? N
中断返回
Y 秒计数器清零,分加1
Y 分计数器清零,时加1
Y 时计数器清零
图10-4 定时器中断程序
5
10.4 仿真与实验结果
图10-5 1602LCD显示的秒表Proteus仿真电路
6
10.4 仿真与实验结果
图10-6 多孔板实验结果
第10章用LCD1602显示的秒表设计
10.1 项目任务 10.2 硬件设计 10.3 程序设计 10.4 仿真与实验结果
1
ቤተ መጻሕፍቲ ባይዱ
10.1 项目任务
用STC89C52单片机与LCD1602液晶显示器设计并制作一个秒 表,实现秒表的计时、暂停与清零等基本功能,每秒自动加1, 至59秒后再回到00,如此循环。运用“开始”、“暂停”、 “复位”按键实现对秒表计时的控制。
7
按键2是否按下? N
Y
关定时器
清零计时缓冲单元
显示清零提示信息
执行beep子程序
执行beep子程序
显示秒信息
图10-3 1602LCD显示的秒表主程序流程图
程序清单见课程设计指导书或配套仿真软件
4

红外控制秒表

红外控制秒表

红外控制秒表最小系统设计小组成员:班级:学院:重庆邮电大学2013年06 月题目及要求:红外控制显示秒表1.能够从00-00到59-99秒正常计时;2.显示电路的设计,选用LCD1602。

3.具有启动/暂停、清零、记录、显示功能,能够记录并显示3组数据。

4.其它扩展功能。

摘要:随着科学技术的发展,单片机因其高可靠性和高性价比,在智能化家用电器、仪器仪表等诸多领域内得到了极为广泛的应用。

当前单片机对家用电器控制呈现出外型简单化、功能多样化、性能优越化的发展趋向。

红外遥控器具用使用方便、功耗低、抗干扰能力强的特点,因此它的应用前景是不可估量。

本设计以红外线作为传递信息的载体,以AT89S52单片机为控制核心,12MHz的晶体振荡电路, 1602作为显示电路,并用24C02作为数据的存储,实现秒表的控制。

关键词:复位电路;LCD1602;晶振电路;AT89S52单片机目录摘要 (2)1、设计 (4)2、各功能模块分析 (4)2.1红外遥控部分介绍 (5)2.2液晶显示模块介绍 (10)2.3 24c02存储模块介绍 (12)3、系统软件设计 (15)3.1程序思路 (15)3.2单片机程序流程图 (15)4、系统调试 (16)4.1 合理布局 (15)4.2 调试 (16)4.3 调试结果分析 (17)5、结论与心得 (17)参考文献 (19)附录1 (20)1设计1.1 概述本文通过设计一个红外调节的电路,利用采用AT89S52单片机为主控芯片、遥控器发射、一体化红外接收头位红外接收模块、显示模块利用lcd1602液晶,存储模块选择24C02,其他扩展有按键扫描,蜂鸣器。

本设计框图如图1.1所示。

1.2 工作原理分析在这个实训中,采用一般的万用遥控器发射红外信号,接收部分用红外一体化接收头,对信号进行初步处理,并用AT89S52单片机对一体化红外接收头处理输出的信号进行识别,解码,显示。

在本次实验中,我们主要是运用AT89S52单片机设计了一款基于单片机控制的最小系统。

功能完整的1602LCD时钟实验

功能完整的1602LCD时钟实验

功能完整的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前⾔数字钟是采⽤数字电路实现对时,分,秒数字显⽰的计时装置,⼴泛⽤于个⼈家庭,车站, 码头办公室等公共场所,成为⼈们⽇常⽣活中不可少的必需品,由于数字集成电路的发展和⽯英晶体振荡器的⼴泛应⽤,使得数字钟的精度,远远超过⽼式钟表, 钟表的数字化给⼈们⽣产⽣活带来了极⼤的⽅便,⽽且⼤⼤地扩展了钟表原先的报时功能。

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

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

基于单片机的LCD1602电子时钟设计一、设计任务和目的1.1、设计任务(1):用单片机设计基于LCD1602的电子时钟,显示时间和日期;(2):误差精度控制在1s/天;(3):具有时间和日期的校准功能;(4):能区分某年是闰年或平年,并对应显示2月份的天数;(5):根据月份的不同显示不同的最大日数;(6):搭建仿真电路图,模拟单片机要实现的功能;(7):焊接单片机开发板;(8):编写程序,下载并调试,实现要求的功能。

1.2、设计目的(1):熟练掌握KEIL软件的使用方法;(2):熟练掌握PROTEUS软件的使用方法;(3):掌握单片机I/O接口的工作原理;(4):掌握LCD显示器的工作原理及编程方法;(5):掌握独立式键盘的工作原理及编程使用方法;(6):掌握单片机的下载使用方法。

二、设计思路和方案论证2.1、设计思路电路总体上分为控制和显示部分。

以单片机最小系统作为核心控制电路,控制LCD显示,具体显示内容及方式由软件来完成;由于有时钟和日期的调节功能需要校准电路和基本的复位电路,复位电路采用按键复位,调节键、加1键、减1键三个按键完成,共需四个按键;计时功能由固定频率的晶振完成(采用11.0592MHz);显示部分主要采用LCD1602作为显示。

2.2、方案论证(1):时钟芯片的选择和论证方案一:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V~5.5V范围内,功耗也较低,但价格比较贵。

方案二:直接采用单片机定时计数器提供秒信号,使用程序实现秒、分、时、日、月、年计数。

采用此方案实现虽然有一定的时间误差,但可减少芯片的使用,节约成本,易于实现,符合现实选用,所以采用此种作为时钟信号发生器。

(2):显示模块选择方案和论证:方案一:采用点阵式图形LCD12864液晶显示屏,液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用点阵式图形LCD12864液晶显示屏。

单片机时钟芯片ds1302在lcd1602上显示年月日时分秒_图文

单片机时钟芯片ds1302在lcd1602上显示年月日时分秒_图文

单片机时钟芯片ds1302在lcd1602上显示年月日时分秒_图文单片机设计实验内容摘要:单片机实验是通过Proteus仿真并且与Keil相结合使用控制单片机使其在仿真中完成一系列所设计的程序。

我们这个小组所做的实验是仿真一个数字时钟,通过DS1302这个芯片从计算机上读取时间信息,再由51单片机对数据进行处理、分配,将其输出在LCD1602上,实现简单的数字时钟的功能。

设计内容及要求:(1)根据设计课题的技术指标和给定条件,在教师指导下,能够独立而正确地进行方案论证和设计计算,要求概念清楚、方案合理、方法正确、步骤完整; (2)要求学生掌握单片机的设计内容、方法和步骤;(3)要求会查阅有关参考资料和手册等;(4)要求学会选择有关元件和参数;(5)要求学会绘制有关电路图和设计流程图;(6)要求学会编写设计说明书。

系统框图:硬件选择:1、AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51外形及引脚排列主要特性:?与MCS-51 兼容?4K字节可编程FLASH存储器?寿命:1000写/擦循环?数据保留时间:10年?全静态工作:0Hz-24MHz?三级程序存储器锁定?128×8位内部RAM?32可编程I/O线?两个16位定时器/计数器?5个中断源?可编程串行通道?低功耗的闲置和掉电模式?片内振荡器和时钟电路特性概述:AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

LCD1602液晶电子时钟

LCD1602液晶电子时钟

物理与电子信息学院课程设计报告书姓名:班级:学号:时间:2010年11月电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过三个模块:键盘、芯片、显示屏即可满足设计要求。

原理如图一所示。

3.2.各部分功能实现3.2.1.控制部分(AT89C52)单片机采用52系列单片机。

由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。

AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。

单片机最小系统单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。

1)复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。

如图二所示:图二复位电路2)晶振电路晶振电路原理图三:图三晶振模块原理图选取原则:电容选取30pF,晶振为12MHz。

3)电源AT89S52单片机的供电电源是5V的直流电。

4)EA非/Vpp 脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。

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

51单片机控制基于1602液晶显示 电子时钟【带闹铃和整点报时】
void buzz_pro(uchar be)//蜂鸣器发声函数
{
switch(be)
{//uint i;
/*用于整点响铃*/case 0:{
buzz=~buzz;
//delay1();
}break;
/*用于闹铃报时*/case 1:{
buzz=~buzz;
//delay(10);
}break;
}
}
void write_com(uchar com)//命令写入函数
{
rs=0;
delay(3);
P0=com;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void write_date(uchar date)//数据写入函数
{
rs=1;
delay(3);
P0=date;
delay(3);
write_date(0x30+ge);
}
void write_ymd(uchar add,uchar date)//年月日写入子程序
{
uchar sh,ge;
sh=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+sh);
write_date(0x30+ge);
sbit buzz=P1^5; //蜂鸣器控制端
uchar code week0[]="Sun";
uchar code week1[]="Mon";
uchar code week2[]="Tue";
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/**********************BST-V51实验开发板例程************************* 平台:BST-V51 + Keil U3 + STC89C52* 名称:1602显示秒表******************************************************************* ** 描述:** ** 上电后液晶屏先显示信息,接着按下K3,定时开始,再次按下** ** K3暂停,第3次按下显示累积计时,第4次按下暂停计时,任何时候按下K4* * ** 计数清零。

** ** *************************************************************************/#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar KeyCount=0;sbit K3 = P3^6;sbit K4 = P3^7;sbit BEEP = P2^3; //蜂鸣器uchar code cdis1[ ] = {" STOPWA TCH 0 "};uchar code cdis2[ ] = {" BST-V51 "};uchar code cdis3[ ] = {"TIME "};uchar code cdis4[ ] = {" BEGIN COUNT 1 "};uchar code cdis5[ ] = {" PAUSE COUNT 2 "};uchar code cdis6[ ] = {" BEGIN COUNT 3 "};uchar code cdis7[ ] = {" PAUSE COUNT 4 "};uchar code cdis8[ ] = {" "};sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P2^5;#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};uchar display[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};uchar display2[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/********************************************************* 延时函数*********************************************************/void Delay(uint num)//延时函数{while( --num );}/********************************************************* 蜂鸣器响一声**********************************************************/ void beep(){unsigned char y;for (y=0;y<180;y++){BEEP=!BEEP; //BEEP取反Delay(70);}BEEP=1; //关闭蜂鸣器}/********************************************************* 延时函数1*********************************************************/ void delay1(int ms){unsigned char n;while(ms--){for(n = 0; n<250; n++){_nop_();_nop_();_nop_();_nop_();}}}/*********************************************************** ** 检查LCD忙状态* * lcd_busy为1时,忙,等待。

** lcd-busy为0时,闲,可写指令与数据。

** ***********************************************************/bit lcd_busy(){bit result;LCD_RS = 0;// LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);}/*********************************************************** **写指令数据到LCD * *RS=L,RW=L,E=高脉冲,D0-D7=指令码。

* * ***********************************************************/ void lcd_wcmd(uchar cmd){// while(lcd_busy());LCD_RS = 0;// LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;Delay(10);}* **写显示数据到LCD * *RS=H,RW=L,E=高脉冲,D0-D7=数据。

* * ***********************************************************/ void lcd_wdat(uchar dat){// while(lcd_busy());LCD_RS = 1;// LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;Delay(10);}/*********************************************************** ** LCD初始化设定* * ***********************************************************/ void lcd_init(){LCD_RW = 0;delay1(15);lcd_wcmd(0x01); //清除LCD的显示内容lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据delay1(5);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x0c); //开显示,不显示光标delay1(5);lcd_wcmd(0x01); //清除LCD的显示内容delay1(5);}* * * 设定显示位置* * * **********************************************************/void lcd_pos(uchar pos){lcd_wcmd(pos | 0x80); //数据指针=80+地址变量}/********************************************************显示函数*********************************************************/ void play(){uchar i;for(i=0;i<6;i++){display2[i]=display[i]+0x30;}display2[7]=display[6]/10+0x30; //时单位数据处理display2[6]=display[6]%10+0x30;lcd_pos(0x45);lcd_wdat(display2[7]); //显示时lcd_wdat(display2[6]);lcd_wdat(0x3a); //显示':'lcd_wdat(display2[5]); //显示分lcd_wdat(display2[4]);lcd_wdat(0x3a); //显示':'lcd_wdat(display2[3]); //显示秒lcd_wdat(display2[2]);lcd_wdat(0x3a); //显示':'lcd_wdat(display2[1]); //显示毫秒lcd_wdat(display2[0]);}/********************************************************主函数main(){uchar m;TMOD=0x01;TH0=0xdc; TL0=0x00; //50ms定时EA=1; ET0=1;lcd_init();lcd_pos(0x00); //设置显示位置为第一行for(m=0;m<16;m++)lcd_wdat(cdis1[m]); //显示字符lcd_pos(0x40); //设置显示位置为第二行for(m=0;m<16;m++){lcd_wdat(cdis2[m]); //显示字符delay1(60);}delay1(1000);lcd_pos(0x40); //设置显示位置为第二行for(m=0;m<16;m++)lcd_wdat(cdis3[m]);while(1){if(K3==0){KeyCount++; //计数beep();delay1(100);switch (KeyCount){case 1:TR0=1; //启动中断lcd_pos(0x00);for(m=0;m<16;m++)lcd_wdat(cdis4[m]);break;case 2:TR0=0; //停止中断lcd_pos(0x00);for(m=0;m<16;m++)lcd_wdat(cdis5[m]);break;case 3:TR0=1; //启动中断lcd_pos(0x00);for(m=0;m<16;m++)lcd_wdat(cdis6[m]);break;case 4:TR0=0; //停止中断lcd_pos(0x00);for(m=0;m<16;m++)lcd_wdat(cdis7[m]);break;default:TR0=0; //停止中断break;}}if(K4==0){TR0=0; //停止中断KeyCount=0;for(m=0;m<8;m++)display[m]=0x00; //计时单元清零lcd_pos(0x00); //设置显示位置为第一行for(m=0;m<16;m++)lcd_wdat(cdis1[m]);beep();delay1(100);}play();}}/********************************************************* * * * Time0中断函数* * * **********************************************************/ void Time0(void) interrupt 1 using 0{TH0=0xdc; //10ms定时TL0=0x00;display[0]++; //0.01Sif(display[0]==10){display[0]=0;display[1]++; //0.1S}if(display[1]==10){display[1]=0;display[2]++; //秒个位}if(display[2]==10){display[2]=0;display[3]++; //秒十位}if(display[3]==6){display[3]=0;display[4]++; //分个位}if(display[4]==10){display[4]=0;display[5]++; //分十位}if(display[5]==6){display[5]=0;display[6]++; //时}if(display[6]==24){display[6]=0;}}/*********************************************************/。

相关文档
最新文档