LCD12864液晶显示电子钟设计

合集下载

12864时钟显示程序

12864时钟显示程序

12864时钟显示程序/*用LCD12864液晶显示器进行设置时钟,有独立键盘调节时间程序*/个人觉得在学习编写LCD12864显示程序时可以多结合1602一起来学习,很多东西是相通的,我这个程序就是,还有对于初学者来说,最好是理解程序每个模块的作用,掌握后对于以后的编程学习进度会更快,再补充说明一句,对于显示模块程序,着重需要对地址些函数部分理解,废话不多说,看程序吧:#include#define uchar unsigned char#define uint unsigned intsbit RS= P2^6;//数据/命令选择端(H/L)sbit RW= P2^5;//读写/选择端(H/L)sbit EP= P2^7;//使能信号sbit K1=P3^0; //开关定义sbit K2=P3^1;sbit K3=P3^2;uchar num,t;uchar K1num;char s,f,m; //可取负数uchar code table[]= " 2013-8-12 MON ";//日期显示uchar code table1[]=" 00: 00: 00 AM "; //时间显示uchar code table2[]="长沙今日多云"; //天气显示uchar code table3[]=" 南风39-30℃"; //气温显示void init1(); //中断子函数void delay(uint k) //延时函数{uint i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}void write(uchar com) //命令指令函数{ //根据时序图来设置RS=0; //选择指令寄存器RW=0; //选择写P0=com; //将8位数据通过P0口传给12864delay(5); //延时一会,让12864准备接收数据EP=1; //使能线电平变化,数据送入1602的八位数据口delay(5);EP=0;}void read(uchar date) //写入指令函数{ //根据时序图来设置RS=1; //选择寄存器RW=0; //选择写P0=date; //将8位数据通过P0口传给12864delay(5);EP=1;delay(5);EP=0;}void init() //初始化函数{RS=0;EP=0;RW=0;write(0x38); //显示设置模式write(0x0c); //显示开关控制write(0x06); //光标设置write(0x01); //清屏设置write(0x80); //数据地址初始位for(num=0;num<16;num++) //查table表数据{read(table[num]); //读取表中内容delay(20);}write(0x90);//重新设置数据指针for(num=0;num<16;num++) //查table2表数据{read(table2[num]); //读取表中内容delay(20);}write(0x98);//重新设置数据指针for(num=0;num<16;num++) //查table3表数据{read(table3[num]); //读取表中内容delay(20);}write(0x88);//重新设置数据指针for(num=0;num<16;num++){read(table1[num]); //读取table1表中内容delay(20);}}void write_sfm(uchar add,uchar date) // 时分秒函数设置{ uchar shi ,ge;shi=date/10; // 取商ge=date%10; //取余write(0x83+add); //设置add位地置read(0x30+shi); //设置十位地置read(0x30+ge); //设置个位地址}void key() //独立开关控制{if(K1==0){delay(5);if(K1==0){K1num++;while(!K1); //判断按键是否按下if(K1num==1) //按一下调节秒{TR0=0; //关定时器write(0x83+10); //找到秒位置write(0x0f); //光标闪烁}}if(K1num==2){write(0x83+8);//再按一下调节分地址}if(K1num==3) //第三次按下调节时{write(0x83+6);}if(K1num==4) //按四次回到正常计时{K1num=0;write(0x0c);//光标不闪TR0=1;}}if(K1num!=0) //有按下{if(K2==0) //K2开关控制时分秒加{delay(5);if(K2==0) //消抖{while(!K2);//松手if(K1num==1) //秒调节{m++;if(m==60)m=0;write_sfm(10,m);write(0x83+10);//秒钟地址}if(K1num==2) //分钟调节{f++;if(f==60)f=0;write_sfm(8,f);write(0x83+8); //分钟地址}if(K1num==3) //小时调节{s++;if(s==23)s=0;write_sfm(6,s);write(0x83+6);//时地址}}}if(K3==0){delay(5);if(K3==0){while(!K3);if(K1num==1) //K3控制时分秒减{m--;if(m==-1)m=59;write_sfm(10,m);write(0x83+10);}if(K1num==2)f--;if(f==-1)f=59;write_sfm(8,f);write(0x83+8);}if(K1num==3){s--;if(s==-1)m=23;write_sfm(6,s);write(0x83+6);}}}}}void main() //主函数{init(); //调用子函数init1(); //调用定时子函数while(1){key();}}void init1() //定时子函数{TMOD=0x01;EA=1; //开总中断ET0=1; //开定时器中断TR0=1;TH0=(65536-50000)/256; //设置时间50ms TL0=(65536-50000)%256;}void e() interrupt 1 //定时器T0方式1中断{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;t++;if(t==18) //一秒钟定时{m++;if(m==60) //秒设置{m=0;f++;if(f==60) //分设置{f=0;s++;if(s==24) //小时设置{s=0;}write_sfm(6,s); //时位数据读取}write_sfm(8,f); //分位数据读取}write_sfm(10,m); //秒位数据读取}}。

12864LCD电子钟说明文档

12864LCD电子钟说明文档

void lcm_w_test(bit start, unsigned char ddata) {
unsigned char start_data,Hdata,Ldata;
if(start==0)
start_data=0xf8; //0:写指令
else
start_data=0xfa; //1:写数据
while(*str != '\0'){ lcm_w_test(1,*str++);
} *str = 0; } /******************************************************************************/
2. 仿制说明
Doyoung 电子技术 将无条件共享原理图、说明文档、HEX 文件供有兴趣的朋友仿制使用。如您 成功仿制本设计,至信 @,即可获得本制作品的源代码,用于学习或升级 升级开发。如果您成功升级了一次程序将可以获得 Doyoung现在制作品的所有源代码包(不包括 日后制作品)。目的只有一个,力图创造独立资料。
按键 3:下一项 按键 4:减 1
按键 1:退出 按键 2:加 1
[Esc] 2007 [Next] 2 月 14 日 星期五
23:34.10 23.5℃ [+] 调整日期 [-]
按键 3:下一项 按键 4:减 1
按键 1:退出 按键 2:加 1
[Esc] 2007 [Next] 2 月 14 日 星期五
[Esc] 2007 [Next] 2 月 14 日 星期五
23:34.10 23.5℃ [+] 调整分钟 [-]
Байду номын сангаас
按键 3:下一项 按键 4:减 1

毕业设计—基于单片机的12864时钟显示

毕业设计—基于单片机的12864时钟显示

学士学位毕业论文(设计)题目:基于单片机的12864时钟显示摘要电子时钟是一种非常广泛日常计时工具,给人们的带来了很大的方便,在社会上越来越流行。

它可以对年、月、日、星期、时、分、秒进行计时,采用直观的数字显示,可以同时显示年月日时分秒等信息,还有时间校准等功能。

该电子时钟主要采用STC89C52单片机作为主控核心,用DS1302时钟芯片作为时钟、液晶12864显示屏显示。

STC89C52单片机是由深圳宏晶科技公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的12864液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。

此外,该电子时钟还具有时间校准等功能。

