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

合集下载

12864+ds1302+ds18b20数字时钟_温度_日期同步显示

12864+ds1302+ds18b20数字时钟_温度_日期同步显示

毕业(论文)说明书题目:系别:专业:指导老师:学生姓名:学号:理论研究工程设计工程技术研究软件开发2014年7 月18日一毕业设计(论文)内容与要求一、主要研究内容1、8051单片机硬件结构。

2、C语言程序设计基础内容。

3、单片机C语言程序设计的方法。

4、DS18B20温度传感器的使用方法。

5、DS1302时钟芯片的用法。

6、12864LCD液晶屏的编程使用方法。

二、要求1、能够以指针的形式在LCD12864上显示当前时间的小时和分钟和秒。

2、能够以数字加汉字的形式在LCD12864上显示当前时间的小时和分钟和秒。

3、能够以数字加汉字的形式在LCD12864上显示当前年月日。

4、能够以数字加汉字的形式在LCD12864上显示当前星期。

5、时间采用时钟芯片DS1302控制。

6、温度采用DS18B20温度传感器检测当前温度。

7、所有功能在LCD12864当中同步显示。

8、采用AT89S52或者STC89C52RC单片机控制。

三、引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

本设计是数据采集及处理,显示系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。

并且引导一种创新的思维,把学到的知识应用到日常生活当中。

在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。

全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。

四、方案设计及方案论证1.时钟温度的总体设计思路按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合ds1302和ds18b20来控制时钟和温度的调整显示。

电子信息工程专业毕业设计--基于51单片机的12864液晶显示器的设计和研究

电子信息工程专业毕业设计--基于51单片机的12864液晶显示器的设计和研究

目录设计总说明 (I)INTRODUCTION (II)1 绪论 (1)1.1课题背景及研究意义 (1)1.2课题研究的主要内容 (1)1.3国内外发展状况与存在问题 (1)2 总体方案设计与论述 (2)2.1 系统需求分析 (2)2.2 系统总体方案设计 (2)2.2.1 设计方案论证 (2)2.2.2总体结构框图 (3)3系统单元模块设计 (3)3.1系统硬件示意图 (3)3.2主控芯片(STC89C52模块)[5] (4)3.3 时钟控制模块[13] (6)3.3.1 DS1302简介 (6)3.3.2引脚及功能表 (7)3.3.3工作原理 (7)3.3.4 DS1302电路设计图[9] (8)3.4 温度控制模块 (8)3.5 12864接口电路模块 (9)3.6 按键电路模块 (9)3.7 电源电路模块 (10)3.8 印制电路板[9] (10)4系统整体调试与结果分析 (11)4.1 系统总体程序流程介绍 (11)4.2 按键程序设计 (13)4.3 12864驱动程序设计[15] (14)4.3.1 ST7920芯片介绍[14] (14)4.3.2 ST7920驱动程序设计 (17)4.4 12864应用程序设计 (20)4.4.1 文字显示程序设计 (20)4.4.2 点、线显示程序设计 (22)4.4.3 图形、图片显示程序设计 (23)4.5 菜单程序设计 (26)5设计调试及进一步研究 (28)5.1 系统测试 (28)5.1.1 软件调试 (28)5.1.2 硬件调试 (29)5.2 进一步研究的工作 (30)6总结 (30)鸣谢................................................................................................................................ 错误!未定义书签。

利用lcd12864显示的时间控制器设计

利用lcd12864显示的时间控制器设计

目录第一章概述 (1)1.151单片机简介 (1)1.2 设计要求 (1)第二章系统总体方案流程 (2)第三章软件设计 (3)3.1系统软件设计思想 (3)3.2 系统主程序 (3)第四章Proteus软件仿真 (4)4.1 Proteus软件简介 (4)4.2 Proteus软件仿真 (4)课程设计体会 (7)参考文献 (8)附录1 (9)第一章概述1.1 51单片机简介单片微型计算机简称单片机,即把组成微型计算机的各个功能部件,如中央处理器、随机存储器、只读存储器、I/O接口电路、定时器/计数器以及串行通信接口等集成在一块芯片上,构成一个完整的微型计算机。

由于单片机主要面对的是测控对象,突出的是控制功能,所以它从功能和形态上来说都是应测控功能领域应用的要求而诞生的。

随着单片机技术的发展,它在芯片内集成了许多面对测控对象的接口电路,如ADC、DAC、高速I/O口、脉冲宽度调制器、监视定时器等,这些接口电路已经突破了微型计算机传统的体系结构,所以单片机也成为微型控制。

1.2 设计要求STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计利用数码管显示时间。

一是扩展DS12C887时钟电路设计;二是利用LCD12864显示当前时间;三是利用单片机I/O口驱动继电器的控制输出电路设计;四是设计出在到达定时时间给出10s的继电器动作信号。

第二章系统总体方案流程图2-1 系统方框图本次设计实现的功能主要有:使用4位七段显示器来显示现在的时间,显示格式为“时分”,由LED小数点闪动作为秒计数表示。

可以设定作息时间,并进行到时提示。

能够根据预先设定好的作息时间表自动启停控制电路,完成对外部设备的实时控制。

由按键输入控制设置年月日以及当前时间、并可设置闹钟定时,时间到由继电器器发出响声并作出相应动作:二极管闪亮。

第三章软件设计3.1 系统软件设计思想本系软件设计中,利用单片机定时器设计时间计时处理,采用单片机内部的T0定时器溢出中断来实现,工作在T1方式下,定时10秒,则连续中断20次即为一秒,得到了我们所需时间的最小单位该设计用C51编写程序,由于汇编语言的移植性比较差,而C语言则比较灵活。

毕业设计—基于单片机的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 时钟实现方案一:采用软件实现,直接用单片机的定时器编程以实现时钟,优点节省硬件,缺点是编程复杂程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,准确度较差。

