51单片机实现电子时钟功能-1602液晶显示

合集下载

51单片机驱动LCD1602程序设计(C语言)

51单片机驱动LCD1602程序设计(C语言)
51 单片机驱动 LCD1602 程序设计(C 语言)
字符液晶绝大多数是基于 HD44780 液晶芯片的,控制原理是完全相同的,因此 HD44780 写 的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型 LCD 通常有 14 条引脚线或 16 条引脚线的 LCD,多出来的 2 条线是背光电源线 VCC(15 脚)和地线 GND(16 脚),其控制原理 与 14 脚的 LCD 完全一样,定义如下表所示:
for(i=0;i<count;i++) {
if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80; else x |= 0xC0; //在第二行显示是地址码+0xC0; Write_com(x); //发送地址码 Write_dat(*p); //发送要显示的字符编码 x++; p++; }
01110
○■■■○
10001
■○○○■
10001
■○○○■
10001
■○○○■
11111
■■■■■
10001
■○○○■
10001
■○○○■
上图左边的数据就是字模数据,右边就是将左边数据用“○”代表 0,用“■”代表 1。看出是个“A”
字了吗?在文本文件中“A”字的代码是 41H,PC 收到 41H 的代码后就去字模文件中将代表 A 字的
字符型 LCD 的引脚定义
HD44780 内置了 DDRAM、CGROM 和 CGRAM。DDRAM 就是显示数据 RAM,用来寄存 待显示的字符代码。共 80 个字节,其地址和屏幕的对应关系如下表:
也就是说想要在 LCD1602 屏幕的第一行第一列显示一个"A"字,就要向 DDRAM 的 00H 地址写 入“A”字的代码就行了。但具体的写入是要按 LCD 模块的指令格式来进行的。在 1602 中我们用前 16 个就行了。第二行也一样用前 16 个地址。对应如下:

基于51单片机的红外遥控+液晶LCD1602显示程序源代码

基于51单片机的红外遥控+液晶LCD1602显示程序源代码

基于51单片机的红外遥控+液晶LCD1602显示程序源代码/*******************红外遥控+液晶LCD1602测试程序源代码******************** 单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:红外遥控+液晶LCD1602显示功能测试。

操作说明:按下红外遥控器上的“CH-”键,液晶LCD1602上显示“CH-”。

按下红外遥控器上的“CH”键,液晶LCD1602上显示“CH”。

按下红外遥控器上的“CH+”键,液晶LCD1602上显示“CH+”。

按下红外遥控器上的“|<<”键,液晶LCD1602上显示“|<<”。

按下红外遥控器上的“>>|”键,液晶LCD1602上显示“>>|”。

按下红外遥控器上的“>||”键,液晶LCD1602上显示“>||”。

按下红外遥控器上的“-”键,液晶LCD1602上显示“-”。

按下红外遥控器上的“+”键,液晶LCD1602上显示“+”。

按下红外遥控器上的“EQ”键,液晶LCD1602上显示“EQ”。

按下红外遥控器上的“0”键,液晶LCD1602上显示“0”。

按下红外遥控器上的“100+”键,液晶LCD1602上显示“100+”。

按下红外遥控器上的“200+”键,液晶LCD1602上显示“200+”。

按下红外遥控器上的“1”键,液晶LCD1602上显示“1”。

按下红外遥控器上的“2”键,液晶LCD1602上显示“2”。

按下红外遥控器上的“3”键,液晶LCD1602上显示“3”。

按下红外遥控器上的“4”键,液晶LCD1602上显示“4”。

按下红外遥控器上的“5”键,液晶LCD1602上显示“5”。

按下红外遥控器上的“6”键,液晶LCD1602上显示“6”。

按下红外遥控器上的“7”键,液晶LCD1602上显示“7”。

按下红外遥控器上的“8”键,液晶LCD1602上显示“8”。

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。

本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。

51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。

本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。

本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。

接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。

将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。

软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。

本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。

通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。

2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。

它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。

51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。

51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。

其存储器分为程序存储器(ROM)和数据存储器(RAM)。

程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。

51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。

51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。

51单片机控制1602LCD显示程序

51单片机控制1602LCD显示程序

LCD显示电路#include<reg51.h>sbit RS=P3^7; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^7; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,将BF位定义为P0.7引脚#define Lcd_Data P0#include <string.h>#include<intrins.h> //包含_nop_()函数定义的头文件unsigned char code string1[ ]={0x77,0x75,0x20,0x79,0x61,0x6E,0x67,0x20,0x79,0x61,0x6E,0x67,0x20,0x20,0x20,0x20}; //第一行显示的字符void Lcd_delay1ms() // 函数功能:延时1ms//注:不同单片机不同晶振需要对此函数进行修改{ unsigned char i,j;for(i=0;i<90;i++)for(j=0;j<33;j++);}void Lcd_delay(unsigned int n) // 函数功能:延时若干毫秒,入口参数:n{ unsigned int i;for(i=0;i<n;i++)Lcd_delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。

result=1,忙碌;result=0,不忙***************************************************/bit Lcd_BusyTest(void)bit result;RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; //E=1,才允许读写_nop_(); //空操作_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间result=BF; //将忙碌标志电平赋给resultE=0;return result;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/void Lcd_WriteCom (unsigned char dictate){ while(Lcd_BusyTest()==1); //如果忙就等待RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置ぜ? _nop_();_nop_(); //空操作两个机器周期,给硬件反应时间Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址x入口参数:注:此函数已经加上了0x80,故只需写上实际地址就行***************************************************/void Lcd_WriteAddress(unsigned char x){ Lcd_WriteCom(x|0x80); //显示位置的确定方法规定为80H+地址码x/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/void Lcd_WriteData(unsigned char y){while(Lcd_BusyTest()==1);RS=1; //RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; //E置低电平(写指令时就是让E从0到1发生正跳变所以应先置ぜ?Lcd_Data=y; //将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/void Lcd_Int(void){Lcd_delay(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间Lcd_WriteCom(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口Lcd_delay(5); //延时5msLcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);设置模式次写9// Lcd_WriteCom(0x38);Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x38); //9次写设置模式Lcd_delay(5);Lcd_WriteCom(0x0C); //显示模式设置:显示开,有光标,光标闪烁Lcd_delay(5);Lcd_WriteCom(0x06); //显示模式设置:光标右移,字符不移Lcd_delay(5);Lcd_WriteCom(0x01); //清屏幕指令,将以前的显示内容清零Lcd_delay(5); }void hanying_show(void){unsigned char Lcd_i;Lcd_WriteCom(0x01);//清显示:清屏幕指令Lcd_delay(2);Lcd_WriteAddress(0x00); // 设置显示位置为最左侧Lcd_delay(2);Lcd_i=0;while(string1[Lcd_i]!='\0') //'\0'是数组结束标志需先将字符存入{Lcd_WriteData(string1[Lcd_i]); // 显示字符Lcd_i++;Lcd_delay(4);}}void main(){Lcd_Int(); //1602初始化while(1){hanying_show();}}。

单片机课程设计--电子秒表与闹钟的设计

单片机课程设计--电子秒表与闹钟的设计

目录摘要 (Ⅰ)1 电子秒表与闹钟系统概述 (1)1.1 课程设计基本要求 (1)1.2 系统实现功能 (1)1.3 系统应用价值展望 (2)2 仿真软件Proteus和Keil简介 (3)2.1 Proteus简介 (3)2.2 Keil简介 (3)3 系统工作原理分析 (4)3.1AT89C2051模块 (4)3.2 显示驱动模块 (6)3.3 数码管显示模块 (8)4 程序流程图设计 (9)5 Proteus仿真原理图 (12)6 课程设计体会 (14)参考文献 (15)附:源程序代码 (16)摘要随着科学技术的不断发展 , 人们对时间计量的要求越来越高。

在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。

本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确。

软件部分以C语言为主体,用1602LCD 液晶屏显示输出信息,输出信息量多,更直观、人性化。

该时钟可实现人机交互,可通过提供的键盘对其进行调整。

系统具有以下功能:年、月、日、时、分、秒显示;12小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。

本次设计的电子时钟系统由单片机最小系统,1602LCD液晶屏,时钟芯片,调整按键,蜂鸣器,电源五大部分组成。

关键词:定时器中断闹钟电子时钟1 电子秒表与闹钟系统概述1.1 课程设计基本要求(1) 用并行口设计一个具有显示功能的秒表,显示准确的北京时间(时、分、秒),可用24小时制式;(2) 有时间校准功能;(3) 允许通过转换功能键转换显示时间,用定时器实现一个电子闹钟,能设定和修改定时的时间,并能到时响铃通知;(4) 所有按键需要通过串口自发自收来调校各种功能。

1.2 系统实现功能本系统是基于单片机AT89S52制作的数字电子钟。

根据实验要求,在完成实验所要求的基本功能外,扩展了几个功能。

单片机代码1602液晶屏显示

单片机代码1602液晶屏显示
lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
**********************************************************/
void lcd_busy()
{
bit busy;
busy = 1;
while (busy)
{
LCD_RS = 0;
{
delayms(15);
lcd_wcmd(0x38, 0); //16*2显示,5*7点阵,8位数据
delayms(5);
lcd_wcmd(0x38, 0); //不进行忙检测,强制执行三次。
delayms(5);
lcd_wcmd(0x38, 0);
delayms(5);
lcd_wcmd(0x38, 1); //进行忙检测
delayms(5);
lcd_wcmd(0x0c, 1); //显示开,关光标
delayms(5);
lcd_wcmd(0x06, 1); //移动光标
delayms(5);
lcd_wcmd(0x01, 1); //清除LCD的显示内容
delayms(5);
}
/**********************************************************
单片机代码:
1602液晶屏显示
#include <reg52.h>
#include <intrins.h>
//#define uchar unsigned char
//#define uint unsigned int
#define DATA_PORT P0

51单片机控制LCD1602液晶屏

51单片机控制LCD1602液晶屏

51单片机控制LCD1602液晶屏本讲任务:了解液晶1602的相关知识,通过一个例程了解液晶1602的使用。

LCD1602简介:1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。

它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

例程:/****************LCD驱动基本代码 ******************单片机型号:STC89C52RC*开发环境:KEIL*名称:1602驱动基本代码*************************************************/#include<reg52.h>#include<intrins.h>#define LCD_Data P0#define Busy 0x80sbit LCD_RS=P1^0;sbit LCD_RW=P1^1;sbit LCD_E=P2^5;unsigned char code welcome[]={"YOU ARE WELCOME"};unsigned char code mcu[]={"SL-51A"};void Delay5Ms(void);void WriteDataLCD(unsigned char WDLCD);void WriteCommandLCD(unsigned char WCLCD,BuysC);unsigned char ReadDataLCD(void);unsigned char ReadStatusLCD(void);void LCDInit(void);void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); void Info_display(void);void Delay5Ms(void){unsigned int TempCyc=3552;while(TempCyc--);}void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD();LCD_Data=WDLCD;LCD_RS=1;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}void WriteCommandLCD(unsigned char WCLCD,BuysC) {if(BuysC)ReadStatusLCD();LCD_Data=WCLCD;LCD_RS=0;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}unsigned char ReadDataLCD(void){LCD_RS=1;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;return(LCD_Data);}unsigned char ReadStatusLCD(void) {LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=1;while (LCD_Data & Busy);return(LCD_Data);}void LCDInit(void){LCD_Data=0;Delay5Ms();Delay5Ms();Delay5Ms(); WriteCommandLCD(0x38,0);Delay5Ms(); WriteCommandLCD(0x38,0);Delay5Ms(); WriteCommandLCD(0x38,0);Delay5Ms(); WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0C,1);}void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData){Y&=0x1;X&=0xF;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X,0);WriteDataLCD(DData);}void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData) {unsigned char ListLength;ListLength=0;Y&=0x1;X&=0xF;while(DData[ListLength]>=0x20){if(X<=0xF){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}}void main(void){LCDInit();DisplayListChar(5,0,mcu);DisplayListChar(0,1,welcome);while(1){;}}。

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

C51单片机LCD电子时钟课程设计

C51单片机LCD电子时钟课程设计
键盘控制零碎设计:
按键须要4个,分别实现为时间调整、时间的加、时间的减、闹钟调整四个功能.用单片机的4个I/O口接收控制旌旗灯号,其电路如图所示:
按键调时电路
通过控制键来控制所要调节的是时、分、还是秒.在控制键按下后LCD中会在响应的地位出现光标,这时候在通过加数键或减数键来控制时分秒的加或减.在调闹钟键按下后LCD中也会在响应的地位出现光标,这时候也通过加数键或减数键来设置闹钟.
显示电路
三 、软件设计
软件设计是本次设计中不成缺少的环节,是本次设计能够完成的最次要的环节之一.在完成了硬件电路的设计以后,根据零碎设计请求和硬件电路开始零碎软件部分的设计.本零碎软件设计包含:主程序、零碎初始化子程序、延时间断子程序、时间设置子程序.首进步前辈行模块设计,最初进行各模块的整合以完成全部软件零碎.
4.1 测试方法7
4.2 测试结果7
4.3 结果分析8
五、源程序8
一、设计任务请求分析
本设计要实现的功能是:实时显示当前的时钟,而且可以设定闹铃,以蜂鸣器鸣响5秒的方式作为闹铃.
按照零碎的设计功能所请求的,液晶显示电子时钟道理图如图所示.
液晶显示电子时钟道理图
本零碎以AT89C51单片机为核心,该单片机可把数据进行处理,从而把数据传输到显示模块LCD1602液晶显示器,实现时间及日期的显示.以LCD液晶显示器为显示模块,把单片机传来的数据显示出来,而且显示多样化,还可以对时间和日期进行设置,次要靠按键来实现.
sbit k1=P3^0; //定义调时键的io口
sbit k2=P3^1; //定义加数键的io口
sbit k3=P3^2; //定义减数键的io口
sbit k4=P3^3; //定义调闹钟键的io口

51单片机实现的1602闹钟万年历

51单片机实现的1602闹钟万年历
;4-年,5-月,6-日,7-时,8-分,9-秒,10-退出调整。
DIS_H DATA 47H
DIS_M DATA 48H
DIS_S DATA 49H
DIS_S0 DATA 4AH
DIS_S1 DATA 4BH
DIS_S2 DATA 4CH
DIS_S3 DATA 4DH
DIS_S4 DATA 4EH
DIS_BUF_U9 DATA 2FH
DIS_BUF_U10 DATA 30H
DIS_BUF_U11 DATA 31H
DIS_BUF_U12 DATA 32H
DIS_BUF_U13 DATA 33H
DIS_BUF_U14 DATA 34H
DIS_BUF_U15 DATA 35H
DIS_BUF_L0 DATA 36H ;LCD 下排显示缓冲区
DIS_BUF_L9 DATA 3FH
DIS_BUF_L10 DATA 40H
DIS_BUF_L11 DATA 41H
DIS_BUF_L12 DATA 42H
DIS_BUF_L13 DATA 43H
DIS_BUF_L14 DATA 44H
DIS_BUF_L15 DATA 45H
FLAG DATA 46H ;标识调整状态 0-闹钟功能,1-闹钟时,2-闹钟分,3-闹钟秒
DIS_BUF_L1 DATA 37H
DIS_BUF_L2 DATA 38H
DIS_BUF_L3 DATA 39H
DIS_BUF_L4 DATA 3AH
DIS_BUF_L5 DATA 3BH
DIS_BUF_L6 DATA 3CH
DIS_BUF_L7 DATA 3DH

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";

单片机的LCM1602液晶显示温度与万年历显控制

单片机的LCM1602液晶显示温度与万年历显控制

毕业设计报告(论文)报告(论文)题目:基于单片机的LCM1602液晶控制——温度与万年历显示设计作者所在系部:电子工程系作者所在专业:作者所在班级:作者姓名:作者学号:指导教师姓名:完成时间: 2011年 6 月 9 日院教务处制电子工程系毕业设计(论文)任务书指导教师:教研室主任:系主任:摘要论文的研究工作是以液晶屏显示技术为背景展开的,并且详细介绍了通过MCS-51单片机控制LCM1602液晶的显示情况,以软件形式对系统进行控制,使得系统控制更具灵活与方便。

本文在深入分析LCD显示技术的基础上,重点解析了LCM显示的单片机控制技术,以及LCD显示在各种电子显示中的优势,同时阐述了其在日常显示系统中的应用;并且以Proteus与Keil uVision4软件为基础,编写了MCS-51单片机对LCM1602显示控制的软件,绘制其原理图,并使用Proteus软件与Keil uVision4软件建立联合仿真。

论文主要论述了原理图各个模块的作用,控制软件的各个模块的编程。

关键词液晶显示技术LCM1602 MCS-51单片机Proteus Keil uVision4目录第1章绪论 (1)1.1课题背景及主要技术国内外研究概况 (1)1.2LCM1602显示控制系统简介 (2)1.3课题的建立以及本文完成的主要工作 (3)第2章开发工具软件简介 (4)2.1K EIL U V ISION4软件简介 (4)2.2P ROTEUS软件简介 (4)2.3K EIL U V ISION4与P ROTEUS软件联合仿真 (5)2.4小结 (5)第3章 LCD显示控制技术 (6)3.1LCD显示技术的发展 (6)3.2LCM1602显示控制技术及其体系结构 (7)3.2.1 LCM1602模块简介 (8)3.2.2 LCM1602模块内部结构 (9)3.2.3 LCM1602控制指令 (10)3.3小结 (12)第4章系统硬件概况 (13)4.1系统概况 (13)4.2功能模块 (13)4.2.1 MCS-51单片机最小系统模块 (14)4.2.2 温度采集模块 (14)4.2.3 蜂鸣器报警模块 (15)4.2.4 万年历调节设置模块 (16)4.2.5 LCM1602显示模块 (16)4.2.6 电源模块 (17)3.3小结 (17)第5章软件控制系统概况 (18)5.1程序流程概况 (18)5.2万年历显示控制模块 (18)5.2.1 流程图 (18)5.2.2 源程序代码 (19)5.3温度显示控制模块 (19)5.3.1 程序流程 (19)5.3.2 源程序代码 (19)5.3.3 主程序 (19)5.4小结 (20)第6章课题特点 (21)6.1LCM模块的应用 (21)6.2程序结构化与模块化设计 (21)6.3抗干扰技术 (21)第7章结论 (23)7.1调试联合仿真 (23)7.2仿真结果 (23)7.3小结 (23)致谢 (24)参考文献 (25)附录 (26)基于单片机的LCM1602液晶控制——温度与万年历显示设计第1章绪论1.1 课题背景及主要技术国内外研究概况自20世纪80年代起,显示设备经历着传统工艺的改良、新工艺的发展、成熟的优胜劣汰。

51单片机电子时钟课程设计报告

51单片机电子时钟课程设计报告

第一部分设计任务和要求1.1单片机课程设计内容 (2)1.2单片机课程设计要求 (2)1.3系统运行流程 (2)第二部分设计方案2.1总体设计方案说明 (2)2.2系统方框图 (3)2.3系统流程图 (3)第三部分主要器材及基本简介3.1主要器材 (4)3.2主要器材简介 (4)第四部分系统硬件设计4.1最小系统 (6)4.2LCD显示电路 (6)4.3键盘输入电路 (7)4.4蜂鸣器和LED灯电路 (7)第五部分仿真电路图与仿真结果 (8)第六部分课程设计总结 (8)第七部分参考文献 (9)附录A 实物图附录B 系统源程序第一部分设计任务和要求1.1单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。

1.2单片机课程设计要求1.能实现年、月、日、星期、时、分、秒的显示;2.能实现调时功能;3.能实现12/24小时制切换;4.能实现8 : 00—22 : 00整点报时功能。

1.3系统运行流程程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。

若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。

若没到则循环执行。

计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。

调时闪烁中断服务程序用于被调单元的闪烁显示。

调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。

实现了对时间的设置和修改、LCD显示数值等主要功能。

相关的调整是靠对功能键的判断来实现的。

第二部分设计方案2.1总体设计方案说明1.程序设计及调试根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。

2.硬件焊接及调试根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。

3.后期处理对设计过程进行总结,完成设计报告。

AVR单片机学习笔记–LCD1602模块

AVR单片机学习笔记–LCD1602模块

AVR 单片机学习笔记–LCD1602模块学完51单片机再来学AVR,感觉很容易上手,LCD1602在学51的时候学过,所以可以直接修改相关的IO口操作即可。

现在顺便也复习一下。

1602可以显示两行字符,每行可以显示16个字符,可惜的是不能显示中文,在我调试的时候它帮我不少的忙。

一、主要技术参数:显示容量:16X2个字符(两行,每行16个字符)模块工作电源:4.5~5.5V模块工作电流:2.0mA (5.0V)模块最佳工作电源:5.0V字符尺寸:2.95X4.35(WXH)mm二、IO引脚功能LCD1602A模块引脚功能编号符号引脚说明编号符号引脚说明1VSS电源地(模块供电)9D2Data I/O2VDD电源正极(模块供电) 10D3Data I/OVL接在滑动电阻可以调节对比度 11D4Data I/O4RS数据/命令选择端 (H/L)12D5Data I/O5R/W读/写选择端 (H/L)13D6Data I/O6E使能信号(通知芯片读取数据) 14Data I/O7D0Data I/O15BLA模块背光灯正极8D1Data I/O16BLK模块背光灯负极三、基本操作时序:读状态:输入:RS=L、RW=H、E=H模块输出:状态字=D0~D7写指令:输入:RS=L、RW=L、D0~D7=指令码、E=H 模块输出:无读数据:输入:RS=H、RW=H、E=H模块输出:数据=D0~D7写数据:输入:RS=H、RW=L、D0~D7=数据、E=H 模块输出:无状态字说明(因为单片机的速度可能快过1602,所以需要判断当1602是否在忙,或者延时。

)STA7STA6STA5STA4STA3STA2STA1STA0D7D6D5D4D3D2D1D0STA0-6:当前数据地址指针的数值STA7主要用来检查1602模块的是否可以写入或读出操作 1:禁止 0:允许四、指令说明(这指令是用来设置1602显示的方式)显示模式设置指令码功能111设置16X2显示,5X7点阵,8位数据接口显示开/关及光标设置指令码功能1DCBD=1 开显示D=0 关显示C=1 显示光标C=0 不显示光标B=1 光标闪烁B=0 光标不闪烁1NSN=1 当读或写一个字符后地址指针加1,且光标加1(即从左往右显示)N=0 当读或写一个字符后地址指针减1,且光标减1(即从右往左显示)S=1 当写一个字符,中国男排显示左移(N=1)五、时序图写操作(写指令、写数据)时序图时序参数写指令时序,RS拉低表示写指令,R/W拉低表示写操作,给DB0-DB7赋值指令数据并保持>;40ns时间,将E 拉高表示数据已经准备好保持>;150ns让1602读取,将E 拉低,并延时>;10ns一次写操作完毕。

基于MCS-51单片机的液晶1602显示设计

基于MCS-51单片机的液晶1602显示设计


J J _ 一 十 卜
) c
wr i t e
_
a d d ( d ) ;
j }
v o i d LCD 1 6 0 2
_
垃 ; P 1 7
P o 6
71 4 .
I N Tl
1 I o . 2
1 6 0 2 , 实 现 显 示 字符 的效 果 。 }
wh i l e ( x 一 一 )
e =O :
vo i d L CD