关键词:STC89C51单片机,DS1302时钟芯片,液晶12864AbstractElectronic clock is a very extensive daily timing tool, to the people has brought great convenience, more and more popular in the community. It can be the year, month, date, day, hour, minute, second for a time, using intuitive digital display, can display information such as year, month, day, hour, and time alignment functions. The electronic clock is used mainly as a master STC89C52 microcontroller core, with theDS1302 clock chip as a clock, LCD display12864. STC89C52 SCM is a Shenzhen Hong Crystal Technology has introduced, power consumption, voltage can be selected 4 ~ 6V voltage power supply; DS1302 clock chip is American DALLAS company launched with a fine current charging low-power real-time clock chip, it can year, month, date, day, hour, minute, second for a time, also has a leap year compensation and other functions, DS1302 and long life, small error; 12864 LCD digital display isused to display that can display year, month, date, day, hour, minute, second and so on. In addition, the electronic clock also has a time calibration function.Key Words:STC89C51 microcontroller, DS1302 clock chip, LCD 12864目录1绪论 (3)1.1时钟发展史 (3)1.2 目前的研究现状 (4)1.3研究目的及意义 (4)2 总体方案设计 (5)2.1 方案的选择 (5)2.1.1设计要求 (5)2.1.2方案的选择 (5)2.2总体方案组成框图 (6)3系统硬件设计 (6)3. 1主芯片模块 (6)3.1.1 中断系统 (8)3.1.2常用寄存器 (8)3.2晶振和复位电路 (10)3.2.1晶振电路 (10)3.2.2复位电路 (11)3.3 DS1302时钟芯片电路 (11)3.3.1 DS1302引脚图 (11)3.3.2 DS1302寄存器 (12)3.3.3 DS1302外围电路 (13)3.4 LCD12864显示模块 (13)3.4.1 LCD12864引脚功能 (13)3.4.2 LCD12864指令说明 (14)3.4.3 LCD12864电路接线 (15)3.5 红外遥控模块 (16)4 系统软件设计 (17)4.1 主程序设计 (17)4.2 LCD12864驱动程序 (19)4.3 DS1302驱动程序 (21)4.4 红外遥控程序 (24)5 调试结果 (25)5.1 正常显示日期时间画面 (26)5.2 进入调整时间日期画面 (26)5.3图片显示画面 (26)6总结 (27)致谢 (28)参考文献 (29)附录一 (31)附录二 (32)1绪论1.1时钟发展史很早以前,人类主要是利用天文现象和流动物质的连续运动来计时。

用PG12864LCD设计的指针式电子钟

用PG12864LCD设计的指针式电子钟

毕业设计题目用PG12864LCD设计的指针式电子钟物理与电信工程学院所在院(系) 专业班级电子信息科学与技术指导教师完成地点目录引言 .................................................. 1 1 1 设计任务及方案论证设计任务及方案论证 ..................................1 1.1设计任务与要求设计任务与要求 ..................................... ..................................... 1 1 1.2 1.2 总体方案论证与设计总体方案论证与设计总体方案论证与设计 ................................. (11)2系统硬件设置 (1)2.1 STC89C51单片机简介单片机简介 ................................ ................................ 1 2.2显示模块设计显示模块设计 ....................................... ....................................... 4 42.2.1 PG12864LCD 的特性介绍的特性介绍 ......................... ......................... 4 2.2.2 LCD12864引脚介绍引脚介绍 ............................. ............................. 4 2.2.3 12864内部功能器件及相关功能内部功能器件及相关功能 .................. .................. 5 2.2.4 12864液晶与单片机接口电路液晶与单片机接口电路 .................... .................... 7 2.3设置模块设置模块 ........................................... ........................................... 8 8 2.4 2.4 振荡电路振荡电路振荡电路 ........................................... .......................................... 9 92.5 2.5 复位电路复位电路复位电路 .......................................... (99)3系统软件设计 (9)3.1总体软件设计总体软件设计 ....................................... ....................................... 9 9 3.2 3.2 时钟函数模块时钟函数模块时钟函数模块 ...................................... ...................................... 10 10 3.3 3.3 指针时钟设计指针时钟设计指针时钟设计 ...................................... ...................................... 11 113.3.1 实现功能实现功能 ..................................... 11 113.3.2实现算法实现算法 ..................................... ..................................... 11 11 3.3.3 3.3.3 函数设计函数设计函数设计 ..................................... ..................................... 13 13 3.4 3.4 显示函数模块显示函数模块显示函数模块 ...................................... ...................................... 15 153.4.1实现功能实现功能 ..................................... ..................................... 17 17 3.4.2 3.4.2 函数设计函数设计函数设计 ..................................... ..................................... 17 17 3.5.1 3.5.1 功能功能功能 ......................................... ........................................ 18 18 3.5.2 3.5.2 函数函数函数 ......................................... ........................................ 18 18 3.6主函数模块主函数模块 ........................................ . (1919)4.4.设计结果设计结果........................................... 19 5.5.使用方法使用方法........................................... 20 6.6.设计进度设计进度........................................... 20 7.7.教学单位可以提供的条件教学单位可以提供的条件 ............................. 20 致谢 ................................................. 21 参考文献 (21)用PG12864LCD设计的指针式电子钟[摘要]本设计采用的是STC89C51单片机,通过单片机内部定时器定时实现时钟定时计数功能,并以模拟时钟的形式显示在LCD_12864上。

LCD12864显示实时时钟例程可运行

LCD12864显示实时时钟例程可运行

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

