12864液晶电子钟_具有按键可调、闹钟、温度显示

合集下载

12864点阵型液晶显示屏的工作原理

12864点阵型液晶显示屏的工作原理

12864点阵型液晶显示屏的工作原理12864点阵型液晶显示屏的基本原理与使用方法转自点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。

对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。

而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。

而剩下的低128位则留给英文字符使用,即英文的内码。

那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示:图2 “你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵)汉字。

管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD +5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR 6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRA M数据读到DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED+ - LED背光板电源20 LED- - LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。

LCD12864液晶中文说明书

LCD12864液晶中文说明书
液晶显示模块技术手册
J12864中文/JGD12864中文/FY12864ZW
特色:(1)模组背部自带10K3*3硬封可调电位器,可以调到理想对比度
(2)LED背光极性可调,JP4为液晶背光正负反接处,此模组背光为4颗LED灯,非普通背光
(3)模组自带原装三星正品防静电电容,抗干扰性更强C6C7C8
C固定为0
第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)
四、用户指令集
1、指令表1:(RE=0:基本指令集)
指令
指令码
说明
执行时间
(540
KHZ)
RS
RW
DB7
DB6
DB5
DB4
(4)串并口可通过两种方式调节1PSB脚控制2JP2短路到+
为并口短路到-为串口
(5)自改3.3V可通过JP3调节,默认接+级为5V,接-为3.3V,C4C5加极性电容即可型号
为106A14FH4,背光电阻33欧改成3.3欧
+
一、液晶显示模块概述
12864中文汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
RAM
1
1
D7
D6
D5
D4
D3
D2
D1
D0
从内部RAM读取资料
(DDRAM/CGRAM/IRAM/G
72us
72us
读取忙碌标志
(BF)和地址
0
1
BF

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法

12864‎L CD液晶‎显示原理及‎使用方法液晶简介液晶是一种‎在一定温度‎范围内呈现‎既不同于固‎态液态又不‎同于气态的‎特殊物质态‎,它既具有各‎向异性的晶‎体所特有的‎双折射性又‎具有液体的‎流动性液晶‎显示器件(英文的简写‎为L CD)就是利用液‎晶态物质的‎液晶分子排‎列状态在电‎场中改变而‎调制外界光‎的被动型显‎示器件。

点阵式图形‎液晶显示屏‎是LCD 的一种能够‎动态显示图‎形汉字以及‎各种符号信‎息为各种电‎子产品提供‎了友好的人‎机界面点阵‎式图形液晶‎显示屏的主‎要特点如下‎(这些特点也‎就是LCD‎的特点):工作电压低‎、微功耗、体积小、可视面积大‎、无电磁辐射‎、数字接口、寿命长等特‎点。

12864‎L CD是一‎种图形点阵‎液晶显示器‎,它主要由行‎驱动器/列驱动器及‎128×64 全点阵液晶‎显示器组成‎。

可完成图形‎显示,也可以显示‎8×4 个(16×16 点阵)汉字或者显‎示16×4个(8×16 点阵)ASCII‎码。

分为两种,带字库的和‎不带字库的‎。

不带字库的‎L CD需要‎自己提供字‎库字模,此时可以根‎据个人喜好‎设置各种字‎体显示风格‎,设计上较为‎灵活。

带字库的L‎CD提供字‎库字模,但是只能显‎示GB23‎12的宋体‎。

各有优缺点‎,根据不同应‎用场景灵活‎选择。

其液晶模块‎原理图如下‎所示。

12864‎L CD点阵‎图形液晶模‎块原理框图‎下面给出了‎其应用连接‎电路,分别介绍其‎各引脚的功‎能和作用。

如下表所示‎:12864‎L CD 的引脚说明‎管脚号管脚‎名称LEV‎ER 管脚功能描‎述1GND 0 电源地2VCC+5.0V 电源电压3VLCD‎- 液晶显示器‎驱动电压4RS (D/I)‎H/LD/I=“H”,表示DB7‎∽DB0 为显示数据‎D/I=“L”,表示DB7‎∽DB0 为显示指令‎数据5R/W‎H/L‎R/W=“H”,E=“H”数据被读到‎D B7∽DB0R/W=“L”,E=“H→L”数据被写到‎IR或DR6EN H/L‎R/W=“L”,E 信号下降沿‎锁存DB7‎∽DB0R/W=“H”,E=“H”DDRAM‎数据读到D‎B7∽DB0 7DB0 H/L 数据线8DB1 H/L数据线9DB2 H/L 数据线10DB3‎H/L 数据线11DB4‎H/L数据线12DB5‎H/L数据线13DB6‎H/L数据线14DB7‎H/L数据线15CS1‎H/L H:选择芯片(右半屏)信号16CS2‎H/L H:选择芯片(左半屏)信号17RET‎H/L复位信号‎,低电平复位‎18VEE‎ -10VLC‎D驱动负电压‎19LED‎+- LED 背光板电源‎20LED‎-- LED 背光板电源‎12864‎L CD点阵‎图形液晶模‎块应用连接‎电路液晶驱动设‎置在理解12‎864LC‎D硬件原理‎和管脚功能‎之后,可以针对L‎CD进行驱‎动的编写,分两种情况‎:仿真环境下‎和实物开发‎板编程。

12864LCD液晶显示屏中文资料

12864LCD液晶显示屏中文资料

12864LCD液晶显示屏中文资料一、概述二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。

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

三、基本特性:(1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

2.2并行接口的J8和“VCC”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

LCD12864液晶显示器中文说明

LCD12864液晶显示器中文说明

一、液晶显示模块概述12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等二、外形尺寸1.外形尺寸图2.主要外形尺寸项目标准尺寸单位模块体积113.0×65.0×12.8mm定位尺寸105.0×55.0mm视域73.4×38.8 mm行列点阵数128×64dots点距离0.52×0.52 mm点大小0.48×0.48 mm二、模块引脚说明128X64 引脚说明引脚号引脚名称方向功能说明1 VSS - 模块的电源地2 VDD - 模块的电源正端3 V0 - LCD驱动电压输入端4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号5 R/W(SID) H/L 并行的读写选择信号;串行的数据口6 E(CLK) H/L 并行的使能信号;串行的同步时钟7 DB0 H/L 数据08 DB1 H/L 数据19 DB2 H/L 数据210 DB3 H/L 数据311 DB4 H/L 数据412 DB5 H/L 数据513 DB6 H/L 数据614 DB7 H/L 数据715 PSB H/L 并/串行接口选择:H-并行;L-串行16 NC 空脚17 /RET H/L 复位低电平有效18 NC 空脚19 LED_A - 背光源正极(LED+5V)20 LED_K - 背光源负极(LED-OV)逻辑工作电压(VDD):4.5~5.5V电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)三、接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料2、串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制—格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)四、用户指令集指令指令码说明执行时间(540KHZ)RSRWDB7DB6DB5DB4DB3DB2DB1DB清除显示0 0 0 0 0 0 0 0 0 1将DDRAM填满“20H”,并且设定DDRAM的地址计数器(AC)到“00H”4.6ms地址归位0 0 0 0 0 0 0 0 1 X设定DDRAM的地址计数器(AC)到“00H”,并且将游标移到开头原点位置;这个指令并不改变DDRAM的内容4.6ms进入点设定0 0 0 0 0 0 0 1 I/D S指定在资料的读取与写入时,设定游标移动方向及指定显示的移位72us显示状态开/关0 0 0 0 0 0 1 D C BD=1:整体显示ONC=1:游标ONB=1:游标位置ON72us游标或显示移位控制0 0 0 0 0 1S/CR/LX X设定游标的移动与显示的移位控制位元;这个指令并不改变DDRAM的内容72us功能设定0 0 0 0 1 DL XREX XDL=1 (必须设为1)RE=1:扩充指令集动作72us备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。