基于51单片机的12864液晶时钟完整程序(已通过)

基于51单片机的12864液晶时钟完整程序(已通过)
void init_ds1302() //
{
uchar flag ;
flag=uc_R1302(0x81); // 在秒寄存器读数 ,ch=
if (flag&0x80) //
{
v_W1302(0x8e,0x00); //
v_W1302(0x80,0x45); //0秒
v_W1302(0x82,0x29); //35分钟
T_RST = 1;
v_WTInputByte(ucAddr); /* 地址,命令 */
ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST =0;
return(ucDa);
}
/********************************************************/
void days()
{
if ( yue== 0x01 && ri== 0x01 ){ lcd_write_string(4,3,"元旦节"); }
if ( yue== 0x02 && ri== 0x14 ){ lcd_write_string(4,3,"情人节"); }
if ( yue== 0x03 && ri== 0x08 ){ lcd_write_string(4,3,"妇女节"); }
}
void WRI(char instru) //液晶写指令
{
lcd_check_busy();
RS = 0 ; //显示指令
RW = 0 ; //写

12864时钟显示程序

12864时钟显示程序

/************12864时钟显示函数*************//******实现时间走动、按键控制、蜂鸣器闹铃******/#include<reg52.h>#define uchar unsigned char //宏定义#define uint unsigned int //宏定义sbit rs=P0^7;sbit rw=P0^6;sbit en=P0^5;sbit beet=P0^4; //蜂鸣器定义sbit key1=P3^5; //功能选择sbit key2=P3^4; //至加sbit key3=P3^3; //至减char hour=23;char minute=59;char second=46;int years=2012;char month=12;char day=30;uchar count=0;char mm;char cc;uchar code table1[]={"创新工作室"};uchar code table2[]={" 应用电子"};/*************************延时函数****************************/ void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*********地址初始化*************/void xieling_shu(uchar aa,uchar bb){if(aa==1){rs=0;}if(aa==0){rs=1;}rw=0;P2=bb;delay(1);en=1;delay(1);en=0;delay(1);}/***********************液晶12864写入地址*********************/ void xieludizhi(uchar x, uchar y){switch(x){case 1:xieling_shu(1,0x80 + y ); return;//return 返回的意思case 2:xieling_shu(1,0x90 + y ); return;case 3:xieling_shu(1,0x88 + y ); return;case 4:xieling_shu(1,0x98 + y ); return;}}/**********************液晶12864写入字符串********************/ void xiezifuchuan(uchar *dd){while(*dd != '\0'){xieling_shu(0,*dd++ );}}/********************** 液晶12864清屏函数*********************/ void qingping(){xieling_shu(1,0x01); //清屏xieling_shu(1,0x01); //清屏xieling_shu(1,0x01); //清屏delay(20);}/********************液晶12864初始化显示函数******************/ void init_12864(){ mm=0;cc=7; //选择星期初始化xieling_shu(1,0x30); //基本指令操作xieling_shu(1,0x30); //基本指令操作xieling_shu(1,0x0C); //0x0c: 无光标,OXOF: 光标反白显示xieling_shu(1,0x01); //清屏xieling_shu(1,0x06);}/******************* 液晶12864初始化字串显示******************/ void init_zifu(){//qingping();xieludizhi(1,0);xiezifuchuan(table1); //delay(1);xieludizhi(4,0);xiezifuchuan(table2); //delay(1);xieludizhi(3,0);xieling_shu(0,0x30+hour/10);xieling_shu(0,0x30+hour%10);xieling_shu(0,':');xieling_shu(0,0x30+minute/10);xieling_shu(0,0x30+minute%10);xieling_shu(0,':');xieling_shu(0,0x30+second/10);xieling_shu(0,0x30+second%10);xieludizhi(3,5);xiezifuchuan("星期");xieludizhi(2,0);xieling_shu(0,0x30+years/1000);xieling_shu(0,0x30+years%1000/100);xieling_shu(0,0x30+years%100/10);xieling_shu(0,0x30+years%10);xiezifuchuan("年");xieling_shu(0,0x30+month/10);xieling_shu(0,0x30+month%10);xiezifuchuan("月");xieling_shu(0,0x30+day/10);xieling_shu(0,0x30+day%10);xiezifuchuan("日");}/***************星期函数***************/void xingqi(){switch(cc){case 1: xieludizhi(3,7); xiezifuchuan("一"); return;case 2: xieludizhi(3,7); xiezifuchuan("二"); return;case 3: xieludizhi(3,7); xiezifuchuan("叁"); return;case 4: xieludizhi(3,7); xiezifuchuan("四"); return;case 5: xieludizhi(3,7); xiezifuchuan("五"); return;case 6: xieludizhi(3,7); xiezifuchuan("六"); return;case 7: xieludizhi(3,7); xiezifuchuan("日"); return;}}/***************按键程序***************/void anjian(){if(key1==0) //key1按键选择功能{ mm++;delay(1);if(mm==1){xieludizhi(3,3);xieling_shu(0,0x5f);}if(mm==2){TR0=1;xieludizhi(3,2);xieling_shu(0,0x5f);}if(mm==3){xieludizhi(3,0);xieling_shu(0,0x5f);}if(mm==4){xieludizhi(2,5);xieling_shu(0,0x5f);}if(mm==5){xieludizhi(2,3);xieling_shu(0,0x5f);}if(mm==6){xieludizhi(2,1);xieling_shu(0,0x5f);}if(mm==7){xieludizhi(3,5);xieling_shu(0,0x5f);}if(mm==8){xieludizhi(2,7);xieling_shu(0,0x02);}if(mm==9){xieludizhi(2,7);xieling_shu(1,0x01);mm=0;}} //key2按键控制if(mm==1&&key2==0) //秒加1{TR0=0;delay(1);if(key2==0){second++;if(second==60){second=0;}}}if(mm==1&&key3==0) //秒减1{TR0=0;delay(1);if(key3==0){second--;if(second==-1){second=59;}}}if(mm==2&&key2==0) //分加1 { delay(1);if(key2==0){minute++;if(minute==60){minute=0;}}}if(mm==2&&key3==0) //分减1 { delay(1);if(key3==0){minute--;if(minute==-1){minute=59;}}}if(mm==3&&key2==0) //时加1 { delay(1);if(key2==0){hour++;if(hour==24){hour=0;}}}if(mm==3&&key3==0) //时减1 { delay(1);if(key3==0){hour--;if(hour==-1){hour=23;}}}if(mm==4&&key2==0) //日加1 { delay(1);if(key2==0){day++;if(day==31){day=1;}}}if(mm==4&&key3==0) //日减1 { delay(1);if(key3==0){day--;if(day==0){day=30;}}}if(mm==5&&key2==0) //月加1 { delay(1);if(key2==0){month++;if(month==13){month=1;}}}if(mm==5&&key3==0) //月减1 { delay(1);if(key3==0){month--;if(month==0){month=12;}}}if(mm==6&&key2==0) //年加1 { delay(1);if(key2==0){years++;}}if(mm==6&&key3==0) //年减1 { delay(1);if(key3==0){years--;}}if(mm==7&&key2==0) //星期加1 { delay(1);if(key2==0){cc++;if(cc==8){cc=1;}}}if(mm==7&&key3==0) //星期减1 { delay(1);if(key3==0){cc--;if(cc==0){cc=7;}}}}/***************************定时器函数************************/void init_t0_t1() //定时器t0,t1初始化函数{TMOD=0x11;EA=1;ET0=1;TR0=1; //开启中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;}/**************主函数**************/void main(){init_12864();init_t0_t1();while(1){init_zifu();anjian();xingqi();}}/***************中断函数***************/void time() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(hour==0&minute==0&second==0||hour==0&minute==1&second==0||hour==0&minute==1&s econd==5)//采用与或逻辑设定闹铃{beet=0;delay(5);beet=1;}count++;if(count==20){count=0;second++;}if(second==60){second=0;minute++;}if(minute==60){minute=0;hour++;}if(hour==24){hour=0;day++;cc++;if(cc==8){cc=1;}}if(day==31){day=1;month++;}if(month==13){month=1;years++;}}。

LCD12864液晶显示电子钟设计

LCD12864液晶显示电子钟设计

《单片机原理及应用》课程设计说明书题目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 硬件组成框图系统硬件设计本硬件电路主要由四大模块组成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块。

用51单片机在12864液晶上实现 电子钟.

用51单片机在12864液晶上实现  电子钟.

#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intchar second=0;char minite=0;char hour=0;int n=0;bit s2=0;bit s3=0;bit s4=0;bit s5=0;//bit s6=0;/*共阳数码管字型码*//*0,1,2,3,4,5,6,7,8,9,p.,灭*/char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf}; /*P点显示代码序号*/char data find_code[]={0,0,12,0,0,12,0,0};/********************************************************///函数名:void Delay1ms(uint count)//功能:延时时间为1ms//输入参数:count,1ms计数//说明:总共延时时间为1ms乘以count,crystal=12Mhz/********************************************************//* 延迟函数*/void Delay1ms(uint count){uint j;while(count--!=0){for(j=0;j<80;j++);}}/************************************************************************//*显示函数*//************************************************************************/ void disp(){char i,j=0xfe;char k;for(i=0;i<8;i++){P2=j;k=find_code[i];P0=dis_code[k];Delay1ms(1);j=_crol_(j,1);}P0=0xff;}/************************************************************************* 函数原型:keychuli();* 功能:处理与键盘相连的P1口的内容,作为键值。

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:感谢大家的阅读,本文由我司收集整编。

基于单片机的12864液晶显示时钟汇编程序

基于单片机的12864液晶显示时钟汇编程序

;**********此程序用于12864(lgm12641bs1r)液晶显示汉字(没有字库)********* ;****************2011.3.30**************lcm equ p1cs1 bit p2.4 ;cs1片选左屏cs2 bit p2.3 ;cs2片选右屏di bit p2.2rw bit p2.1e bit p2.0rst bit p2.7x equ 30hy equ 31hdd equ 32hxx equ 33hyy equ 34hhz equ 35horg 0000hljmp mainorg 0030hmain: ;lcall lcd_init;mov r5,#0ffh;lcall delaymov xx,#00hmov yy,#00h;mov hz,hz1mov dptr,#tab1lcall disp_hz;lcall delaymov xx,#0hmov yy,#02hmov dptr,#tab2lcall disp_hzmov xx,#1hmov yy,#00hmov dptr,#tab1lcall disp_hzljmp $;************设定起始行子程序********************set_startline:;此处由a值进入add a,#0c0hsetb cs1setb cs2lCALL w_coderet;******************写指令到lcm中******************w_code: ;调用此子程序之前须设定片选,数据由a进入lcall lcd_busyclr di ;低电平选中指令输入端clr rw;lcall lcd_busymov lcm,asetb eclr eret;******************写数据到lcm中******************w_data: ;调用此子程序之前须设定片选,数据由a进入lcall lcd_busysetb di;高电平选中数据输入端clr rwmov lcm,asetb eclr eret;**************设定x,y坐标,数据并由x,y传入*****set_xy:mov a,xadd a,#40hsetb cs1setb cs2lcall w_codemov a,yadd a,#0b8hsetb cs1setb cs2lcall w_coderet;***********开关屏数据由a传入,0为关,1为开*************** dison_off:add a,#3ehsetb cs1setb cs2lcall w_coderet;************复位程序************************************** reset: clr rstmov r5,#20 ;延时20mslcall delaysetb rstmov r5,#20lcall delayret;************初始化lcd**********************************lcd_init:lcall resetmov a,#00hlcall dison_off ;关显示mov y,#00hxx2: mov x,#0mov dd,#00hxx1: lcall lwinc xmov a,xcjne a,#128,xx1inc ymov a,ycjne a,#8,xx2;djnz x,xx1;djnz y,xx2mov a,#01hlcall dison_off ;开显示mov a,#00h ; 起始行为0lcall set_startlineret;************写数据到lcm指定位置**********************;************此子程序由x,y,dd导入数据***************lw: mov a,xcjne a,#64,x1x1: jc x2;mov a,xclr csubb a,#64mov x,alcall set_xyclr cs1setb cs2mov a,ddlcall w_dataljmp fanhuix2: lcall set_xysetb cs1clr cs2mov a,ddlcall w_datafanhui: ret;***************显示一个汉字子程序*****************;**********此程序由xx(表示该行第xx个字),yy(表示第yy行),hz(要写入的汉字)导入数据**********disp_hz:;mov dptr,#tab1mov r7,#0 ;ixx0:mov a,r7mov b,#2mul abinc amov 7fh,adec amovc a,@a+dptrmov dd,amov a,xxmov b,#16mul abadd a,r7mov x,amov y,yylcall lwmov a,7fhmovc a,@a+dptrmov dd,ainc ylcall lwinc r7cjne r7,#16,xx0retdelay: ;1msd3: mov r3,#090hd1: mov r4,#2hd2: djnz r4,d2djnz r3,d1djnz r5,d3retlcd_busy: ;判忙clr disetb rwrettab3: DB 80h,80h,40h,20h,50h,48h,44h,0C3h,44h,48h,50h,20h,40h,80h,80h,00h DB 40h,40h,42h,4Ah,72h,42h,42h,7Fh,42h,42h,62h,5Ah,42h,40h,40h,00htab1:db 40h,40h,40h,40h,20h,42h,20h,42h,50h,4Ah,48h,72h,44h,42h,0C3h,7Fh,db 44h,42h,48h,62h,50h,5Ah,50h,42h,20h,42h,60h,40h,20h,40h,00h,00htab2:DB 00h,80h,60h,0F8h,07h,00h,0FCh,44h,44h,44h,44h,44h,44h,0FCh,00h,00hDB 01h,00h,00h,0FFh,00h,40h,4Fh,44h,44h,44h,44h,44h,44h,4Fh,40h,00h end。

吴鉴鹰单片机项目之12864实现圆形模拟时钟显示

吴鉴鹰单片机项目之12864实现圆形模拟时钟显示

吴鉴鹰单片机项目之 12864 实现圆形动态模拟时钟显示 4
这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有 了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A' 在字模的记载方式如图 1 所示:
图 1 “A”字模图 而中文的“你”在字模中的记载却如图 2 所示:
sbit LCD_CS1_OUT=P2^4;
//端口定义
sbit WJY_K1_IN=P3^5;
//按键
sbit WJY_K2_IN=P3^3;
sbit WJY_K3_IN=P3^1;
吴鉴鹰单片机项目之 12864 实现圆形动态模拟时钟显示 10
sbit WJY_K4_IN=P3^4;
char datastring[13]; ////存放时间的数组
传动系
传动系是将原动系的能量传至擒纵调速器的一组传动齿轮,它是由二轮(中心轮)、三轮 (过轮)、四轮(秒轮)和擒纵轮齿轴组成,其中 轮片是主动齿轮,齿轴是从动齿轮。钟表传动 系的齿形绝大部分是根据理论摆线的原理,经过修正而制作的修正摆线齿形。
擒纵调速器
擒纵调速器是由擒纵机构和振动系统两部分组成,它依靠振动系统的周期性震动,使擒 纵机构保持精确和规律性的间歇运动,从而取得调速作用。叉瓦式擒纵机构是应用最广的一 种擒纵机构。它由擒纵轮、擒纵叉、双圆盘和限位钉等组成。它的作用是把原动系的能量传 递给振动系统,以便维持振动系统作等幅振动,并把振动系统的振动次数传递给指示机构, 达到计量时间的目的。
振动系统主要由摆轮、摆轴、游丝、活动外桩环、快慢针等组成。游丝的内外端分别固 定在摆轴和摆
夹板上;摆轮受外力偏离其平衡位置开始摆动时,游丝便被扭转而产生位能,称为恢复 力矩。擒纵机构完成前述两动作的过程 ,振动系在游丝位能作用下,进行反方向摆动而完 成另半个振动周期,这就是机械钟表在运转时擒纵调速器不断和重复循环工作的原理。

用51单片机控制12864显示数字时钟

用51单片机控制12864显示数字时钟

用51单片机控制12864显示数字时钟用51单片机控制12864显示数字时钟里面有128564显示汉字的程序,自己研究下,不过是用msp430控制的,你改改端口i就可以了。

#include "msp430x26x.h"#define uchar unsigned char#define uint unsigned int#define iDat 1 //数据标志#define iCmd 0 //指令标志#define LCDb_RS 0x20 //定义四个控制引脚#define LCDb_RW 0x40#define LCDb_E 0x80#define LCDb_RST 0x04#define LCDb_L1 0x80 //第一行的地址#define LCDb_L2 0x90 //第二行的地址#define LCDb_L3 0x88 //第三行的地址#define LCDb_L4 0x98 //第四行的地址#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制操作#define LCDb_SET_RW P1OUT|=LCDb_RW#define LCDb_SET_E P1OUT|=LCDb_E#define LCDb_SET_RST P8OUT|=LCDb_RST#define LCDb_CLR_RS P1OUT&=~LCDb_RS#define LCDb_CLR_RW P1OUT&=~LCDb_RW#define LCDb_CLR_E P1OUT&=~LCDb_E#define LCDb_CLR_RST P8OUT&=~LCDb_RST#define LCDb_DO P4OUT //输出数据总线端口定义#define LCDb_FUNCTION 0x38 // 液晶模式为8位,2行,5*8字符#define LCDb_BASCMD 0x30 // 基本指令集#define LCDb_CLS 0x01 // 清屏#define LCDb_HOME 0x02 // 地址返回原点,不改变DDRAM 内容#define LCDb_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动#define LCDb_C2L 0x10 // 光标左移#define LCDb_C2R 0x14 // 光标右移#define LCDb_D2L 0x18 // 屏幕左移#define LCDb_D2R 0x1C // 屏幕又移#define LCDb_ON 0x0C // 打开显示#define LCDb_OFF 0x08 // 关闭显示unsigned char RXData;unsigned char Seg_Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x 6f} ; //数码管编码unsigned char Result[5]; //整数转化成字符串,给LCD显示void Delayms(uint MS){uint i,j;for( i=0;i<ms;i++)< bdsfid="104" p=""></ms;i++)<>for(j=0;j<1141;j++);}void Delayus(uint US){uint i;US=US*5/4;for( i=0;i<us;i++);< bdsfid="112" p=""></us;i++);<>}void LCD12864_portini()P1DIR=0xFF;P4DIR=0xFF;P5DIR=0xFF;P8DIR=0xFF;P8OUT |=LCDb_RST;// P1OUT=0xFF;}/*函数名称: LCD12864_sendbyte功能: 向12864液晶写入一个字节数据或者指令*/void LCD12864_sendbyte(uchar DatCmd, uchar dByte) {if (DatCmd == iCmd) //指令操作LCDb_CLR_RS;elseLCDb_SET_RS;LCDb_CLR_RW; //写操作LCDb_SET_E;LCDb_DO = dByte; //写入数据//Delayus(500);Delayms(1);LCDb_CLR_E;}/*函数名称: LCD12864_sendstr功能: 向12864液晶写入一个字符串参数: ptString--字符串指针返回值 : 无*/void LCD12864_sendstr(uchar *ptString)while((*ptString)!='\0') //字符串未结束一直写{LCD12864_sendbyte(iDat, *ptString++);}}/*函数名称: LCD12864_clear功能: 12864液晶清屏参数: 无返回值 : 无*/void LCD12864_clear(void){LCD12864_sendbyte(iCmd,LCDb_CLS);Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的}/*函数名称: LCD12864_gotoXY功能: 移动到指定位置参数: Row--指定的行Col--指定的列返回值 : 无*/void LCD12864_gotoXY(uchar Row, uchar Col){switch (Row) //选择行{case 2:LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列case 3:LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列case 4:LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列default:LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列}}/*函数名称: LCD12864_initial功能: 12864液晶初始化*/void LCD12864_initial(void){Delayms(100); // 等待内部复位LCD12864_portini(); //端口初始化LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示LCD12864_clear(); //清屏LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定}void Int_char(int data){if(data/1000){Result[0]=data/1000+'0';Result[1]=data/100%10+'0';Result[2]=data/10%10+'0';Result[3]=data%10+'0';Result[4]=0;}else if(data/100){Result[0]=data/100+'0';Result[1]=data/10%10+'0';Result[2]=data%10+'0';Result[3]=0;}else if(data/10){Result[0]=data/10%10+'0';Result[1]=data%10+'0';Result[2]=0;}else{Result[0]=data%10+'0';Result[1]=0;}}unsigned char Key_Press(void){P7OUT=0xF0;if((P7IN&0x10)&&(P7IN&0x20)&&(P7IN&0x40)&&(P7IN&0 x80)) return 0x00; else return 0xFF;}unsigned char Get_Keycode(void){while(1)P7OUT=0xFE; //扫描第一列if((P7IN&0x10)==0) return 0;else if((P7IN&0x20)==0) return 4;else if((P7IN&0x40)==0) return 8;else if((P7IN&0x80)==0) return 12;P7OUT=0xFD; //扫描第二列if((P7IN&0x10)==0) return 1;else if((P7IN&0x20)==0) return 5;else if((P7IN&0x40)==0) return 9;else if((P7IN&0x80)==0) return 13;P7OUT=0xFB; //扫描第三列if((P7IN&0x10)==0) return 2;else if((P7IN&0x20)==0) return 6;else if((P7IN&0x40)==0) return 10;else if((P7IN&0x80)==0) return 14;P7OUT=0xF7; //扫描第四列if((P7IN&0x10)==0) return 3;else if((P7IN&0x20)==0) return 7;else if((P7IN&0x40)==0) return 11;else if((P7IN&0x80)==0) return 15;}}void Init_compa(){CACTL1 = CAON+CAREF_2+CARSEL; // Enable Comp, ref = 0.5*Vcc = Vin- CACTL2 = P2CA0; // Pin to CA0P1DIR |= 0x01; // P1.0 = o/p direction(CAOUT - LED) P1SEL |= 0x01; // P1.0 - CAOUT, option select}** 函数名称:初始化函数*/void Init_IIC(void){P3SEL |= 0x06; // Assign I2C pins to USCI_B0UCB0CTL1 |= UCSWRST; // Enable SW resetUCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous modeUCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW resetUCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHzUCB0BR1 = 0;UCB0I2CSA = 0x50; // Slave Address is 048hUCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation IE2 |= UCB0RXIE; // Enable RX interrupt_BIS_SR(GIE);// RXCompare = 0x0; // Used to check incoming data }/** 函数名称:字节写函数*/void EEPROM_Write(unsigned char high_Address,unsigned char low_Address,unsigned char Word){while (UCB0CTL1 & UCTXSTP); // 确定总线空闲UCB0CTL1 |= UCTXSTT + UCTR; // 发送起始位,确定为发送模式UCB0TXBUF = high_Address; // 发送高位地址while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕UCB0TXBUF = low_Address; // 发送低位地址while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕UCB0TXBUF = Word; // 发送数据while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕UCB0CTL1 |= UCTXSTP; // 发送停止位while((UCB0CTL1 & UCTXSTP)==1); // 判断停止位是否发送完毕}/**** 函数名称:字节读函数*/void EEPROM_readmore(){UCB0CTL1 &= ~UCTR; // 确定为读while (UCB0CTL1 & UCTXSTP); // 总线是否空闲UCB0CTL1 |= UCTXSTT; // 发送开始位}/*** 函数名称:字节写函数**/void EEPROM_read(unsigned char high_Address,unsigned char low_Address){while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent UCB0CTL1 |= UCTXSTT + UCTR; // 发送起始位,确定为写UCB0TXBUF = high_Address; // 发送地址位高位while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕UCB0TXBUF = low_Address; // 发送地址位低位while((IFG2 & UCB0TXIFG)==0); // 判断是否发送完毕UCB0CTL1 &= ~UCTR; // 确定为接收while (UCB0CTL1 & UCTXSTP); //UCB0CTL1 |=UCTXSTT ;while((UCB0CTL1 & UCTXSTT)==1);for(unsigned char i=0x0;i<0x2f;i++); // 延时确定数据已经被发送出去UCB0CTL1 |=UCTXSTP + UCTXNACK; // 发送停止位和NACK 位}/*** 函数名称:接收中断函数**/// USCI_B0 Data ISR#pragma vector = USCIAB0TX_VECTOR__interrupt void USCIAB0TX_ISR(void){RXData = UCB0RXBUF; // Get RX dataInt_char(RXData);LCD12864_gotoXY(2,0); //第2行,第1列显示LCD12864_sendstr(Result);/*key_code[0]=RXData%10+'0';key_code[1]=0;LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr(key_code);*/// __bic_SR_register_on_exit(CPUOFF); // Exit LPM0}void Init_UART(){P3OUT &= ~(BIT4+BIT5+BIT6+BIT7);P3SEL = 0xF0; // P3.4,5,6,7 = USCI_A0 TXD/RXD USCI_A1 TXD/RXDUCA0CTL1 |= UCSSEL_1; // CLK = ACLKUCA0BR0 = 0x03; // 32kHz/9600 = 3.41UCA0BR1 = 0x00; //UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt UCA1CTL1 |= UCSSEL_1; // CLK = ACLKUCA1BR0 = 0x03; // 32kHz/9600 = 3.41UCA1BR1 = 0x00; //UCA1MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UC1IE |= UCA1RXIE; // Enable USCI_A0 RX interrupt _BIS_SR(GIE); //使能中断}void Init_ADC(){ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 ADC12CTL1 = SHP; // Use sampling timer ADC12IE = 0x01; // Enable interruptADC12CTL0 |= ENC; // Conversion enabledP6DIR &= 0x01; // P6.0, i/pP6SEL |= 0x01; // P6.0-ADC option select_BIS_SR(GIE); //使能中断}void Start_ADC(){ADC12CTL0 |= ADC12SC; // Start convn, software controlled }#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = UCA0RXBUF; // TX -> RXed characterLCD12864_sendbyte(iDat,UCA0RXBUF);}#pragma vector=USCIAB1RX_VECTOR__interrupt void USCI1RX_ISR(void){while (!(UC1IFG&UCA1TXIFG)); // USCI_A0 TX buffer ready? UCA1TXBUF = UCA1RXBUF; // TX -> RXed characterLCD12864_sendbyte(iDat,UCA0RXBUF);//UCA1TXBUF = 'z';}// ADC12 interrupt service routine#pragma vector=ADC12_VECTOR__interrupt void ADC12_ISR (void){int i=ADC12MEM0;Int_char(i);LCD12864_gotoXY(2,0); //第1行,第1列显示LCD12864_sendstr(Result);/*key_code[0] =i/1000+'0';key_code[1] =i/100%10+'0';key_code[2] =i/10%10+'0';key_code[3] =i%10+'0';key_code[4] =0;LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr(key_code);*/}void Init_all(){LCD12864_initial(); //LCD初始化,包含了数码管和LED灯初始化P7DIR=0x0F; //键盘扫描初始化P7REN=0xF0; //输入上下拉电阻使能,输出上下拉不使能P7OUT=0xF0; //输入上拉Init_UART(); //串口初始化Init_compa(); //比较器初始化Init_ADC(); //ADC初始化Init_IIC(); //IIC初始化}void Test_Led(){unsigned char i=0;LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("1.Test_LED");for(;i<16;i++){P8OUT=0xF0|i;Delayms(50);}}void Test_Seg(){int i;LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("2.Test_SEG");for(i=0;i<500;i++){//4,3,2,1P1OUT&=~0x02;P1OUT|=0x10|0x08|0x04;P5OUT=Seg_Data[9]; //清楚数码管显示Delayms(1); P1OUT&=~0x04;P1OUT|=0x10|0x08|0x02;P5OUT=Seg_Data[8]; //清楚数码管显示Delayms(1); P1OUT&=~0x08;P1OUT|=0x10|0x04|0x02;P5OUT=Seg_Data[7]; //清楚数码管显示Delayms(1); P1OUT&=~0x10;P1OUT|=0x08|0x04|0x02;P5OUT=Seg_Data[6]; //清楚数码管显示Delayms(1); }P5OUT=0x00; //熄灭所有数码管}void Test_Key(){unsigned char i=0;LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("3.Test_KEY");LCD12864_gotoXY(2,0); //第2行,第1列显示LCD12864_sendstr("按键:");for(;i<16;i++){Int_char(Get_Keycode());LCD12864_gotoXY(2,3);LCD12864_sendstr(" ");LCD12864_gotoXY(2,3);LCD12864_sendstr(Result);Delayms(100); //防抖}}void Test_Uart(){LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("4.Test_UART");LCD12864_gotoXY(2,0); //第2行,第1列显示}void Test_Compa(){LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("5.Test_COMPA");}void Test_ADC(){int i=0;LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("6.Test_ADC");for(;i<200;i++){Start_ADC();Delayms(10);}}void Test_IIC(){LCD12864_gotoXY(1,0); //第1行,第1列显示LCD12864_sendstr("7.Test_IIC");EEPROM_Write(0x00,0x40,7); // 字节写Delayms(10);EEPROM_read(0x00,0x40);}void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//关闭看门狗Init_all();while(1){Test_Led(); //1.测试LEDLCD12864_gotoXY(2,0); //第1行,第1列显示LCD12864_sendstr("请按16键!");while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();Test_Seg(); //2.测试数码管LCD12864_gotoXY(2,0); //第1行,第1列显示LCD12864_sendstr("请按16键!");while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();Test_Key(); //3.测试按键扫描LCD12864_gotoXY(2,0); //第1行,第1列显示LCD12864_sendstr("请按16键!");while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();LCD12864_gotoXY(3,0); //第3行,第1列显示LCD12864_sendstr("请按16键!");Test_Uart(); //4.测试串口while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();Test_Compa(); //5.测试比较器LCD12864_gotoXY(2,0); //第2行,第1列显示LCD12864_sendstr("请按16键!");while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();Test_ADC(); //6.测试ADCLCD12864_gotoXY(3,0); //第3行,第1列显示LCD12864_sendstr("请按16键!");while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();Test_IIC(); //7.测试IICDelayms(100);LCD12864_gotoXY(3,0); //第3行,第1列显示LCD12864_sendstr("测试完成");while(!(Get_Keycode()==15)); //按下最后一键测试下一个例子LCD12864_clear();}}。

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

总结:。

基于msp430f149和DS1302的12864时钟设计

基于msp430f149和DS1302的12864时钟设计

基于msp430f149和DS1302的12864时钟设计本设计系统由主控模块、时钟模块、显示模块、红外解码控制模块、温度模块、掉电存储模块共6个模块组成,主控芯片使用TI系列msp430f149单片机,时钟芯片使用美国DALLAs公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。

采用DSl 302作为主要计时芯片,可以做到计时准确。

更重要的是,DSl302可以在很小电流的后备电源(2.5—5.5v电源,在2.5v时耗电小于300 nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。

显示模块采用12864液晶,控制采用红外遥控器实现调整功能,温度模块采用DS18B20,掉电存储采用msp430f149内部自带的flash实现闹钟数据的掉电保存。

MSP430单片机概述MSP430 系列单片机是美国德州仪器(TI)1996 年开始推向市场的一种16 位超低功耗的混合信号处理器(Mixed Signal Pocessor)。

称之为混合信号处理器,主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。

MSP430 系列单片机的特点虽然MSP430系列单片机推出时间不是很长,但由于其卓越的性能,在短短几年时间里发展极为迅速,应用也日趋广泛。

MSP430系列单片机针对各种不同应用,包括一系列不同型号的器件。

主要特点有:1.超低功耗MSP430系列单片机的电源电压采用~低电压,RAM 数据保持方式下耗电仅,活动模式耗电250pA/MIPS(MIPS:每秒百万条指令数),IO输入端口的漏电流最大仅50nA。

MSP430系列单片机有独特的时钟系统设计,包括两个不同的时钟系统:基本时钟系统和锁频环(FLL和FLL+)时钟系统或DCO 数字振荡器时钟系统。

由时钟系统产生CPU和各功能模块所需的时钟,并且这些时钟可以在指令的控制下打开或关闭,从而实现对总体功耗的控制。

毕业论文12864多功能数字钟

毕业论文12864多功能数字钟

毕业论文12864多功能数字钟题目:多功能数字钟摘要此多功能数字钟系统以89C55单片机作为控制核心,其外围电路包括时钟闹钟模块、温度测量模块、交流电电压测量及过欠压报警模块、交流电频率测量模块。

其中使用串行时钟芯片PCF8563,实现时间的显示设置和闹钟功能。

通过温度传感器AD590、 AC-DC转换芯片AD536及模数转换芯片ICL7135实现温度和交流电压的测量。

利用波形转换电路和单片机内部定时器测量交流电的频率。

利用光电开关实现非接触关闭闹钟功能。

本系统很好的完成了题目要求的基本及发挥要求,并进行了进一步的扩展。

关键词:89C55单片机 AD536 ICL7135目录1、引言 (3)2、方案论证与比较 (3)3、系统原理框图 (3)4、主要电路设计与计算..................................................................4 4.1基本功能部分 (4)4.2温度测量部分 (8)4.3交流电特性测量部分..................................................................11 5、系统软件工作流程图 (14)5.1软件说明 (14)5.2系统软件流程图 (14)6、系统性能测试与分析 (15)6.1测试仪器 (15)6.2测试方法与数据 (15)6.3时钟及闹钟功能测试 (15)6.4温度测试 (15)6.5交流电电压测试及过欠压报警 (15)6.6交流电频率测试 (16)7、误差分析 (17)结论 (18)致谢 (19)参考文献 (20)1、引言本题目的是设计一个数字时钟,要求具有24小时时间、闹钟设置并具有闹铃功能。

同时要求有对环境温度及供电电源特性进行测量的扩展功能。

我们提出了以下几种方案:2、方案论证与比较1)方案一这是一种纯硬件电路系统。

各功能采用分离的硬件电路模块实现。

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

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

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

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

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

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

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

 STC12C5A60S2。

基于单片机的12864显示万年历论文(带原理图和程序)

基于单片机的12864显示万年历论文(带原理图和程序)

毕业设计(论文)论文题目:12864显示电子万年历系别:专业:班级:学号:学生姓名:指导教师:前言目录前言 (II)1绪论 (1)1.1 课题研究的背景 (1)1.2课题的研究目的与意义 (1)1.3课题解决的主要内容 (1)2系统的方案设计与论证 (4)2.1单片机芯片设计与论证 (4)方案1:采用51系列单片机作为系统控制器 (4)方案2:采用凌阳系列单片机作为系统的控制器 (4)2.2按键控制模块设计与论证 (4)2.3时钟模块设计与论证 (5)方案二:采用DS1302为计时时钟芯片 (5)方案三:采用DS12C887为计时时钟芯片 (5)2.4温度采集模块设计与论证 (5)2.5显示模块模块设计与论证 (5)3系统硬件的设计 (1)3.1 STC89C52单片机 (1)3.1.1 最小系统设计 (4)3.1.2 时钟电路 (4)3.1.3 复位电路 (5)3.2时钟芯片DS1302接口设计与性能分析 (5)3.2.1 DS1302性能简介 (5)3.2.2 DS1302接口电路设计 (1)3.3温度芯片DS18B20接口设计与性能分析 (3)3.3.1 DS18B20性能简介 (3)1.DS18B20的主要特性 (3)3.3.3 DS18B20的工作时序 (4)3.4 LCD显示模块 (1)3.4.1 液晶显示控制驱动器的特点 (1)3.4.2 液晶显示控制驱动器的引脚功能 (1)3.4.3 液晶显示控制驱动器的指令系统 (2)3.4.4 液晶显示控制驱动器的软件设计 (3)3.4.5 LCD12864的电路结构特点 (5)3.4.6 LCD12864的应用 (5)4系统软件的设计 (7)4.1主程序流程图的设计 (8)4.2程序设计 (1)4.2.1 DS1302读写程序设计 (1)4.2.2温度程序设计 (1)5系统的机体设计及调试 (2)5.1系统的模块组成 (2)5.2系统软件调试与仿真 (3)5.3系统硬件调试 (4)总结 (5)参考文献: (6)绪论摘要:本文介绍了基于STC89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法。

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

学士学位毕业论文(设计)题目:基于单片机的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时钟发展史很早以前,人类主要是利用天文现象和流动物质的连续运动来计时。

例如,日晷是利用日影的方位计时,阴雨天和夜里没法使用且测量误差较大;漏壶和沙漏是利用水流和沙流的流量计时,虽然晚上可以使用,但是水容易结冰,误差还是大。

后来人们发明了机械钟,以机械振动系统为时间基准,实现对时间的计量,误差达到一天一分钟左右。

而如今的数字钟用数字电路实现时、分、秒,精度较高,一天的误差不到一秒。

目前精度最高的时钟要属原子钟,其每天的误差小于一亿分之一秒。

随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。

二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。

第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。

第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时和月差从分级缩小到秒级。

第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。

1.2 目前的研究现状我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。

商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。

在国内,电子钟因LCD数字显示效用直接有效,所以大多运用在城市的主要营业场所,以及车站、码头等公共场所。

在对公共场所的电子钟设定的时候,使用者还可根据周边的气候、温度等对LCD屏进行设置。

同时,因为LCD的显示耗电量很省,所以能够保持持续的工作效果。

1.3研究目的及意义电子钟亦称数字显示钟,是一种用数字电路技术实现时、分、秒计时的装置,与机械时钟相比,直观性为其主要显著特点,且因非机械驱动,具有更长的使用寿命,相较石英钟的石英机芯驱动,更具准确性。

电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大地方便。

相对于其他时钟类型,它的特点可归结为“两强一弱”:比机械钟强在观时显著,比石英钟强在走时准确,但是它的弱点为显示较为单调。

钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。

STC89C51是由深圳宏晶科技公司推出的一种小型单片机。

其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被广大用户接受。

本文介绍了基于STC89C51单片机设计的电子时钟。

可以同时显示年、月、日、星期、时、分、秒等信息,还具有时间红外校准等功能。

2 总体方案设计2.1 方案的选择2.1.1设计要求A.具有年、月、日、周、时、分、秒的显示功能;B.具有年、月、日、周、时、分、秒的校准功能;C.具有图片显示功能;D.具有红外遥控功能。

2.1.2方案的选择本课题是基于单片机控制的电子时钟设计,MCS-51系列的单片机集成了8位CPU、4K字节ROM、128字节RAM、2个16位定时器/计数器和4个8位I/O 口等基本功能部件,基本能满足本课题的研究,所以主控芯片选择STC89C51单片机。

时钟的显示功能用128*64LCD来实现,其显示分辨率为128×64,内置8192个16*16点汉字,和128 个16*8 点ASCII 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4 行16×16 点阵的汉字,也可完成图形显示。

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

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

为了更精确的显示时间,需要一时钟芯片来进行计时。

DS1302是由美国DALLAS 公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。

它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。

对于红外遥控功能,主要用来调整时间和切换显示页面。

本课题中选用通用红外遥控器和红外接收头。

2.2总体方案组成框图根据以上硬件的选择,系统的硬件框图2.1所示。

图2.1 系统硬件框图3系统硬件设计3. 1主芯片模块STC89C51单片的引脚功能图如图3.1所示,逻辑符号如图3.2所示,它有40个引脚。

图3.1 STC89C51引脚图图3.2 STC89C51逻辑图(1)电源引脚(a) VCC(40):电源正端,外接+5V。

相关文档
最新文档