下面是一段12864液晶显示实时时钟的程序:/****************************************************************************** *********时间:2012.11.30晶振:11.0592MHz芯片:STC89C52RC功能描述:在12864上显示年、月、日、星期、时、分和秒等时间信息******************************************************************************* ********/#include<reg52.h>#define uchar unsigned charsbit CLK=P1^4; //DS1302引脚定义sbit IO=P1^5;sbit CE=P1^6;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit RS=P2^4; //12864引脚定义数据口为P0sbit RW=P2^5;sbit EN=P2^6;sbit PSB=P2^1;sbit RET=P2^3;void Input_1byte(uchar TD) //DS1302输入一字节数据{uchar i;ACC=TD;for(i=8;i>0;i--){IO=ACC0;CLK=1;CLK=0;ACC=ACC>>1;}}uchar Output_1byte(void) //DS1302输出一字节数据{uchar i;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;CLK=1;CLK=0;}return(ACC);}void Write_DS1302(uchar add,uchar dat)//向DS1302写{CE=0;CLK=0;CE=1;Input_1byte(add);Input_1byte(dat);CE=0;}uchar Read_DS1302(uchar add) //从DS1302读{uchar inf; //信息临时存储变量CE=0;CLK=0;CE=1;Input_1byte(add);inf=Output_1byte();CE=0;return(inf);}/**********************DS1302初始化*****************************/void init_1302(){if(Read_DS1302(0xd1)==0x55) //判断内存单元的内容,是否进行初始化 {return;}else{Write_DS1302(0x8e,0x00); //关闭写保护Write_DS1302(0x90,0x00); //电池充电设置Write_DS1302(0x80,0x00); //秒Write_DS1302(0x82,0x54); //分Write_DS1302(0x84,0x20); //时Write_DS1302(0x86,0x30); //日Write_DS1302(0x88,0x11); //月Write_DS1302(0x8a,0x05); //星期Write_DS1302(0x8c,0x12); //年Write_DS1302(0xd0,0x55); //写RAMWrite_DS1302(0x8e,0x80); //打开写保护}}/**********************延时函数*****************************/ void DelayUs2x(unsigned char t){while(--t);}void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/**********************12864判忙*****************************/ void check_busy(){RS=0;RW=1;EN=1;while((P0&0x80)==0x80);EN=0;}/**********************12864写指令*****************************/ void write_com(uchar com){check_busy();RS=0;RW=0;EN=1;P0=com;DelayUs2x(250);EN=0;DelayUs2x(250);}/**********************12864写数据*****************************/void write_data(uchar dat){check_busy();RS=1;RW=0;EN=1;P0=dat;DelayUs2x(250);EN=0;DelayUs2x(250);}/**********************12864初始化函数*****************************/void init(){DelayMs(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式DelayMs(1); //延时RET=0; //复位DelayMs(1); //延时RET=1; //复位置高DelayMs(200);write_com(0x30); //选择基本指令集DelayUs2x(250); //延时大于100uswrite_com(0x30); //选择8bit数据流DelayUs2x(200); //延时大于37uswrite_com(0x0c); //开显示(无游标、不反白)DelayUs2x(250); //延时大于100uswrite_com(0x01); //清除显示,并且设定地址指针为00HDelayMs(200); //延时大于10mswrite_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动DelayUs2x(250); //延时大于100us}/**********************清屏*****************************/void clrscreen(){write_com(0x01);DelayMs(15);}/*********************************************************主函数********************************************************/void main(){uchar sec,sec1,sec2;uchar min,min1,min2;uchar hour,hour1,hour2;uchar date,date1,date2;uchar mon,mon1,mon2;uchar day;uchar year,year1,year2;uchar table1[]="年月日时分秒星期温度摄氏"; //长度24uchar table2[]={0XD2,0XBB, 0XB6,0XFE, 0XC8,0XFD, 0XCB,0XC4, 0XCE,0XE5, 0XCE,0XF9, 0XC8,0XD5}; //长度14 uchar table3[]="0123456789"; //长度10init(); //液晶初始化clrscreen();DelayMs(200);init_1302(); //1302初始化只初始化一下就可以需要下载两次DelayMs(50);write_com(0x80); //显示20write_data('2');write_data('0');write_com(0x82); //显示年write_data(table1[0]);write_data(table1[1]);write_com(0x84); //显示月write_data(table1[2]);write_data(table1[3]);write_com(0x86); //显示日write_data(table1[4]);write_data(table1[5]);write_com(0x91); //显示时write_data(table1[6]);write_data(table1[7]);write_com(0x93); //显示分write_data(table1[8]);write_data(table1[9]);write_com(0x95); //显示秒write_data(table1[10]);write_data(table1[11]);write_com(0x88); //显示星期write_data(table1[12]);write_data(table1[13]);write_data(table1[14]);write_data(table1[15]);while(1){sec=Read_DS1302(0x81); ////读秒sec1=sec&0x0f; //个位sec2=sec>>4; //十位min=Read_DS1302(0x83); ////读分min1=min&0x0f; //个位min2=min>>4; //十位hour=Read_DS1302(0x85); ////读时hour1=hour&0x0f; //个位hour2=hour>>4; //十位date=Read_DS1302(0x87); ////读日date1=date&0x0f; //个位date2=date>>4; //十位mon=Read_DS1302(0x89); ////读月mon1=mon&0x0f; //个位mon2=mon>>4; //十位year=Read_DS1302(0x8d); ////读年year1=year&0x0f; //个位year2=year>>4; //十位day=Read_DS1302(0x8b); ////读星期write_com(0x94); //送显示内容write_data(table3[sec2]); //秒write_data(table3[sec1]);write_com(0x92);write_data(table3[min2]); //分write_data(table3[min1]);write_com(0x90);write_data(table3[hour2]); //时write_data(table3[hour1]);write_com(0x85);write_data(table3[date2]); //日write_data(table3[date1]);write_com(0x83);write_data(table3[mon2]); //月write_data(table3[mon1]);write_com(0x81);write_data(table3[year2]); //年write_data(table3[year1]);write_com(0x8a);write_data(table2[2*day-2]); //星期write_data(table2[2*day-1]);}}。

基于12864的指针式时钟设计

基于12864的指针式时钟设计

基于12864的指针式时钟设计【摘要】LCD12864是基于点阵式的,像素为128×64的液晶显示屏,基本满足指针式时钟的显示要求。

本系统采用时钟芯片DS1302、单片机、12864设计一款可以切换数字式和指针式显示的电子时钟。

【关键词】指针式时钟;LCD12864;DS1302The Design of a Point Clock Based on 12864MENGMing-ming(Computer Science and Technology School, China University of Mining and TechnologyJiangSuXuzhou221000)【Abstract】The 12864 is a liquid crystal display of 128×64 dots, which can be used to display a point clock. In this paper, the design takes a sort of clock chip named DS1302 and 12864 to make a clock that can switch between point display and digital display.【Key words】Key Words: Point Clock; LCD12864;DS1302采用单片机与时钟芯片DS1302设计电子时钟时,通常是数字显示,这是由于选用数码管和1602等器件的显示能力有限。

而12864是基于点阵式的液晶屏,其像素点为128×64,基本达到指针式时钟显示要求。

本系统在时钟表盘、指针绘制及时钟走时和时间的准确性方面都基本实现要求。

虽然12864自身像素较低,使其显示指针式时钟效果远低于大屏幕LED,但两者所基于的原理相同,对于点阵设计的学习有较大帮助。

学习笔记-fpga设计电子时钟(12864显示)

学习笔记-fpga设计电子时钟(12864显示)