d i r v e ( b i t x , u c h a r d ]

i f ( x = = 1 )
2 、 硬件组成 液晶1 6 0 2 显示系统实际是由5 1 单片机最 小系统 、 液 晶1 6 0 2 构成 , 如下 图
P 0 1 3 p !


. P , P l
. .. . . .

7 8 l

P1 5 Pt 6 R硒 T D 订
;8 0 5 1螂 P 0 2 = = i 鐾 } j …
P o 4 P 0 5 P0 7 P 2 O P 2 1
1 所示 。


wr i t e
_
d a t a ( d ) ;

p 1 0
P1 2


V C C j 盐 ) ” 睫晶l 鳓 L l
l 4 0


e l s e
- . . . ‘ 一 P I 1
; 4
P o o { 噩p o } _ _
_

e = 0 : L CD1 6 0 2

51单片机控制LCD液晶1602源代码

51单片机控制LCD液晶1602源代码
void Lcd1602_Clear_Line(unsigned char line);
void Lcd1602_Clear_All(void);
void Lcd1602_Demo1(void);
void Lcd1602_Demo2(void);
void Delay_ms(unsigned char second);
if(++row==3)
return;
else
{
switch(row)//这种结构保持以后升级到多行显示液晶
_nop_();
LCD_EN=HIGH ;
_nop_();
LCD_EN=LOW;
LCD_DATA_PORT=0xFF; //prevent port is 0.
}
//===========================
case 2:Lcd1602_Write_Command(0x80+0x40);break; //将数据地址指针定位到第二行
default: break;
}
}
//==================================================
{
while(1)
{
Lcd1602_Demo1();
// Lcd1602_Demo2();
}
}
void Lcd1602_Ini(void)
{
Delay_ms(20);
Lcd1602_Write_Command_Nocheck(0x38);//设定LCD为16*2显示,5*7点阵,8位数据接口
{
Lcd1602_Write_String(row,column," ");

基于51单片机的PS2键盘1602显示24c02存储的密码锁设计(附程序)

基于51单片机的PS2键盘1602显示24c02存储的密码锁设计(附程序)

基于51单片机的PS2键盘密码锁设计摘要:AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash 存储器,被广泛应用于各个领域。

LCD1602液晶显示器以其微功耗、体积小、超薄轻巧等诸多优点而备受人们喜爱。

本作品是以AT89S52作为主控芯片,LCD1602作为显示器,以PS2键盘作为输入设备的密码锁。

PS2键盘与AT89S52通过PS2接口协议进行通信,可以完成密码设置,密码重置及显示等诸多功能。

本作品还使用了24C02存储器来实现密码锁的掉电保存功能。

关键词:AT89S52;LCD1602;24C02;PS2键盘Abstract:AT89S52 is a low power,high performance CMOS 8 bit microcontroller, with 8K flash memory, is widely applied in various fields. LCD1602 liquid crystalDisplay with its low power consumption, small size, thin lightweight and many other advantages, is liked by people.This work is based on the AT89S52 as the main chip, the LCD1602 as display, PS2 keyboard as an input device of the cipher lock. PS2 keyboard and AT89S52 through PS2 interface protocolFor communication, can complete password, password reset and display and other functions. This work we also used the 24C02 memory to realize the password lock the power-down save function.Keywork: A T89C52; LCD1602; 24C02;PS/2 keyboard1 实验目的及意义在单片机系统中,经常使用的键盘都是专用键盘.此类键盘为单独设计制作的,成本高、使用硬件连接线多,且可靠性不高,这一状况在那些要求键盘按键较多的应用系统中更为突出.与此相比,在PC系统中广泛使用PS/2键盘具有价格低、通用可靠,且使用连接线少(仅使用2根信号线)的特点,并可满足多种系统的要求.因此在单片机系统中应用PS/2键盘是一种很好的选择.对于单片机初学者的我而言,AT89S52简单易学,非常适合我学习。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章设计要求及系统组成一、基本操作时序:读状态:输入:RS=L,RW=H,E=H 输出:D0~D7=状态字写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:无读数据:输入:RS=H,RW=H,E= 高脉冲输出:D0~D7数据写数据:输入:RS=H,RW=L。

D0~D7=数据,E=高脉冲输出:无二、、、状态字说明:STA7 D7\ STA6 D6\ STA5 D5 \ STA4 D4 \STA3 D3 \ STA2 D2\\ STA1 D1STA0-6:当前数据地址指针的数值STA7:读写操作使能 1表示禁止,0表示允许对控制器每次进行读写操作之前,都必须进行读写检测,确保STA7为0;但是我们可以进行延时进行实现。

RAM地址映射: LCD 16字*2行00 01 02 03 04 05 06 07 08 08 09 0A 0B 0C 0D 0E 0F (27)40 41 42 4F 50 (67)指令说明:1.初始化设置 1.显示模式设置指令码:00111000(0x38)功能:设置16*2显示,5*7点阵,8位数据接口必须开显示 2.显示开、关及光标设置指令码:00001DCB,功能:D=1 开显示;D=0 关显示;C=1显示光标;B=1 光标闪烁;B=0 光标不显示 000001NS:功能:N=1当读或写一个字符后地址指针加1,且光标加1;N=0相应的减1;S=1当写一个字符,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果。

S=0 当写一个字符,正屏显示不移动。

数据控制:控制器内部设有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM4.2.1 数据指针设置:指令码:80H+地址码(0-27H,第二行开始:40H-67H) 4..2.2 读数据,写数据其它设置:01H:显示清屏:1.数据指令清零 2 所有显示清零 02H:显示回车:1.数据清零如何进行连接:实际操作中,液晶接到,第一管脚是D,第二管脚是VCC,15和16是背光,D0-D7是数据口,接到单片机的P0口,P0口接了两个锁存器,液晶,D/A,具有高阻状态的都可以随便接,没有影响,,第六管脚是LCDEN相当于 E,使能信号,它接P3^4,R/W接地,表示低电平,因为我们只进行写操作,RS接2实验板上的P3^5;只需这两端口便足以控制液晶,2和3是偏压信号,一端接地,接口信号说明:编号:1 VSS(符号表示)电源地(引脚说明)2VDD 电源正极3VL液晶显示偏压信号4RS数据/命令选择端(H/L)5R/W 读写选择端(H/L)6E使能信号7D0 Data 1/0 8D1 Data 1/0 9 D2 Data 1/0 10 D3 Data 1/0 11D4 Data 1/0 12D5 Data 1/0 13D6 Data 1/0 14D7 Data 1/0 15BLK背光源正极16 BLK背光源负极实际操作:::先写光标程序;写两个子程序,一个写数据,一个写指令:先进性两个宏定义,再位申明LCDEN与RS;为了电量充足。

初始化时关断数码管,定义数码管的两个锁存端,dula与wela,P2^6与P2^7,先写主函数(调用初始化函数,在调用数据子函数(’1’),从右向左滚动进来Code:),再写初始化函数(先关断数码管,在进行显示模式设置,显示开、关及光标设置,设计数据),接着写命令子函数writer——com(开始操作时序,写指令,P0口送的指令码,接着需要延时一段时间让E 变成高电平,在持续一段时间,E再变低),它由所用的指令直接调用即可。

再写一个写数据的子函数writer_data (lcdrs=1),需用延时子函数。

Uchar code table[]={“” }注意:为了使得黑托不出现,应该屏幕全部清零writer_com(0x01)。

???????xdata :外部地址空间1.1 设计要求利用单片机最小系统设计一个电子时钟,显示方式为**:**:**,并且可以任意修改时间。

1.2系统组成原理框图如图1.1图1.1系统原理框图第二章系统设计方案2.1 系统设计方案电路原理图如图2.1所示图2.1 电路原理图2.2 电路模块组成及其工作原理2.2.1 时钟电路系统时钟源由内部时钟方式产生,时钟电路由12MH晶振和两个30PF瓷片电容组成,构成自激振荡,形成振荡源提供给单片机。

电容可在5PF到30PF 之间选择,电容的大小对振荡频率有微小影响,可起频率微调作用。

时钟电路如图2.2所示图2.2 时钟电路2.2.2 复位电路单片机复位有上电复位和手动复位两种方式,上电复位是接通电源后利用RC充电来实现复位。

手动复位是通过人为干预,强制系统复位。

复位电路如图2.3所示,可以实现上电复位和手动复位功能。

图2.3 复位电路2.2.3 按键电路在单片机的P1.0、P1.1、P1.2三个I/O口接三个简易按键,通过不断检测按键状态,识别按键的按下顺序和次数即可实现时间的任意修改。

按键电路如图2.4所示。

2.2.4 1602液晶显示模块电路本设计是通过对1602液晶显示屏的控制来实现时间的显示。

1602液晶显示模块的驱动如下所述:图2.4 1602液晶屏实物图1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线第15~16脚:空脚1602显示屏的时序图如图2.5。

图2.5 1602时序图1602液晶显示屏与单片机的连线图如图2.6所示。

图2.6 1602与单片机连线图第三章程序设计及其调试3.1 程序设计程序设计如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^0;sbit lcswr=P2^1;sbit lcden=P2^2;sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^2;sbit rd=P3^7;uchar count,s1num;char miao,shi,fen;uchar code table[]=" 2011-6-14 TUN";uchar code table1[]=" 00:00:00";void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;lcswr=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){rd=0;if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0)delay(5);if(s3==0){while(!s3);if(s1num==1)miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}void main(){init();while(1){keyscan();}}void timer0() interrupt 1 {TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}3.2 实验调试实验过程中出现了很多的问题,经过反复的程序修改和调试,最终完成了本设计的要求,实现了电子时钟功能。

相关文档
最新文档