12864中文资料

12864中文资料

12864液晶名称含义12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。

基本参数液晶屏类型 STN FSTN模块显示效果:黄绿底黑字蓝底白字白底黑字视角6点钟12点钟驱动方式 1/64 DUTY 1/9 BIAS背光LED白色LED黄绿色控制器KS0108或兼容ST7920 T6963C数据总线 8 位并口/6800 方式串口温度特性工作温度:-20℃~+70℃ 储藏温度:-30℃~+80℃点阵格式 128 x 64基本用途:该点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。

基本用途:该点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。

液晶模组使用注意事项1 当您在你的产品设计中使用本液晶模组,注意液晶的视角与你的产品用途相一致。

2 液晶屏是玻璃为基础的,跌落或与硬物撞击会引起液晶屏破裂或粉碎。

尤其是边角处。

3 尽管在液晶表面的偏振片有抑制反光的表层,应当小心不要划伤表面,一般推荐在液晶表面采用透明塑胶材料的保护屏。

4 如果液晶模组储藏在低于规定的温度以下,液晶材料会凝结而性能恶化。

如果液晶模组储藏在高于规定的温度以上,液晶材料的分子排列方向会转变为液态,可能无法恢复到原来的状态。

超出温度和湿度范围,会引起偏振片剥落或起泡。

因此,液晶模组应储藏在规定的温度范围。

5 如液晶表面遇口水或滴水,应立即擦除,避免长时间过后引起色彩变化或留下污点。

水蒸气会引起ITO电极腐蚀。

6 如果需要清洁液晶屏表面,应该用棉或软布轻快地擦拭,仍不能清除时,呵气之后再擦拭。

7 液晶模组的驱动应遵照规定的额定指标,避免故障及永久损坏。

对液晶材料施加直流电压,会引起液晶材料迅速恶化,应该确保提供交流波形的M信号的连续应用。

特别是,在电源开关时应遵照供电顺序,避免驱动锁存及直流直接加至液晶屏。

8 机械注意事项:a) 液晶模组是在高精度下调试安装的。

避免外力撞击,不要对其改变或修改。

b) 不要篡改金属框的任何突出部分。

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时钟显示摘要电子时钟是一种非常广泛日常计时工具,给人们的带来了很大的方便,在社会上越来越流行。

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

该电子时钟主要采用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时钟发展史很早以前,人类主要是利用天文现象和流动物质的连续运动来计时。