fpga设计电子时钟(12864显示)设计心得:1,进行分块设计,类似调用函数,脉冲使能2,充分了解fpga的并行特性(c程序的串行特性,不能并行处理,线性:只有完成了当前任务,才能进行下一个任务)设计问题:1,似乎读有问题,在char_LR=1时,写的数据为汉字(程序中时间没有更改,主要为了调试看波形)实际板子验证时,将LCD_clk模块中的分频调为50到100kHz左右整体架构功能模块液晶初始化时序parameter Idle =8'b0000_0001,Basic_com =8'b0000_0010, //basic instruction:0x30Disp_set =8'b0000_0100, //set show curse blingDDRAM_clear =8'b0000_1000, //colunm address XWait_clear =8'b0001_0000,Point_set =8'b0010_0000,Show_on =8'b0100_0000,Stop=8'b1000_0000;写字符的时序由于字符属于半宽字形,且DDRAM形式下,每行只有8个地址,而字符可以写16个,因此用下面三个来表示写的地址:i nput [1:0] Y, //row 0-3i nput [2:0] X, //clunm 0-7i nput LR, //0/1因此当LR=0时,直接写地址,然后写一个字符编码即可LR=1时,先写地址,读出高位数据,然后写入两个字节(读出的数据,要写的数据)parameter Idle =8'b0000_0001,DDRAM =8'b0000_0010, //drawing modeW_addr =8'b0000_0100, //row address YDummy =8'b0000_1000, // not really readingR_data =8'b0001_0000, //reading high byte dataW0_data =8'b0010_0000,W1_data =8'b0100_0000,Stop =8'b1000_0000;# t1: 0 t2: 2305, T: 10,n_init: 38 # t1: 2305 t2: 2665, T: 10,n_char: 6 # t1: 2665 t2: 3265, T: 10,n_char: 10完成了上述工作,就可以设计一个简单的电子时钟,其要求如下:在屏幕上显示时间00:00:00要动态走(主要就是控制脉冲信号的产生)设计思路:100:00:0023LCD更新数据显示00:00:0100:01:591代码/*sign.v//creat the control signclock h:m:s*/module sign(//module LED(input lcd_clk, //100kHzinput sys_rst,output reg lcd_char_en,output reg lcd_init_en,output reg [7:0]char_data,output reg [2:0]char_X,output reg [1:0]char_Y,output reg char_LR);parameter T_w_char = 5,T_lcd_init = 40;reg [47:0] time_out;/* 1s */reg [16:0] cnt_s;reg [5:0] cnt0_clk;reg [3:0] cnt1_clk;reg [2:0] cnt_char;reg [5:0] sec,min;reg [4:0] hour;reg flag_s,flag_init;always @ (posedge lcd_clk or negedge sys_rst) begin //100kHz if(!sys_rst)begincnt_s <=0;cnt0_clk<=0;cnt1_clk<=0;cnt_char<=0;sec <=0;min <=0;hour <=0;flag_s <=0;flag_init <=1'b1;char_Y <= 2'b10;endelsebeginif(cnt_s == (40-1))begincnt_s <=0;flag_s<=1'b1;data_deal; //taskendelsecnt_s <=cnt_s+1'b1;if(flag_init)begincnt0_clk <= cnt0_clk +1'b1;case(cnt0_clk)1 : begin lcd_init_en <=1'b0; end2 : begin lcd_init_en <=1'b1; end3 : begin lcd_init_en <=1'b1; end4 : begin lcd_init_en <=1'b0; endT_lcd_init: beginflag_init <=0;cnt0_clk <=0;enddefault: lcd_init_en <=0;endcaseendelseif(flag_s)begincnt1_clk <= cnt1_clk +1'b1;case(cnt1_clk)1 : begin lcd_char_en <=1'b0; e nd2 : begin lcd_char_en <=1'b1; e nd3 : begin lcd_char_en <=1'b1; e nd4 : begin lcd_char_en <=1'b0; e ndT_w_char: beginif(cnt_char == 3'b111)begin cnt_char<=0; flag_s <=0; endelsecnt_char <=cnt_char+1'b1;cnt1_clk <=0;enddefault: lcd_char_en <=0;endcasecase(cnt_char)//2 3 4 50 : begin char_X <=3'b000; char_LR <=0; char_data <=time_out[47:40]; end //x0:00:001 : begin char_X <=3'b001; char_LR <=0; char_data <=time_out[39:32]; end //0x:00:002 : begin char_X <=3'b010; char_LR <=0; char_data <=8'h3a; end //: ascii 0583 : begin char_X <=3'b011; char_LR <=0; char_data <=time_out[31:24]; end //00:x0:004 : begin char_X <=3'b100; char_LR <=0; char_data <=time_out[23:16]; end //00:0x:005 : begin char_X <=3'b101; char_LR <=0; char_data <=8'h3a; end //: ascii 0586 : begin char_X <=3'b110; char_LR <=0; char_data <=time_out[15: 8]; end//00:00:x07 : begin char_X <=3'b111; char_LR <=0; char_data <=time_out[7 : 0]; endendcaseendendendtask data_deal;beginif(sec == 59)if(min ==59)if(hour == 23)begin hour<=0;min <=0;sec <=0; endelsebegin hour<=hour + 1'b1; min <=0; sec<=0; endelsebegin min <= min+1'b1; sec <=0; endelsesec <= sec +1'b1;time_out[47:40] <= 8'h30+(hour/10);time_out[39:32] <= 8'h30+(hour%10);time_out[31:24] <= 8'h30+(min /10);time_out[23:16] <= 8'h30+(min %10);time_out[15: 8] <= 8'h30+(sec /10);time_out[ 7: 0] <= 8'h30+(sec %10);endendtaskendmodule2代码module LCD_init(//module LED(input lcd_clk,input sys_clk,input lcd_en, //1 is activedoutput reg LCD_RS,output reg LCD_RW,output reg LCD_EN,inout [7:0] LCD_DATA,output reg ACK);reg flag;reg [7:0] lcd_data;reg [7:0] State;reg link_rs;reg link_data;parameter Idle =8'b0000_0001,Basic_com =8'b0000_0010, //basic instruction:0x30Disp_set =8'b0000_0100, //set show curse blingDDRAM_clear =8'b0000_1000, //colunm address XWait_clear =8'b0001_0000,Point_set =8'b0010_0000,Show_on =8'b0100_0000,Stop =8'b1000_0000;reg [9:0] cnt; //16*2*32=2^10 byte(8bits)/* LCD_RW LCD_DATA*/assign LCD_DATA = link_data ? lcd_data: 8'hzz;/* LCD_RW LCD_EN */always @ (posedge sys_clk) beginif(flag)beginLCD_RW =0;LCD_EN = lcd_clk;endelsebeginLCD_RW =1'bz;LCD_EN =1'bz;endend/* LCD_RS */always @ (posedge lcd_clk) beginif(link_rs)LCD_RS <=1'b0;elseLCD_RS <=1'bz;end/*-Main state transter-*/always @ (posedge lcd_clk) begincase (State)Idle : beginif(lcd_en)begin link_rs=1; State <= Basic_com; endelseState <= Idle;ACK =0;flag <=1'b0;lcd_data <= 8'hzz;cnt <= 0;endBasic_com : beginflag <=1'b1;link_data =1'b1;cnt <= cnt +1'b1;if(cnt == 1)State <= Disp_set;elseState <= Basic_com;lcd_data <= 8'h30;endDisp_set : beginState <= DDRAM_clear;lcd_data <= 8'h0c; //show curse blink is offendDDRAM_clear : beginState <= Wait_clear;lcd_data <= 8'h01;endWait_clear : begincnt <=cnt +1'b1;link_data = 1'b0;flag <=0;lcd_data <= 8'hzz;if(cnt == 30)State <= Point_set;elseState <= Wait_clear;endPoint_set : beginflag <=1'b1;link_data =1'b1;State <= Show_on;lcd_data <= 8'h06; //point +1 automatically,screen move off endShow_on : beginState <= Stop;lcd_data <= 8'h0c;endStop : beginState <= Idle;flag <=1'b0;link_data =1'b0;ACK <=1'b1;lcd_data <= 8'hzz;cnt <= 0;link_rs =0;enddefault: begin ACK =0;State <= Idle;end endcaseendendmodule3代码//module LCD_top(module LED(input sys_clk,input sys_rst,output LCD_RS,output LCD_RW,output LCD_EN,inout [7:0] LCD_DATA,output BUSY);wire [7:0] char_data;wire [2:0] char_X;wire [1:0] char_Y;sign singb(.lcd_clk (lcd_clk), //100kHz.sys_rst (sys_rst),.lcd_char_en(lcd_char_en),.lcd_init_en(lcd_init_en),.char_data (char_data),.char_X (char_X),.char_Y (char_Y),.char_LR (char_LR));LCD_init lcd_init(.lcd_clk (lcd_clk),.sys_clk (sys_clk),.lcd_en (lcd_init_en), //1 is actived .LCD_RS (LCD_RS),.LCD_RW (LCD_RW),.LCD_EN (LCD_EN),.LCD_DATA (LCD_DATA),.ACK (init_ack));LCD_charac a(.lcd_clk (lcd_clk),.sys_clk (sys_clk),.lcd_en (lcd_char_en), //1 is actived .Y (char_Y), //row 0-3.X (char_X), //clunm 0-7.LR (char_LR), //0/1.data_disp (char_data),.LCD_RS (LCD_RS),.LCD_RW (LCD_RW),.LCD_EN (LCD_EN),.LCD_DATA (LCD_DATA),.ACK (init_ack));LCD_clk clk1(.sys_clk (sys_clk),.lcd_clk (lcd_clk));endmodule4代码module LCD_clk(//module LED(input sys_clk,output reg lcd_clk);/*-creat the 25kHz clock-*/reg [11:0] lcd_cnt;always @ (posedge sys_clk) beginif(lcd_cnt == 2) //100kHzbeginlcd_cnt =0;lcd_clk <= ~ lcd_clk;endelselcd_cnt = lcd_cnt +1'b1;endinitial begin lcd_clk =0; lcd_cnt =0; endendmodule5代码/* to display character */module LCD_charac(//module LED(input lcd_clk,input sys_clk,input lcd_en, //1 is activedinput [1:0] Y, //row 0-3input [2:0] X, //clunm 0-7input LR, //0/1input [7:0] data_disp,output reg LCD_RS,output reg LCD_RW,output reg LCD_EN,inout [7:0] LCD_DATA,output reg ACK);reg [7:0] lcd_data;reg [7:0] R_buff;reg [7:0] State;parameter Idle =8'b0000_0001,DDRAM =8'b0000_0010, //drawing modeW_addr =8'b0000_0100, //row address YDummy =8'b0000_1000, // not really readingR_data =8'b0001_0000, //reading high byte dataW0_data =8'b0010_0000,W1_data =8'b0100_0000,Stop =8'b1000_0000;reg flag,cnt;reg link_data;reg flag0;/* LCD_DATA */assign LCD_DATA = link_data ? lcd_data :8'hzz;/* LCD_EN */always @ (posedge sys_clk) beginif(flag == 1'b1)LCD_EN <= lcd_clk;elseLCD_EN <=1'bz;end/* LCD_RW */always @ (posedge lcd_clk) beginif(flag0)if(State == Dummy || State == R_data)LCD_RW <=1'b1;elseLCD_RW <=1'b0;elseLCD_RW <=1'bz;end/* LCD_RS */always @ (posedge lcd_clk) beginif(flag0)if(State == W0_data || State == W1_data || State == Dummy || State == R_data) LCD_RS <=1'b1;elseLCD_RS <=1'b0;elseLCD_RS <=1'bz;end/*-Main state transter-*/always @ (posedge lcd_clk) begincase (State)Idle : beginif(lcd_en)begin State <= DDRAM; link_data =1; flag0=1'b1; endelsebegin State <= Idle; flag0= 1'b0;endflag <= 1'b0;lcd_data <= 8'hzz;ACK <=0;endDDRAM : begin //here flag is changed,not Idle, cause sys_clk flag <= 1'b1;State <= W_addr;link_data =1;lcd_data <= 8'h30;endW_addr : beginif(!cnt)beginif(LR)State <= Dummy;elseState <= W0_data;cnt =1'b1;endelseState <= W0_data;case (Y)2'b00: lcd_data <= 8'h80 + X;2'b01: lcd_data <= 8'h90 + X;2'b10: lcd_data <= 8'h88 + X;2'b11: lcd_data <= 8'h98 + X;endcaselink_data =1'b1;endDummy : beginState <= R_data;R_buff <= LCD_DATA;link_data =0;endR_data : beginState <=W_addr;R_buff <= LCD_DATA;endW0_data : beginif( !LR)beginlcd_data <= data_disp;State <= Stop;endelsebeginlcd_data <= R_buff;State <= W1_data;endendW1_data : beginlcd_data <= data_disp;State <=Stop;flag0=0;endStop : beginState <= Idle;flag <= 1'b0;lcd_data <= 8'hzz;cnt <= 0;ACK <= 1;enddefault: begin ACK =0;State <= Idle; link_data=0 ;end endcaseendendmodule。

毕业设计—基于单片机的12864时钟显示

毕业设计—基于单片机的12864时钟显示

学士学位毕业论文(设计)题目:基于单片机的12864时钟显示摘要电子时钟是一种非常广泛日常计时工具,给人们的带来了很大的方便,在社会上越来越流行。

它可以对年、月、日、星期、时、分、秒进行计时,采用直观的数字显示,可以同时显示年月日时分秒等信息,还有时间校准等功能。

该电子时钟主要采用STC89C52单片机作为主控核心,用DS1302时钟芯片作为时钟、液晶12864显示屏显示。

STC89C52单片机是由深圳宏晶科技公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的12864液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。

此外,该电子时钟还具有时间校准等功能。

关键词:STC89C51单片机,DS1302时钟芯片,液晶12864AbstractElectronic clock is a very extensive daily timing tool, to the people has brought great convenience, more and more popular in the community. It can be the year, month, date, day, hour, minute, second for a time, using intuitive digital display, can display information such as year, month, day, hour, and time alignment functions. The electronic clock is used mainly as a master STC89C52 microcontroller core, with theDS1302 clock chip as a clock, LCD display12864. STC89C52 SCM is a Shenzhen Hong Crystal Technology has introduced, power consumption, voltage can be selected 4 ~ 6V voltage power supply; DS1302 clock chip is American DALLAS company launched with a fine current charging low-power real-time clock chip, it can year, month, date, day, hour, minute, second for a time, also has a leap year compensation and other functions, DS1302 and long life, small error; 12864 LCD digital display isused to display that can display year, month, date, day, hour, minute, second and so on. In addition, the electronic clock also has a time calibration function.Key Words:STC89C51 microcontroller, DS1302 clock chip, LCD 12864目录1绪论 (3)1.1时钟发展史 (3)1.2 目前的研究现状 (4)1.3研究目的及意义 (4)2 总体方案设计 (5)2.1 方案的选择 (5)2.1.1设计要求 (5)2.1.2方案的选择 (5)2.2总体方案组成框图 (6)3系统硬件设计 (6)3. 1主芯片模块 (6)3.1.1 中断系统 (8)3.1.2常用寄存器 (8)3.2晶振和复位电路 (10)3.2.1晶振电路 (10)3.2.2复位电路 (11)3.3 DS1302时钟芯片电路 (11)3.3.1 DS1302引脚图 (11)3.3.2 DS1302寄存器 (12)3.3.3 DS1302外围电路 (13)3.4 LCD12864显示模块 (13)3.4.1 LCD12864引脚功能 (13)3.4.2 LCD12864指令说明 (14)3.4.3 LCD12864电路接线 (15)3.5 红外遥控模块 (16)4 系统软件设计 (17)4.1 主程序设计 (17)4.2 LCD12864驱动程序 (19)4.3 DS1302驱动程序 (21)4.4 红外遥控程序 (24)5 调试结果 (25)5.1 正常显示日期时间画面 (26)5.2 进入调整时间日期画面 (26)5.3图片显示画面 (26)6总结 (27)致谢 (28)参考文献 (29)附录一 (31)附录二 (32)1绪论1.1时钟发展史很早以前,人类主要是利用天文现象和流动物质的连续运动来计时。

LCD12864时钟毕业设计带矩阵键盘

LCD12864时钟毕业设计带矩阵键盘

第一章方案论证1.1 单片机型系统的选择与论证方案一:此方案采用AT89C51八位单片机实现。

它内存较小,只有4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,无在线下载编程功能,也无在线仿真功能。

只能通过编程器烧写成以.hex为后缀名的文件。

方案二:此方案采用AT89S52八位单片机实现。

它内存较大,有8K的字节Flash闪速存储器,比AT89C51要多4K。

它可在线编程,可在线仿真的功能,这让调试变得方便。

单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。

而且体积小,硬件实现简单,安装方便。

另外AT89S52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。

综上所述,我们采用了第二个方案,即AT89S52。

1.2显示模块的选择与论证方案一:采用LED点阵显示,用来显示文字、图形、图像、等各种信息的显示屏幕。

它均由LED矩阵块组成。

图文显示屏可与计算机同步显示汉字、英文文本和图形,该方案简单易行。

但所需的元件较多,且不容易进行操作,可读性差,一旦设定后,很难再加入其他的功能,当加上日期、时间时增加了编程的难度。

方案二:采用液晶(JHD529M1)显示器件,该液晶显示器件与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该器件的价格也略低于相同点阵的图形液晶模块。

而且此液晶显示平稳、省电、美观,更容易实现题目要求,对后续的功能兼容性高,同时有中文字库,也可以实现图像显示。

只需将软件作修改即可,可操作性强,也易于读数,能同时显示日期、时间、星期且易于修改。

综上分析,我们采用了第二个方案。

1.3 时钟实现方案一:采用软件实现,直接用单片机的定时器编程以实现时钟,优点节省硬件,缺点是编程复杂程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,准确度较差。

LCD12864液晶显示倒计时设计

LCD12864液晶显示倒计时设计

长沙学院《单片机原理及应用》课程设计说明书题目LCD12864液晶显示倒计时器系(部)专业(班级)姓名学号指导教师起止日期课程设计任务书系(部):电子与通信工程系专业:目录概述 (4)一、设计目的 (5)二、设计任务与要求 (5)1、课题内容 (5)2、要求 (5)三、设计原理 (6)1、模块简介 (6)(1)单片机概述 (6)(2)LCD12864概述 (6)2、单片机最小系统电路 (6)3、电路总图 (7)4、软件设计思路 (7)5、设计结果 (8)四、设计心得及体会 (8)参考文献 (9)概述近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。