基于51单片机的12864液晶显示的万年历

基于51单片机的12864液晶显示的万年历

附录程序
/*****************说明*********************************** 基于 51 单片机的 12864 液晶显示的万年历
版权所有,如需转载请通知本人,不得用于商业用途 ,仅限学习交流之用
*****************************************************************/
3
图-1 主控制系统
2.3.2 时钟电路模块的设计 DS1302 是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、
时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进 行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一 个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容, 但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
//延时 1MS/次
unsigned char
{
sec,min,hour,day,month,year,cen,week,
unsigned char i;
next,aa,bb,cc,dd,mm,temp0,LunarMonth,
while(--a)
LunarDay,LunarYear;
{
int temp;
9三三系统的软件设计系统的软件设计3131程序流程框图程序流程框图图图aa主程序流程图主程序流程图10图b计算阳历程序流程图计算阳历程序流程图1112图图cc时间调整程序流程图时间调整程序流程图yynnyynnyy图图dd设置温度报警闹钟的数据保存到设置温度报警闹钟的数据保存到at24c02at24c02中中是否进入温度报警上下限温度设置设置是否进入设置闹钟时间设置报警温度上下限开始设置闹钟的时间开始报警闹钟的开关是否开起at24c02存设置的功能保蜂鸣器开启闹钟报警功能开启结束设置13五五作品功能实现作品功能实现通过硬件的焊接与程序的编写本电子万年历终于完成了实现的功能如下

LCD12864指针型时钟

LCD12864指针型时钟
RW=1;
RS=1;
EN=0;
delay(2);
EN=1;
delay(3);
i=LCDDATA;
delay(3);
EN=0;
return i;
}
/*******************************************
{
uchar d1,d2,add,ah;
d1=shu/10;
d2=shu%10;
if(x==0)
ah=0x80;
else if(x==1)
ah=0x90;
else if(x==2)
ah=0x88;
else ah=0x98;
add=ah+y; //相当于ah+al
{
uchar x_pos,y_pos,x_bit;
uint read_data1,read_data2,dat1,dat2;
//计算LCD位置
x_pos=X/16; //取16*16首地址
y=0x80;
x=0x80;
for(i=0;i<32;i++)
{
writecmd(y);
writecmd(x);
for(j=0;j<16;j++)
{
writedate(0x00);
}
y++;
if(Y>31)
x_pos+=8; //计算该点所属LCD液晶中X坐标位置,上半屏0-7,下半屏8-15
x_bit=X%16; //该点位于所在16bit中的第几位
sbit RW = P0^6;

LCD12864液晶的使用

LCD12864液晶的使用

#define uchar unsigned char
#define uint unsigned int
#define LCD_databus P0 //LCD8 位数据口
uchar num;
sbit RS=P2^2;
//RS 为 0 命令;1 数据
sbit RW=P2^1;
//RW 为 1--写;0--64 液晶的使用
大海橡树原创
LCD12864 分为两种,带字库和不带字库的,个人比较喜欢不带字库的,因为显示汉字 的时候可以选择自己喜欢的字体,而带字库的液晶,只能显示 GB2312 的宋体,当然了,也 可以显示其他的字体,不过不是液晶本身字库中带的了,而是用图片的形式显示。本讲由于 内容较多,故分两篇进行讲解,本人水平有限,难免有错误之处,还望大家批评改正!
{
P0=0x00;
RS=0;
RW=1;
EN=1;
while(P0 & 0x80);
EN=0;
}
void write_LCD_command(uchar value)
{
Read_busy();//每次读写都要忙判断
RS=0;
//选择命令
RW=0;
//读操作
LCD_databus=value;
EN=1; _nop_(); _nop_(); EN=0; }
//汉字的下半部分
}
}
void main()
{
InitLCD();
//初始化
ClearScreen(0);
//清屏
Set_line(0);
//显示开始行
Display(1,0,2*16,huan);//欢
Display(1,0,3*16,ying);//迎

多功能语音报时数字钟的设计 (4)

多功能语音报时数字钟的设计 (4)

多功能语音报时数字钟的设计摘要:自进入21世纪以来,电子产业飞速发展,各种新兴的电子产品布满了电子专柜,电子产品几乎走进了家家户户,走进了社会的各个行业,有力的推动了社会生产力的发展和电子信息化、电子智能化的提高。

数字钟也在发生着各种各样的变化,由体积较大、功能少、运行不精确的机械钟变为在液晶显示屏上显示数字的数字钟,再到多种功能于一钟的语音报时数字钟等等。

本设计是实现一款可正常显示当前时间,测量当前温度,带有语音报时的多功能数字钟。

本设计是采用AT89C51单片机控制的多功能语音报时数钟,可以显示年、月、日、时、分、秒、星期、温度。

具有年、月、日、时、分校准功能,自动提取温度并显示功能,语音报时功能,调整时间按下相应键会发出嘟嘟提示声功能。

采用DS1302时钟芯片进行时钟控制,DS18B20传感器实现温度采集功能,LCD12864作为液晶显示模块,ISD1420语音芯片实现语音播报时间功能。

钟表的多功能化给我们生活带来了很大的改善,比如定时报警、备忘提醒、电气设备的自动断电、自动开启关闭等功能。

数字时钟对世界有着重要的影响,对工业、电子业、商业有着重要的推进作用,使用简单方便,成本低,显示直观,在广阔的市场具有非常很好的前景市场。

数字时钟之所以这么受广大的欢迎,它使用简单直观,数字时钟在显示方面能清楚的在LED显示屏上显示出年、月、日、周日、时、分、秒,还有调准时间的准确度的功能,并且能够显示当日的温度情况。

但目前市场上的数字时钟还比较机械性和传统性,在实际运用过程中不够灵活。

而随着社会的不断发展,人们对数字时钟的控制要求越来越高,数字时钟应用到很多方面,在报警和闹铃的方面都应用到数字时钟准确的计时功能,还有定时器,微波炉,自动通电器,数字时钟可以成为自己生活中的小助手,可以轻松掌控时间,又能了解天气及温度的变化。

语音报时多功能数字时钟改善了人们的生活质量,为人们的生活、工作带来极大的便利。

关键词:数字钟单片机温度液晶显示语音报时一、绪论时间对于我们每个人都很重要,包括老人和小孩,通过眼睛看时间,当然可以看到当前时间,但是对于视力不好老人和不认识钟表的小孩来说,语音报时数字钟就给他们带来了很大的帮助,只需要按下相应键就可以自动播报获得时间。

TM12864Z-1中文规格书

TM12864Z-1中文规格书

72us
开/关
B=1:游标位置 ON
设定游标的移动与显示的移
游标或
位控制位元;这个指令并不改
显示移 0 0 0 位控制
0
0
1
S/ R/
变 DDRAM 的内容
C L X X S/C=0,R/L=0: 游标向左移动 72us
S/C=0,R/L=1:游标向右移动
功能设

000
0
1
DL=1 (必须设为 1)
深圳市天广宽科技有限公司
ShenZhen TGK Technology Co.,LTD
Specification
For LCD Module
128x64 dots
Mode:TM 12864Z-1
深圳市天广宽科技有限公司 联系人:刘先生 15814006809 电 话:0755- 83685744, 33591871. 传 真:0755-33591872, 83685744 邮 箱:sg2966@ QQ:474301523 网 址: 深圳市福田区赛格电子市场天广宽电子经营部 销售公司地址: 深圳市福田区华强北路赛格广场二楼 2966#
H
AC6 AC5 AC4 AC3 AC2 AC1
AC0
功能:设定 DDRAM 位址到位址计数器(AC)
9、读取忙碌状态(BF)和位址 CODE: RS RW DB7
L
H
BF
DB6 DB5 DB4 DB3 DB2 DB1 DB0 AC6 AC5 AC4 AC3 AC2 AC1 AC0
功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值
指令表—2:(RE=1:扩充指令集)
指令码

smg12864l

smg12864l
1/5
长沙太阳人电子有限公司
◆控制器接口说明(NT7532 及兼容芯片)
SMG12864L 使用说明书
1 基本操作时序:
1.1 读状态:输入:A0=L,CS=L,RD=L, WR=H 1.2 写指令:输入:AO=L,CS=L,RD=H, WR=L ,D0~D7=指令码 1.3 读数据:输入:A0=H,CS=L,RD=L, WR=H 1.4 写数据:输入:A0=H,CS=L,RD=H, WR=L ,D0~D7=数据
长沙太阳人电子有限公司
SMG12864L 使用说明书
◆概述:
SMG12864L 标准图形点阵型液晶显示模块(LCM),采用点阵型液晶显示器(LCD),可显示 128X64 点阵,点尺寸为
0.29X0.34(WXH)mm,内置 NT7532 接口型液晶显示控制器,数字可编程 LCD 偏压调节,宽电压工作范围,可与 MCU
极限值 典型值 -
最大值 140 100 -
单 测试条件

ns 引脚 A0,/CS ns
ns 引脚/WR,/RD ns
ns
ns 引脚 DB0~DB7 ns
ns

2011-3
5/5
输出:D0~D7=状态字 输出:无 输出:D0~D7=数据 输出:无
2 状态字说明
STA7 STA6 STA5 STA4 STA3 STA2 STA1 STA0
D7
D6
D5
D4
D3
D2
D1
D0
STA0-3 STA4 STA5 STA6 STA7
未用 初始化状态 液晶显示状态 列序方向 读写操作使能
1 复位 0 1: 关闭 0: 1 正向 0 1: 禁止 0:

CH12864B中文使用说明书

CH12864B中文使用说明书

Page 4
ch
深圳市川航电子科技有限公司 ShenZhen ChuanHang Electronic Technology CO.,LTD
TEL: 0755-29035962 E-mail: chuanhanglcm@
3.模块外形机构图
TEL: 0755-29035962 E-mail: chuanhanglcm@
目录
1.概述...................................................................(4) 2.CH12864B 液晶模块的独特优势.........................................(4) 3.外形机构图.............................................................(5) 4.驱动原理架构图........................................................(5) 5.规格说明...............................................................(6) 6.最大典型值.............................................................(6) 7.电气特性...............................................................(7) 8.LCD 对比度调节方式....................................................(7) 9.接口引脚定义
最小值
典型值 最大值

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 液晶显示屏中文资料

光标/闪烁控制电路 此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定 DDRAM 中的光标或闪烁位置。
四、指令说明
模块控制芯片提供两套控制命令,基本指令和扩充指令如下:
指令表 1:(RE=0:基本指令)
指令
清除 显示 地址 归位
指令码 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
● 字型产生 RAM(CGRAM) 字型产生 RAM 提供图象定义(造字)功能, 可以提供四组 16×16 点的自定义图象空间,使用
者可以将内部字型没有提供的图象字型自行定义到 CGRAM 中,便可和 CGROM 中的定义一样地通过 DDRAM 显示在屏幕中。
● 地址计数器 AC 地址计数器是用来贮存 DDRAM/CGRAM 之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写 入 DDRAM/CGRAM 的值时,地址计数器的值就会自动加一,当 RS 为“0”时而 R/W 为“1”时,地址计数器的值会被读取到 DB6——DB0 中。
AC6 AC5 AC4 AC3 AC2 AC1 AC0 再设定水平(行)地址 AC3AC2AC1AC0
将以上 16 位地址连续写入即可
备注:当 IC1 在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取 BF 标志时,BF 需为零,方可接受新的指令;
如果在送出一个指令前并不检查 BF 标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指
R/W=“L”,E=“H→L”, DB7——DB0 的数据被写到 IR 或 DR
6 E(SCLK) H/L
使能信号
7
DB0 H/L
三态数据线8D源自1 H/L三态数据线9
DB2 H/L

12864液晶电子钟_具有按键可调、闹钟、温度显示剖析

12864液晶电子钟_具有按键可调、闹钟、温度显示剖析

//程序已全部通过硬件测试, 请放心使用。

(没有使用到 DS1302)/************12864 时钟显示函数 *************//****** 实现时间走动、按键控制、蜂鸣器闹铃、温度显示 ******/#include<reg52.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned int/******************** 功能:定义液晶 12864 控制端接口*********************/sbit rs=P2八6;// 注意: rw 控制端始终为低电平,直接在硬件上接低电平sbit en=P2A 7;sbit wd=P2A0; ll 温度传感器信号线/******************** 功能:定义蜂鸣器、按键 接口*********************/sbit beet=P2A2;sbit key1=P1A0;sbit key2=P1A1;sbit key3=P1A2;sbit key4=P"3;ll 北京时间与闹钟时间画面切换 l******************** 功能:定义数据初始值******************************lchar hour=23,minute=59,second=58,count=0;char shi=0,fen=0,miao=0,hm;int years=2012;char month=12,day=30,mm=0,cc=7;uint temp;float f_temp;功能:定义数组字符串/********************/*******************//蜂鸣器定义 //功能选择 //至加 //至减 /******************** *********************/uchar code table1[]={" 幸福牌电子钟"}; uchar code table2[]={"温馨提示:00.0°C "};***************************/ 功能:延时函数void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} 功能:蜂鸣器响应***********************l void fengmingqi(){ beet=0;delay(1);beet=1;delay(1);}void init_12864(){xieling_shu(1,0x30);//基本指令操作 xieling_shu(1,0x30); //基本指令操作xieling_shu(1,0x0C); //0x0c: 无光标, OXOF: 光标反白显示xieling_shu(1,0x01); // 清屏****************** 功能:液晶 12864 读写数据 ******************/ void xieling_shu(uchar aa,uchar bb) { if(aa==1){rs=0;} if(aa==0){rs=1;} P0=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 初始化指令操作 ***************** */****************** xieling_shu(1,0x06); } 功能:液晶 12864 初始化字串显示 ******************/ void init_zifu() { xieludizhi(1,0);xiezifuchuan(" xieludizhi(2,0);xiezifuchuan(" xieludizhi(3,0);xiezifuchuan(" 欢迎使用 幸福牌电子钟 订购热线 "); "); "); xieludizhi(4,0);xiezifuchuan("Phone:0777-66914"); qingping();xieludizhi(1,0);xiezifuchuan(table1); delay(1); xieludizhi(4,0);xiezifuchuan(table2); delay(1); xieludizhi(3,5);xiezifuchuan("星期"); 日"); delay(1); delay(1); delay(1); delay(9534); /******************* xieludizhi(2,2);xiezifuchuan('年 月 } 功能:时间、年月日 显示函数 void display() { 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(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); xieludizhi(2,3); // 显示 月 xieling_shu(0,0x30+month/10); xieling_shu(0,0x30+month%10); xieludizhi(2,5); // 显示 日 xieling_shu(0,0x30+day/10); xieling_shu(0,0x30+day%10); } 功能:闹钟(时间、年月日) 显示函数 ********************/ void display1() {xieludizhi(3,0); // 显示 时 分 秒xieling_shu(0,0x30+shi/10);xieling_shu(0,0x30+shi%10);xieling_shu(0,':');xieling_shu(0,0x30+fen/10);xieling_shu(0,0x30+fen%10);xieling_shu(0,':');xieling_shu(0,0x30+miao/10);xieling_shu(0,0x30+miao%10);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);xieludizhi(2,3); // 显示 月xieling_shu(0,0x30+month/10);xieling_shu(0,0x30+month%10);xieludizhi(2,5); // 显示 日xieling_shu(0,0x30+day/10);xieling_shu(0,0x30+day%10);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('B "); return;void anjian()if(key4==0){delay(1);hm=~hm;while(key4==0);}if(key1==0){delay(1);***************** *********************************** 星期函数 ************************************************ }功能:按键程序 *****************mm++;if(hm!=0){if(mm>=4)mm=0;}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,7);xieling_shu(0,0x5f);}if(mm==8){xieludizhi(2,7);xieling_shu(0,0x02);} if(mm>=9){xieludizhi(2,7);xieling_shu(0,0x20);mm=0;} // mm=0; 跳出调整时间while(key1==0);}功能:key2按键力卩减功能*******************/ *****************if(mm==1&&key2==0) //秒加1if(hm==0){TR0=0;delay(1);if(key2==0){second++;if(second>=60){second=0;}}} if(hm!=0){delay(1);if(key2==0){miao++;if(miao>=60){miao=0;}}}while(key2==0);}if(mm==1&&key3==0) //秒减1if(hm==0){TR0=0;delay(1);if(key3==0){second--;if(second<=-1){second=59;}}} if(hm!=0){delay(1);if(key3==0){miao--;if(miao<=-1){miao=59;}}}while(key3==0);}if(mm==2&&key2==0) //分加1{if(hm==0){delay(1);if(key2==0){minute++;if(minute>=60){minute=0;}}} if(hm!=0){delay(1);if(key2==0){fen++;if(fen>=60){fen=0;}}}while(key2==0);}if(mm==2&&key3==0) //分减1{if(hm==0){delay(1);if(key3==0){minute--;if(minute<=-1){minute=59;}}}if(hm!=0){delay(1);if(key3==0){fen--;if(fen<=-1){fen=59;}}}while(key3==0);}if(mm==3&&key2==0) //时加1{ if(hm==0){delay(1);if(key2==0){hour++;i f(hour>=24){hour=0;}}}if(hm!=0){delay(1);if(key2==0){shi++;if(shi>=24){shi=0;}}}while(key2==0);}if(mm==3&&key3==0) //时减1{ if(hm==0){delay(1);if(key3==0){hour--;if (hour<=-1){hour=23;}}}if(hm!=0){delay(1);if(key3==0){shi--;if(shi<=-1){shi=23;}}}while(key3==0);}if(mm==4&&key2==0) // 日加1{delay(1);if(key2==0){ day++; if(day>=31){day=1;} }while(key2==0);}if(mm==4&&key3==0) // 日减1{delay(1);if(key3==0){ day--; if(day<=0){day=31;} }while(key3==0);}if(mm==5&&key2==0) // 月加1{delay(1);if(key2==0){month++;if(month>=13){month=1;}}while(key2==0);}if(mm==5&&key3==0) // 月减1{delay(1);if(key3==0){month--;if(month<=0){month=12;}}while(key3==0);}if(mm==6&&key2==0) //年加1{delay(1);if(key2==0){years++;}// 不设置年限while(key2==0);}if(mm==6&&key3==0) // 年减1{delay(1);if(key3==0){years--;}while(key3==0);}if(mm==7&&key2==0) // 星期加1{ delay(1);if(key2==0){cc++;if(cc>=8){cc=1;}} while(key2==0);}if(mm==7&&key3==0) // 星期减1{delay(1);if(key3==0){cc--;if(cc==0){cc=7;}}while(key3==0);}}****************************************************************** *****************************************************void dsreset(void){uint i;wd=0;i=103;while(i>0)i--;wd=1;i=4;bit tempreadbit(void){uint i;bit dat;wd=0;i++; //i++ 起延时作用wd=1;i++;i++;dat=wd;i=8;while(i>0)i--;return (dat); uchar tempread(void){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面, 这样刚好一个字节在DAT 里}return(dat);******************************* 功能: 18B20 所有函数 ***************** 18B20 复位,初始化函数 ***************************************** while(i>0)i--; } 18B20读 1 位 函数 ***************************************** }18B20 读 1 个字节 函数************************void tempwritebyte(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) // 写 1{wd=0;i++;i++;wd=1;i=8;while(i>0)i--;}else{wd=0; //写 0i=8;while(i>0)i--;wd=1;i++;i++;}}}/******************* 18B20 开始获取温度并转换 函数**************************/void tempchange(void){dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读 ROM 指令tempwritebyte(0x44); // 写温度转换指令}/******************* 18B20 读取寄存器中存储的温度数据**************************/uint get_temp(){uchar a,b;dsreset(); delay(1);***************** }18B20 写一个字节数据 函数 ************************函数tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低 8 位b=tempread();//读高 8 位 temp=b; temp<<=8; //两个字节组合为 1 个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为 12 位 分辨率位 0.0625°temp=f_temp*10+0.5; //乘以 10 表示小数点后面只取 1 位,加 0.5 是四舍五入f_temp=f_temp+0.05;return temp; //temp 是整型void comm(char *parr){do while(1){ if(count>5&&count<18){tempchange(); //开始获取温度get_temp(); //读取寄存温度 ***************** }18B20 发送数据 函数 ************************{SBUF = *parr++; //发送数据while(!TI);TI=0; }while(*parr);**********************// 等待发送完成标志为 1 //标志清零 //保持循环直到字符为 '\0' } 」r\?r zfefr *************************** void main(){TMOD=0x01;uchar buff[4]; // 设置 T0 为工作方式 1 EA=1; ET0=1; TR0=1; //开启 T0 中断功能:sprintf(buff,"%f",f_temp);comm(buff);xieludizhi(4,5);xieling_shu(0,0x30+ temp/100);xieling_shu(0,0x30+temp%100/10);xieling_shu(0,0x2e);xieling_shu(0,0x30+temp%100%10);if(hm==0)display() ;}// 如果hm=0 显示北京时间,否则显示闹钟时间else display1();anjian(); // 按键判断xingqi(); // 显示星期if(minute==59&&second==59){fengmingqi();} // 整点报时if(shi==hour&&fen==minute&&miao>=second&&miao<=second+3){fengmingq/************************i();}// 闹钟}}功能:中断函数**************************/void time() interrupt 1{ TH0=-50000/256; TL0=-50000%256;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++;}}}}}}}。

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

//程序已全部通过硬件测试,请放心使用。

(没有使用到DS1302)/************12864时钟显示函数*************//******实现时间走动、按键控制、蜂鸣器闹铃、温度显示******/#include<reg52.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned int/******************** 功能:定义液晶12864控制端接口*********************/sbit rs=P2^6;// 注意:rw 控制端始终为低电平,直接在硬件上接低电平sbit en=P2^7;sbit wd=P2^0; //温度传感器信号线/******************** 功能:定义蜂鸣器、按键接口*********************/sbit beet=P2^2; //蜂鸣器定义sbit key1=P1^0; //功能选择sbit key2=P1^1; //至加sbit key3=P1^2; //至减sbit key4=P1^3; //北京时间与闹钟时间画面切换/******************** 功能:定义数据初始值******************************/char hour=23,minute=59,second=58,count=0;char shi=0,fen=0,miao=0,hm;int years=2012;char month=12,day=30,mm=0,cc=7;uint temp;float f_temp;/******************** 功能:定义数组字符串*********************/uchar code table1[]={" 幸福牌电子钟"};uchar code table2[]={"温馨提示:00.0℃"};/******************** 功能:延时函数***************************/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/******************* 功能:蜂鸣器响应***********************/void fengmingqi(){beet=0;delay(1);beet=1;delay(1);}/******************** 功能:液晶12864读写数据******************/void xieling_shu(uchar aa,uchar bb){if(aa==1){rs=0;}if(aa==0){rs=1;}P0=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(){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(){xieludizhi(1,0);xiezifuchuan(" 欢迎使用"); delay(1);xieludizhi(2,0);xiezifuchuan(" 幸福牌电子钟"); delay(1);xieludizhi(3,0);xiezifuchuan(" 订购热线"); delay(1);xieludizhi(4,0);xiezifuchuan("Phone:0777-66914"); delay(9534);qingping();xieludizhi(1,0);xiezifuchuan(table1); delay(1);xieludizhi(4,0);xiezifuchuan(table2); delay(1);xieludizhi(3,5);xiezifuchuan("星期");xieludizhi(2,2);xiezifuchuan("年月日");}/******************* 功能:时间、年月日显示函数********************/void display(){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(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);xieludizhi(2,3); // 显示月xieling_shu(0,0x30+month/10);xieling_shu(0,0x30+month%10);xieludizhi(2,5); // 显示日xieling_shu(0,0x30+day/10);xieling_shu(0,0x30+day%10);}/******************* 功能:闹钟(时间、年月日)显示函数********************/void display1(){xieludizhi(3,0); // 显示时分秒xieling_shu(0,0x30+shi/10);xieling_shu(0,0x30+shi%10);xieling_shu(0,':');xieling_shu(0,0x30+fen/10);xieling_shu(0,0x30+fen%10);xieling_shu(0,':');xieling_shu(0,0x30+miao/10);xieling_shu(0,0x30+miao%10);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);xieludizhi(2,3); // 显示月xieling_shu(0,0x30+month/10);xieling_shu(0,0x30+month%10);xieludizhi(2,5); // 显示日xieling_shu(0,0x30+day/10);xieling_shu(0,0x30+day%10);}/******************* 功能:星期函数*********************************/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(key4==0){delay(1);hm=~hm;while(key4==0);} /******************* 功能:key1按键选择功能*******************/if(key1==0){delay(1);mm++;if(hm!=0){if(mm>=4)mm=0;}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,7);xieling_shu(0,0x5f);}if(mm==8){xieludizhi(2,7);xieling_shu(0,0x02);} if(mm>=9){xieludizhi(2,7);xieling_shu(0,0x20);mm=0;} // mm=0;跳出调整时间while(key1==0);}/******************* 功能:key2按键加减功能*******************/if(mm==1&&key2==0) //秒加1{if(hm==0){TR0=0;delay(1);if(key2==0){second++;if(second>=60){second=0;}}} if(hm!=0){delay(1);if(key2==0){miao++;if(miao>=60){miao=0;}}}while(key2==0);}if(mm==1&&key3==0) //秒减1{if(hm==0){TR0=0;delay(1);if(key3==0){second--;if(second<=-1){second=59;}}} if(hm!=0){delay(1);if(key3==0){miao--;if(miao<=-1){miao=59;}}}while(key3==0);}if(mm==2&&key2==0) //分加1{if(hm==0){delay(1);if(key2==0){minute++;if(minute>=60){minute=0;}}} if(hm!=0){delay(1);if(key2==0){fen++;if(fen>=60){fen=0;}}}while(key2==0);}if(mm==2&&key3==0) //分减1{if(hm==0){delay(1);if(key3==0){minute--;if(minute<=-1){minute=59;}}} if(hm!=0){delay(1);if(key3==0){fen--;if(fen<=-1){fen=59;}}}while(key3==0);}if(mm==3&&key2==0) //时加1{if(hm==0){delay(1);if(key2==0){hour++;if(hour>=24){hour=0;}}} if(hm!=0){delay(1);if(key2==0){shi++;if(shi>=24){shi=0;}}}while(key2==0);}if(mm==3&&key3==0) //时减1{if(hm==0){delay(1);if(key3==0){hour--;if(hour<=-1){hour=23;}}} if(hm!=0){delay(1);if(key3==0){shi--;if(shi<=-1){shi=23;}}}while(key3==0);}if(mm==4&&key2==0) //日加1{delay(1);if(key2==0){day++;if(day>=31){day=1;}}while(key2==0);}if(mm==4&&key3==0) //日减1{delay(1);if(key3==0){day--;if(day<=0){day=31;}}while(key3==0);}if(mm==5&&key2==0) //月加1{delay(1);if(key2==0){month++;if(month>=13){month=1;}}while(key2==0);}if(mm==5&&key3==0) //月减1{delay(1);if(key3==0){month--;if(month<=0){month=12;}}while(key3==0);}if(mm==6&&key2==0) //年加1{delay(1);if(key2==0){years++;}// 不设置年限while(key2==0);}if(mm==6&&key3==0) //年减1{delay(1);if(key3==0){years--;}while(key3==0);}if(mm==7&&key2==0) //星期加1{delay(1);if(key2==0){cc++;if(cc>=8){cc=1;}}while(key2==0);}if(mm==7&&key3==0) //星期减1{delay(1);if(key3==0){cc--;if(cc==0){cc=7;}}while(key3==0);}}/********************************************************************************************************************** 功能:18B20 所有函数************************************//******************* 18B20复位,初始化函数**************************/void dsreset(void){uint i;wd=0;i=103;while(i>0)i--;wd=1;i=4;while(i>0)i--;}/******************* 18B20 读1位函数**************************/bit tempreadbit(void){uint i;bit dat;wd=0;i++; //i++ 起延时作用wd=1;i++;i++;dat=wd;i=8;while(i>0)i--;return (dat);}/******************* 18B20 读1个字节函数**************************/uchar tempread(void){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}/******************* 18B20 写一个字节数据函数**************************/void tempwritebyte(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写1{wd=0;i++;i++;wd=1;i=8;while(i>0)i--;}else{wd=0; //写0i=8;while(i>0)i--;wd=1;i++;i++;}}}/******************* 18B20 开始获取温度并转换函数**************************/void tempchange(void){dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}/******************* 18B20 读取寄存器中存储的温度数据函数**************************/uint get_temp(){uchar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低8位b=tempread(); //读高8位temp=b;temp<<=8; //两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;return temp; //temp是整型}/******************* 18B20 发送数据函数**************************/void comm(char *parr){do{SBUF = *parr++; //发送数据while(!TI); //等待发送完成标志为1TI =0; //标志清零}while(*parr); //保持循环直到字符为'\0'}/************************ 功能:主函数****************************/void main(){ uchar buff[4];TMOD=0x01; // 设置T0为工作方式1EA=1;ET0=1;TR0=1; //开启T0中断TH0=-50000/256;TL0=-50000%256;init_12864();init_zifu();hm=0;while(1){ if(count>5&&count<18){tempchange(); //开始获取温度get_temp(); //读取寄存温度sprintf(buff,"%f",f_temp);comm(buff);xieludizhi(4,5);xieling_shu(0,0x30+ temp/100);xieling_shu(0,0x30+temp%100/10);xieling_shu(0,0x2e);xieling_shu(0,0x30+temp%100%10);}if(hm==0)display(); // 如果hm=0 显示北京时间,否则显示闹钟时间else display1();anjian(); // 按键判断xingqi(); // 显示星期if(minute==59&&second==59){fengmingqi();} // 整点报时if(shi==hour&&fen==minute&&miao>=second&&miao<=second+3){fengmingqi();}// 闹钟}}/************************ 功能:中断函数**************************/void time() interrupt 1{TH0=-50000/256;TL0=-50000%256;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++;}}}}}}}。

相关文档
最新文档