模拟多通道压力系统是利用压力传感器采集当前压力并反映在显示器上,它可以分析压力过量程,并发出报警。

并采用电子秤原理可根据输入单价准确的计算出物体的金额。

本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的四位LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。

1、加深对单片机的了解和运用,掌握单片机芯片80C5X系列的逻辑功能及使用方法,并且提高学生的设计能力,以及提高综合运用所学知识的实际运用能力。

1、培养我们查阅数据手册的能力,以及提高我们对查阅资料的运用和理解。

2、通过设计的过程了解单片机的开发过程,以及对软件硬件设备的选择和应用。

3、学习并加深对Keil的运用,4、熟悉模拟电路的应用与集成电路的引脚排列。

LCD显示的指针式电子钟

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点阵)汉字。

详细设计方案LCD12864液晶显示

详细设计方案LCD12864液晶显示

LCD12864详细设计方案1.LCD12864简介:FYD12864-0402B 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8点ASCII 字符集。

利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4 行16×16 点阵的汉字。

也可完成图形显示。

低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

2.LCD12864规格:基本特性:低电源电压(VDD:+3.0--+5.5V)显示分辨率:128×64点内置汉字字库,提供8192个16×16 点阵汉字(简繁体可选)内置 128 个16×8点阵字符2MHZ 时钟频率显示方式:STN、半透、正显驱动方式:1/32DUTY,1/5BIAS视角方向:6 点背光方式:侧部高亮白色LED,功耗仅为普通LED 的1/5—1/10通讯方式:串行、并口可选内置DC-DC 转换电路,无需外加负压无需片选信号,简化软件设计工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃12864主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

注意:1、3脚和18脚之间可以通过电阻阻值大小调节液晶的对比度,本开发板默认使用4.7K阻值大小,如果4.7K和您的液晶显示不匹配,用户可以自己选择合适的阻值焊接上去即可。

2、RW为读写指示。

3、15脚需要接1,因为本开发板使用并行数据方式。

5.寄存器介绍在使用12864LCD前先必须了解以下功能器件才能进行编程。

12864内部功能器件及相关功能如下:1. 指令寄存器(IR)IR是用于寄存指令码,与数据寄存器数据相对应。

12864液晶电子时钟+温度显示

12864液晶电子时钟+温度显示

12864液晶电子时钟+温度显示上午花了一上午时间,用12864 液晶写了一个电子时钟加温度传感器程序,先说一下程序的功能,可以实现显示年月日时间和温度,年月日和时间是可通过按键调节的,调节相应的选项时,该选项会闪烁,并停止走时,当调节完毕后时钟恢复走时。

现在将程序和思路写下来,以便日后查看和与大家探讨改进,欢迎高手提出宝贵意见。

我使用的是HJ12864M-1 带字库液晶,所以在显示上稍微方便一点。

下面先来说一下我的编程思路。

时间更新用的是单片机自带的定时器,液晶要显示数字必需将它转换成ASCii 码的形式,数字0-9 的ASCii 码与数字之间有一个定量的关系,当数字加上0x30 之后便得到该数字的ASCii 码,这样以来液晶更新数据就变得简单了。

调节时间时对应选项闪烁,是通过不断的交替写入数据和空格实现的。

温度显示用的是DS18B20,,将测得的当前温度不断更新显示在液晶上。

调节时间用的是三个独立按键。

由于这个程序我使用模块化来写的,就只能将每个模块分别给出来,大家只要组装一下便可以使用。

如果需要完整程序的可以给我留言我发给你们。

下面是12864 液晶的初始化,读写命令,及读忙操作#include “lcd12864.h”#include reg52.hsbit RS=P2 ; //控制端口位定义sbitRW=P2;s b it EN=P2;vo id init_12864(){delay(40);write_com(0x30);//8 位数据格式,基本指令显示delay(10); //延时时间write_com(0x30);//8 位数据格式,基本指令显示delay(37);write_com(0x0C);//开显示、关闭光标delay(10);write_com(0x01);//清屏指令delay(10); //延时write_com(0x06);//设置显示点:指针自加1}tips:感谢大家的阅读,本文由我司收集整编。

12864LCD万年历制作过程

12864LCD万年历制作过程

从硬件连接开始,这台电子钟由三大部分组成:控制板,主板和显示板。

由于刚开始是做串口通信的,但是没有成功后来改成并口通信,所以板上比电路图上多了一只LED。

控制板通过排针与主板连接为了加固,主板用了两张万能板叠在一起,因为是做串口通信时拍的,所以还有一些痕迹。

比如蜂鸣器(在V2.1版本中都用小喇叭了)。

还有就是那两根天线,可不是用来接收信号的哦,先卖一下关子,看到后面你就明白了。

焊接中的主板长度太长的走线就用跳线,节约锡丝。

主板快要焊接完毕了主板与控制板组合在一起了图中两个2P的插座分加是接喇叭和后备电池的。

主板制作完毕显示板开工了,同样使用了两张万能板。

你要问那八只铜柱是做什么用的啊,接着往下看。

显示板背后的走线128*64液晶屏,内置汉字库。

显示板通过排线与主板连接整机图,这下知道那两根天线和八只铜柱是用来干什么用的了吧。

从这边看看再从后面看看折叠起来了效果图把程序烧录进AT89S52后试机,刚开始只有背光灯亮,按按键喇叭有相应的声音发出,说明程序正常运行了,判断是显示板的问题。

后来尝试把液晶屏的V0端接上5V的高电平后显示正常了。

资料上说的这只引脚是LCD偏压输入(一般悬空),不得其解,还望有高手不吝赐教。

附上液晶模资料:该显示模块是128*64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置国标GB2312码简体中文字库(16*16点阵),128个字符(8*16点阵)及64*256点阵显示RAM(GDRAM),可与CPU 直接接口,提供两种方式来连接CPU:8位并行及串行两种连接方式。

引脚说明:1. VSS 电源负极2. VDD 电源正极(+5V)3. V0 LCD偏压输入(悬空)4. RS(CS)数据/命令选择端(片选信号输入)5. R/W(SID)读/写控制信号(串行数据输入)6. E(SCLK)使能信号(串行移位脉冲输入)7. D0 数据08. D1 数据19. D2 数据210.D3 数据311.D4 数据412.D5 数据513.D6 数据614.D7 数据715.PSB 模式选择(H并行,L串行)16.NC 空脚17./RST 复位端(L复位)18.NC 空脚19.LED+ 背光源正极20.LED- 背光源负极。

LCD12864液晶电子钟

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接口电路等组成。

LCD12864液晶显示电子钟设计

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.根据需求进行适当的优化和完善设计。

总结:。

LCD12864液晶显示电子钟设计

LCD12864液晶显示电子钟设计

《单片机原理及应用》课程设计说明书题目LCD12864 液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期课程设计任务书系(部):专业:课题名称LCD12864 液晶显示电子钟设计设计要求设计一种基于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 程序第三天~第六天程序设计第六天~第八天程序调试、仿真第九天~第十天系统测试并编写设计说明书教研室意见年月日系(部)主管领导意见年月日目录一、12864液晶的工作原理 (4)二、方案设计 (4)2.1 实物硬件设计 (4)2.2 系统硬件设计 (5)2.2.1 主芯片模块 (5)2.2.2 晶振和复位模块 (5)2.2.3 按钮模块 (6)2.3 系统软件设计 (6)2.3.1 主程序设计 (6)三、仿真和分析 (7)四、总结体会 (7)参考文献 (33)一、12864液晶的工作原理液晶显示屏中的业态光电显示材料,利用液晶的电光效应把电信号转换成数字符、图像等可见信号。

基于12864液晶屏实现多功能数字时钟的实验设计

基于12864液晶屏实现多功能数字时钟的实验设计

基于12864液晶屏实现多功能数字时钟的实验设计
 想要快速入门单片机,就要多动手实践。

也许你的手上有不止一块的单片机开发板,但是你有没有亲自动手实现自己的想法?单片机实现数字时钟是一个不错的想法。

有12864液晶显示屏、有按键、有DS18B20。

最关键的,你能从一个小的实验设计中获得设计经验,熟悉产品开发的流程,你会慢慢爱上这一行。

 器件清单
1.元器件清单
 首先来看看所需要的清单:51单片机STC12C5A60S2、12864液晶屏、温度传感器DS18B20、时钟芯片DS1302、光敏电阻、四腿按键等。

 STC12C5A60S2。

LCD12864液晶显示的设计

LCD12864液晶显示的设计

电子技术课程设计报告书课题名称 LCD12864液晶显示的设计姓 名学 号院、系、部 物理与电信工程系 专 业 电子信息工程指导教师2012年 06月 20日※※※※※※※※※ ※※ ※※ ※※ ※※※※※※※※※2009级电子信息工程单片机课程设计LCD12864液晶显示的设计1 设计目的(1)熟悉模拟电路的应用与集成电路的引脚排列。

(2)掌握单片机芯片80C5X系列的逻辑功能及使用方法。

(3)熟悉电路仿真软件Proteus的使用。

(4)了解点阵型LCD12864(不带字库)的组成及工作原理。

(5)熟悉KEIL软件的编程,加强C语言的能力。

2 设计思路(1)设计单片机最小系统电路。

(2)设计LCD12864液晶外围电路。

(3)设计LCD12864液晶与单片机的组成电路。

3 设计过程3.1方案论证图3.1.1 单片机与LCD液晶的工作原理框由于要实现点阵液晶的绘图等功能,而且对于51系列的单片机片内RAM 都不大,要实现读操作的话只能使用可以并行方式的液晶,(只有并行方式可读)因为如果不使用并行方式而采用在51系列单片机内部开辟一片128*64大小的缓存用于对液晶的刷新从而实现读的功能显然不现实。

本设计选用的12864是AMPIRE128X64,它的控制器是KS0138,采用并行方式与单片机通信。

对于单片机的选用,采用程序存储空间较大的STC89C58,它有32K的flash,对于实现简单的GUI设计足够。

图1是单片机与LCD液晶以及外围电路的总体框图。

3.2电路设计图3.2.1 单片机最小系统电路如图2所示,单片机的最小系统有复位电路和振荡电路组成,复位电路采用上电复位,振荡电路采用的内部方式,在XTAL1和XTAL2端外界石英晶体作定时元件,内部反相放大器自激振荡,产生时钟。

P0口出外接4.7K上拉电阻,因为P0口是漏极开路,必须要接上拉才能输出高电平。

5V直流稳压电源电路如图3所示,该电路由电源变压器、整流桥堆、滤波电容C6、C7、三端稳压集成电路LM7805、限流电阻器和电源指示发光二极管组成。

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

《单片机原理及应用》课程设计说明书题目LCD12864 液晶显示电子钟设计系(部)专业(班级)姓名学号指导教师起止日期课程设计任务书系(部):专业:目录一、12864液晶的工作原理 (4)二、方案设计 (4)2.1 实物硬件设计 (4)2.2 系统硬件设计 (5)2.2.1 主芯片模块 (5)2.2.2 晶振和复位模块 (5)2.2.3 按钮模块 (6)2.3 系统软件设计 (6)2.3.1 主程序设计 (6)三、仿真和分析 (7)四、总结体会 (7)参考文献 (32)一、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液晶显示屏二、方案设计2.1 实物硬件设计单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS1302时钟控制模块。

通过这六个模块的协调工作就可以完成相应的液晶屏控制和显示功能。

这六个模块的相互连接如图2-1:图2-1 硬件组成框图2.2 系统硬件设计本硬件电路主要由四大模块组成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块。

2.2.1 主芯片模块主芯片模块即单片机模块,XTAL1:接外部晶振和微调电容的一端。

在片内,它是振荡电路反相放大器的输入端。

XTAL2:接外部晶振和微调是容的一端。

RST:AT89C51的复位信号输入引脚,高电平有效。

当此输入端保持两个机器周期的高电平时,就可以完成复位操作。

ALE:允许地址锁存信号端。

EA:该引脚为低电平时,则读取外部的程序代码来执行程序。

P0、P1、P2、P3:8位并行输入输出口。

每个端口都是8位准双向口,共占32只引脚。

每一条都能独立地用作输入或输出。

每个端口都包括一个锁存器、一个输出驱器和输入缓冲器。

作输出时,数据可以锁存;作输入时,数据可以缓冲。

图如图3—1。

图3-1 单片机引脚图2.2.2 晶振和复位模块89C51芯片内部有一个高增益反相放大器,用于构成振荡器。

如图3—2,反相放大器的输入端为XTAL1,输出端XTAL2,两个跨接石英晶体及两个电容就可以构成稳定的自激振荡器。

XTAL1 是片内振荡器的反相放大器输入端,XTAL2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2 悬空。

一个晶体振荡器,接在单片机内部的振荡电路上,两个电容是起振电容,频率越高,应该越小。

图4-1 晶振模块在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位。

复位后P0-P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄存器SFR 全部清零。

当复位脚由高电平变为低电平时,芯片为ROM 的00H 处开始运行程序。

如上图5-1所示复位电路,由于复位时高电平有效,当刚接上电源的瞬间,电容C1两端相当于短路,即相当于给RESET引脚一个高电平,等充电结束时(这个时间很短暂),电容相当于断开,这时图5-1 复位模块2.2.3 按钮模块本模块采用四个按钮进行控制,通过串行口输入输出连接,当K1按键波动一次后,方可进行年、月、日、星期、时、分的改变,当循环满时,按下K0可实现对闹钟的改变。

按键K2、K3分别实现加一减一的操作。

图6-1 按钮模块2.3 系统软件设计2.3.1 主程序设计图8-1 LCD显示程序和初始化子程序流程图三、仿真和分析将程序下载到单片机开发板上,LCD12864显示如下图,第一行为汉字“数字电子钟”,第二行为时分秒,第三行为年月日以及星期,第四行为闹钟,通过按键可实现时间的调整,也可实现整点报时和闹钟。

符合设计要求。

图9-1 实物仿真图程序:#include<reg52.h>#include<intrins.h>#include<stdlib.h>#define uchar unsigned char#define uint unsigned intsbit rs=P1^0;//12864引脚定义sbit rw=P1^1;sbit en=P1^2;sbit PSB=P1^3;sbit beep=P3^4;//蜂鸣器引脚定义sbit k1=P3^5;//按键定义sbit k2=P3^6;sbit k3=P3^7;sbit k0=P0^0;uint t,k,kk;uchar shi,fen,miao,nian=13,yue,ri,zhou,shi0,fen0,miao0; uchar code dis1[]={0xca,0xfd,"字电子钟"};//显示字组uchar code dis2[]={"00时00分00秒"};uchar code dis3[]={"00年00月00日 1"};uchar code dis4[]={"闹钟00时00分00秒"};void delayms(uint xms)//延时xms函数{for(i=xms;i>0;i--)for(j=110;j>0;j--);}void warn(uchar xn)//“嘟”xn次函数{uint nn;for(nn=0;nn<xn;nn++){uint n;for(n=2000;n>0;n--){beep=1;delayms(1);beep=0;delayms(2);}for(n=1000;n>0;n--){beep=1;delayms(3);}}}void warn3s()//3s报警函数{uint n;for(n=3000;n>0;n--){beep=0;delayms(2);beep=1;delayms(1);}}void write_com(uchar com)//12864写指令函数{rs=0;rw=0;en=0;P2=com;delayms(5);en=1;delayms(5);en=0;}{rs=1;rw=0;en=0;P2=date;delayms(5);en=1;delayms(5);en=0;}void lcd_pos(uchar X,uchar Y)//12864显示位置函数{uchar pos;if(X==0){X=0x80;}if(X==1){X=0x90;}if(X==2){X=0x88;}if(X==3){X=0x98;}pos=X+Y;write_com(pos);}void write_sfm(int add,uint date)//时钟数值函数{uchar shi,ge;shi=date/10;ge=date%10;lcd_pos(1,0+add);write_data(0x30+shi);write_data(0x30+ge);}void write_sfm1(int add1,uint date1)//年月日数值函数{uchar shi,ge;shi=date1/10;ge=date1%10;lcd_pos(2,0+add1);write_data(0x30+shi);write_data(0x30+ge);}void write_sfm2(int add2,uint date2)//闹钟数值函数{uchar shi,ge;shi=date2/10;ge=date2%10;lcd_pos(3,0+add2);write_data(0x30+shi);write_data(0x30+ge);}void keyscan()//按键扫描函数{if(k0==0)//闹钟按键操作{delayms(5);if(k0==0){while(!k0);kk++;if(kk==1){TR0=0;write_com(0x0f);lcd_pos(3,2);}}if(kk==2){lcd_pos(3,4);}if(kk==3){lcd_pos(3,6);}if(kk==4){kk=0;TR0=1;write_com(0x0c);}}if(k1==0)//调试按键操作{delayms(5);if(k1==0){k++;while(!k1);if(k==1){TR0=0;write_com(0x0f);lcd_pos(1,4);}}if(k==2){lcd_pos(1,2);}if(k==3){lcd_pos(1,0);}if(k==4){lcd_pos(2,4);}if(k==5){lcd_pos(2,2);}if(k==6){lcd_pos(2,0);}if(k==7){lcd_pos(2,7);}if(k==8){k=0;write_com(0x0c);TR0=1;}}if(k!=0){if(k2==0)//“+1”按键操作{delayms(5);if(k2==0){while(!k2);if(k==1){miao++;if(miao==60)miao=0;write_sfm(4,miao);lcd_pos(1,4);// write_sfm(4,miao);}if(k==2){fen++;if(fen==60)fen=0;write_sfm(2,fen);lcd_pos(1,2);// write_sfm(2,fen);}if(k==3){shi++;if(shi==24)shi=0;write_sfm(0,shi);lcd_pos(1,0);// write_sfm(0,shi);}if(k==4)ri++;if(ri==32)ri=1;write_sfm1(4,ri);lcd_pos(2,4);// write_sfm1(4,ri);}if(k==5){yue++;if(yue==13)yue=1;write_sfm1(2,yue);lcd_pos(2,2);// write_sfm1(2,yue);}if(k==6){nian++;if(nian==50)nian=0;write_sfm1(0,nian);lcd_pos(2,0);// write_sfm1(0,nian);if(k==7){zhou++;if(zhou==8)zhou=0;write_sfm1(7,zhou);lcd_pos(2,7);// write_sfm1(7,zhou);}}}if(k3==0)//“-1按键操作”{delayms(5);if(k3==0){while(!k3);if(k==1){miao--;if(miao==-1)miao=59;write_sfm(4,miao);lcd_pos(1,4);// write_sfm(4,miao);}if(k==2){fen--;if(fen==-1)fen=59;write_sfm(2,fen);lcd_pos(1,2);// write_sfm(2,fen);}if(k==3){shi--;if(shi==-1)shi=23;write_sfm(0,shi);lcd_pos(1,0);// write_sfm(0,shi);}if(k==4){ri--;if(ri==-1)ri=31;write_sfm1(4,ri);lcd_pos(2,4);// write_sfm1(4,ri);}if(k==5){yue--;if(yue==-1)yue=12;write_sfm1(2,yue);lcd_pos(2,2);// write_sfm1(2,yue);}if(k==6){nian--;if(nian==-1)nian=50;write_sfm1(0,nian);lcd_pos(2,0);// write_sfm1(0,nian);}if(k==7){zhou--;if(zhou==-1)zhou=7;write_sfm1(7,zhou);lcd_pos(2,7);// write_sfm1(7,zhou);}}}}if(k==0){if(k2==0){delayms(5);if(k2==0){while(!k2);if(kk==3){miao0++;if(miao0==60)miao0=0;write_sfm2(6,miao0);lcd_pos(3,6);// write_sfm2(6,miao0);}if(kk==2){fen0++;if(fen0==60)fen0=0;write_sfm2(4,fen0);lcd_pos(3,4);// write_sfm2(4,fen0);}if(kk==1){shi0++;if(shi0==24)shi0=0;write_sfm2(2,shi0);lcd_pos(3,2);// write_sfm2(2,shi0);}}}if(k3==0){delayms(5);if(k3==0){while(!k3);if(kk==3){miao0--;if(miao0==-1)miao0=59;write_sfm2(6,miao0);lcd_pos(3,6);// write_sfm2(6,miao0);}if(kk==2){fen0--;if(fen0==-1)fen0=59;write_sfm2(4,fen0);lcd_pos(3,4);// write_sfm2(4,fen0);}if(kk==1){shi0--;if(shi0==-1)shi0=23;write_sfm2(2,shi0);lcd_pos(3,2);// write_sfm2(2,shi0);}}}}}void init()//初始化函数(12864初始化,定时器初始化){PSB=1;write_com(0x30);delayms(5);write_com(0x0c);delayms(5);write_com(0x01);delayms(5);TH0=(65535-50000)/256;TL0=(65535-50000)%256;TMOD=0x01;ET0=1;EA=1;TR0=1;}void main()//主函数{uchar i;delayms(10);init();lcd_pos(0,2);//第一排显示i=0;while(dis1[i]!='\0'){write_data(dis1[i]);i++;}lcd_pos(1,0);//第二排显示i=0;while(dis2[i]!='\0'){write_data(dis2[i]);i++;}lcd_pos(2,0);//第三行显示i=0;while(dis3[i]!='\0'){write_data(dis3[i]);i++;}lcd_pos(3,0);//第四行显示i=0;while(dis4[i]!='\0'){write_data(dis4[i]);i++;}while(1){keyscan();if(miao==0&&fen==0&&TR0==1)//整点报时判断{warn(shi);}if(miao==miao0&&fen==fen0&&shi==shi0&&TR0==1)//闹钟判断{warn3s();}if(miao==0&&fen==0&&miao==miao0&&fen==fen0&&shi==shi0&&TR0==1)//整点报时、闹钟时冲突操作{warn3s();}}while(1);}void timer() interrupt 1//定时器函数{TH0=15535/256;TL0=15535%256;t++; //50ms计数一次if(t==20){t=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;zhou++;if(zhou==8){zhou=1;}ri++;if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) {if(ri==32){ri=1;yue++;if(yue==13){yue=1;nian++;}}}if(yue==4||yue==6||yue==9||yue==11){if(ri==31){ri=1;yue++;if(yue==13){yue=1;nian++;}}}if(yue==2){if((nian%4)==0){if(ri==30){ri=1;yue++;if(yue==13){yue=1;nian++;}}}if((nian%4)!=0){if(ri==29){ri=1;yue++;if(yue==13){yue=1;nian++;}}write_sfm1(0,nian);}write_sfm1(2,yue);}write_sfm1(7,zhou);write_sfm1(4,ri);}write_sfm(0,shi);}write_sfm(2,fen);}write_sfm(4,miao);}}四、总结体会通过这为期两个星期的课程设计,我从中认识到了自己很多方面的不足。

相关文档
最新文档