万年历12864原理图PCB图
51单片机12864万年历(图片+主要程序C语言)
51单片机做的12864万年历这是我花了一个星期时间做的万年历;一开始是一些图片,后面是这个制作的C语言源程序;希望大家稀饭:Main.c#include "reg52.h"#include "macroconst.h"#include "keyscan.h"#include "screen.h"#include "18b20.h"#include "ds1302.h"#include "atao_12864.h"#include "24c02.h"idata unsigned char state1[1];unsigned char screennum=1;//屏幕号#define time_task_sec 200 //节拍200Hz#define clock 24000000 //晶振#define max_task 4 //最大任务数idata unsigned char task_delay[4];#define task_delay0 time_task_sec/1 //2赫兹18b20 #define task_delay1 time_task_sec/5 //10赫兹屏幕#define task_delay2 time_task_sec/3 //4赫兹1302 #define task_delay3 time_task_sec/20 //20赫兹键盘void init(){unsigned char i;init18b20();ds1302_init();initina1(); //---------------------------LCD字库初始化程序RdFromROM(state1,8,1);state[0]=state1[0]; //-------界面RdFromROM(state1,15,1);state[1]=state1[0];//------- 闹钟RdFromROM(state1,11,1);key_sound=state1[0];//-------按键音// state[2]=state1[2];// state[3]=state1[3];screennum=1;//------默认一号屏for(i=0;i<max_task;i++)//清除任务延时{task_delay[i]=0;}TMOD=0x11;EA=1;TH0=255-clock/time_task_sec/12/526;TL0=255-clock/time_task_sec/12%526;ET0=1;TR0=1;}void main(){init();while(1){ if(task_delay[0]==0){readtemp(); task_delay[0]=task_delay0;} if(task_delay[3]==0){MenuCheckKey();task_delay[3]=task_delay1;}if(task_delay[1]==0){screen_select(screennum);task_delay[1]=task_delay1;} if(task_delay[2]==0){ds1302_read_time(); task_delay[2]=task_delay0;} }}void timer0() interrupt 1{uchar i=0;TH0=255-clock/time_task_sec/12/526;TH1=255-clock/time_task_sec/12%526;for(i=0;i<max_task;i++)if(task_delay[i]) task_delay[i]--; // miao=21,fen=33,xiaomiao=94;if(ma_start==1){tt++;if(tt==8){tt=0;xiaomiao++;if(xiaomiao==99){xiaomiao=0;miao++;if(miao==60){miao=0;fen++;if(fen==99){fen=0;}}}}}}Screen.c:#include "reg52.h"#include "macroconst.h"#include "delay.h"#include "18b20.h"#include "atao_12864.h"#include "ds1302.h"#include "24c02.h"#include "festival.h"#include "keyscan.h"idata unsigned char miao=0,fen=78,xiaomiao=0,tt=0;idata unsigned char bai,shi,ge,shinian,genian,shiyue,geyue,shiri,geri,shishi,geshi,shifen,gefen,shimi ao,gemiao;idata unsigned char Number[4];unsigned char code mainmenu[]={" 主菜单""3.查询 4.温度""1.调时 2.秒表""5.设置 6.返回"};unsigned char code setmenu[]={" 设置""3.查温 4.按键""1.界面 2.闹铃""5.报时 6.返回"};void gettime(){shinian=(time_buf1[1]%100)/10;genian=(time_buf1[1]%100)%10;shiyue=(time_buf1[2])/10;geyue=(time_buf1[2])%10;shiri=(time_buf1[3])/10;geri=(time_buf1[3])%10;shishi=(time_buf1[4])/10;geshi=(time_buf1[4])%10;shifen=(time_buf1[5])/10;gefen=(time_buf1[5])%10;shimiao=(time_buf1[6])/10;gemiao=(time_buf1[6])%10;}void screen_select(uchar num){// initina1();gettime() ;if(num==1) //----------主界面{Lcd_Set_Post(1,0);TransferData(shinian+48,1);//----------------------年TransferData(genian+48,1);TransferData('/',1);TransferData(shiyue+48,1);//----------------------月TransferData(geyue+48,1);TransferData('/',1);TransferData(shiri+48,1);//----------------------日TransferData(geri+48,1);Lcd_Set_Post(1,4);if(state[1]==1)//----------------闹铃的状态图标{TransferData(' ',1);TransferData(14,1);}Lcd_Set_Post(1,5);if(key_sound==1){TransferData(13,1);}if(state[0]==0){Lcd_Set_Post(1,7); //----------------农历年nian(0);Lcd_Set_Post(2,0);//----------------------- 农历日月LCD_WRITE_CHAR("农历");Conversion(0,time_buf[1],time_buf[2],time_buf[3]);TransferData(month_moon/16+'0',1);TransferData(month_moon%16+'0',1);TransferData('/',1);TransferData(day_moon/16+'0',1);TransferData(day_moon%16+'0',1);}if(state[0]==1){Lcd_Set_Post(3,5);}else {Lcd_Set_Post(2,5);}LCD_WRITE_CHAR("星期");//----------------------星期if(time_buf1[7]==7) {LCD_WRITE_CHAR("日");}if(time_buf1[7]==6) {LCD_WRITE_CHAR("六");}if(time_buf1[7]==5) {LCD_WRITE_CHAR("五");}if(time_buf1[7]==4) {LCD_WRITE_CHAR("四");}if(time_buf1[7]==3) {LCD_WRITE_CHAR("三");}if(time_buf1[7]==2) {LCD_WRITE_CHAR("二");}if(time_buf1[7]==1) {LCD_WRITE_CHAR("一");}Lcd_Set_Post(3,0);TransferData(shishi+48,1);//----------------------时TransferData(geshi+48,1);TransferData(58,1);TransferData(shifen+48,1);//----------------------分TransferData(gefen+48,1);TransferData(58,1);TransferData(shimiao+48,1);//----------------------秒TransferData(gemiao+48,1);if(state[0]==0){bai=(temph/100); //---------------------------------温度shi=(temph%100)/10;ge=(temph%100)%10;Lcd_Set_Post(3,4);if(zerotemp==0){TransferData(' ',1);TransferData(' ',1);} Lcd_Set_Post(3,5);TransferData(shi+48,1);TransferData(ge+48,1);TransferData('.',1);TransferData(templ+48,1);TransferData(0xa1,1);TransferData(0xe6,1);Lcd_Set_Post(4,0);festival(time_buf[2],time_buf[3],time_buf[4]);//农历}}if(num==3)//----------主菜单{Lcd_Set_Post(1,0);//--------设置显示位置LCD_WRITE_CHAR(mainmenu);}if(num==4)//----------设置菜单{Lcd_Set_Post(1,0);//--------设置显示位置LCD_WRITE_CHAR(setmenu);}if(num==5)//----------时间设置{Lcd_Set_Post(1,2);//--------设置显示位置LCD_WRITE_CHAR("时间设置");Lcd_Set_Post(2,1);TransferData(shinian+48,1);//----------------------年TransferData(genian+48,1);LCD_WRITE_CHAR("年");TransferData(shiyue+48,1);//----------------------月TransferData(geyue+48,1);LCD_WRITE_CHAR("月");TransferData(shiri+48,1);//----------------------日TransferData(geri+48,1);LCD_WRITE_CHAR("日");TransferData(time_buf1[7]+48,1);//---------------星期Lcd_Set_Post(3,2);TransferData(shishi+48,1);//--------------------时TransferData(geshi+48,1);LCD_WRITE_CHAR("时");TransferData(shifen+48,1);//---------------------分TransferData(gefen+48,1);LCD_WRITE_CHAR("分");TransferData(shimiao+48,1);//--------------------秒TransferData(gemiao+48,1);}if(num==6)//----------秒表{uchar shi1,shi2,shi3,ge1,ge2,ge3;Lcd_Set_Post(1,3);//--------设置显示位置LCD_WRITE_CHAR("秒表");Lcd_Set_Post(3,2);shi1=fen/10;ge1=fen%10;TransferData(shi1+48,1);TransferData(ge1+48,1);TransferData(':',1);shi2=miao/10;ge2=miao%10;TransferData(shi2+48,1);TransferData(ge2+48,1);TransferData(':',1);shi3=xiaomiao/10;ge3=xiaomiao%10;TransferData(shi3+48,1);TransferData(ge3+48,1);}if(num==8){Lcd_Set_Post(1,2);//--------农历查询LCD_WRITE_CHAR("温度查询");Lcd_Set_Post(3,0);//--------农历查询LCD_WRITE_CHAR("最高温度"); TransferData(':',1);RdFromROM(Number,0,4);if(Number[3]==0){TransferData('-',1);}Lcd_Set_Post(3,5);TransferData(Number[0]+48,1); TransferData(Number[1]+48,1); TransferData('.',1);TransferData(Number[2]+48,1); TransferData(0xa1,1);TransferData(0xe6,1); Lcd_Set_Post(4,0);//--------农历查询LCD_WRITE_CHAR("最低温度"); TransferData(':',1);RdFromROM(Number,4,4);if(Number[3]==0){TransferData('-',1);}Lcd_Set_Post(4,5);TransferData(Number[0]+48,1); TransferData(Number[1]+48,1); TransferData('.',1);TransferData(Number[2]+48,1); TransferData(0xa1,1);TransferData(0xe6,1); }if(num==9)//----------界面菜单{Lcd_Set_Post(1,2);//--------设置显示位置LCD_WRITE_CHAR("界面选择");Lcd_Set_Post(2,0);TransferData(1+48,1);TransferData('.',1);LCD_WRITE_CHAR("多功能界面");Lcd_Set_Post(3,0);TransferData(2+48,1);TransferData('.',1);LCD_WRITE_CHAR("简洁界面");}。
电子万年历的电路原理与设计
湖南信息科学职业学院毕业论文(设计)电子万年历电路原理与设计学生姓名:刘文明学号:08120126年级专业:二00八级计算机控制技术专业指导老师:凌双明湖南·长沙提交日期:2011年5月目录摘要 (3)1前言 (3)2设计要求与方案论证 (3)2.1设计要求 (4)2.2系统基本方案选择和论证 (4)2.2.1 显示模块选择方案和论证 (4)2.2.2单片机串口通信的选择方案和论证 (4)3 系统的硬件设计与实现 (5)3.1 电路设计框图 (5)3.1.1万年历显示设计框图 (5)3.1.2液晶显示设计框图 (5)3.1.3单片机之间、电脑单片机联机设计图 (5)3.2 系统硬件概述 (6)3.3主要单元电路的设计 (6)3.3.1万年历单片机主控制模块的设计 (7)3.3.2光控开关模块的设计 (7)3.3.3万年历显示模块的设计 (7)3.3.4温度感应模块的设计 (8)3.3.5串口通信模块的设计 (9)4结束语 (9)参考文献 (10)附录 (10)附录1系统使用说明书 (11)附录2万年历实物图 (12)电子万年历的电路原理与设计作者:刘文明指导老师:凌双明(湖南信息科学职业学院电子信息系2008级计算机控制技术专业,长沙410128)摘要:随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。
日历是人们不可或缺的日常用品。
但一般日历都为纸制用品,使用不便,寿命不长。
电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。
万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
关键词:单片机89C52,串口通信,控制模块,显示模块,发声模块, 12864LCD 液晶1.前言万年历可以显示年、月、日、时、分、秒、星期等,具有日期和时间校准、闰年补偿、温度显示、闹钟、光控开关,秒表等多种功能,万年历串口通信具有电脑一键校准时间,利用电脑联机,设置心情语悟,增加名片等功能。
万年历程序和电路图
目录第一章设计方案 (1)1.1.硬件设计 (1)1.1.1设计要求 (1)1.1.2硬件框图 (1)1.1.3硬件选择 (1)1.2软件设计 (3)1.2.1编程环境及语言 (3)1.2.2程序框图 (3)第二章系统设计 (4)2.1硬件设计 (4)2.1.1振荡电路 (4)2.1.2复位电路 (4)2.1.3按键 (4)2.1.4 lcd显示电路 (5)2.1.5音乐播放电路 (5)2.1.6 P0上拉电阻计算 (6)2.2软件设计 (7)2.2.1程序流程图 (7)2.2.2流程的各个模块设计 (9)心得体会 (21)附录 1. 元器件表 (22)附录 2.程序源代码 (23)1602.c文件 (23)Clock.H文件 (27)Music.h文件 (45)LCD1602.H文件 (47)参考文献 (54)引言单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。
单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。
将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。
本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒;实现位调;附加播放音乐功能。
本设计是基于A T89C51和LCD1602液晶显示器设计的可调式电子钟。
该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有4KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。
显示器件采用通用型1602液晶,可显示32个字符,如果使用数码管来做显示器件需消耗大量的系统资源,因此采用低功耗的1602液晶,该液晶显示方便,功能强大,完全能满足数字万年历的显示要求。
通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。
第一章设计方案1.1.硬件设计1.1.1设计要求实现年月日、时分秒、星期的显示功能,用两个按键来实现日期和时间的调整功能,调整要求星期能自动更新,且能实现位调。
自己制作的单片机万年历程序+原理图
自己制作的单片机万年历程序+原理图单片机万年历仿真原理图如下仿真Altium Designer画的万年历原理图和PCB图如下:PCB原理图基于51单片机,可以完成时钟显示、公历显示、农历显示、温度显示、闹钟报警定时的LCD时钟PPT内容预览:本设计使用AT89C51来做主控芯片,其强大的功能足够实现我们设计的所有功能。
使用LCD1602的液晶显示器来进行显示。
使用Keil uVision5进行编程。
通过Proteus8.6来进行仿真。
点击一次K1进入时钟设置页面,通过点击K2切换时、秒、分、星期、年、月、日,通过K3与K4实现加减来完成时钟的设置点击两次K1进入闹钟设置页面,通过点击K2切换开关、时、秒、分,通过K3与K4实现加减完成闹钟的设置。
单片机源程序如下注释是很全的#include //调用单片机头文件#define uchar unsigned char //无符号字符型宏定义变量范围0~255#define uint unsigned int //无符号整型宏定义变量范围0~65535#include "eeprom52.h"#include "nongli.h"#include "intrins.h"bit flag_200ms ;bit flag_100ms ;sbit beep = P3^7; //蜂鸣器定义bit flag_beep_en;uint clock_value; //用作闹钟用的sbit dq = P3^1; //18b20 IO口的定义uint temperature ; //温度变量uchar flag_nl; //农历阳历显示标志位uchar menu_1,menu_2;uchar key_time,flag_value; //用做连加的中间变量bit key_500ms ;uchar n_nian,n_yue,n_ri; //农历显示的函数#include "ds1302.h"#include "lcd1602.h"/******************把数据保存到单片机内部eeprom中******************/void write_eeprom(){SectorErase(0x2000);byte_write(0x2000, fen1);byte_write(0x2001, shi1);byte_write(0x2002, open1);byte_write(0x2058, a_a);}/******************把数据从单片机内部eeprom中读出来*****************/void read_eeprom(){fen1 = byte_read(0x2000);shi1 = byte_read(0x2001);open1 = byte_read(0x2002);a_a = byte_read(0x2058);}/**************开机自检eeprom初始化*****************/void init_eeprom(){read_eeprom(); //先读if(a_a != 1) //新的单片机初始单片机内问eeprom{fen1 = 3;shi1 = 8;a_a = 1;write_eeprom(); //保存数据}}/***********************18b20初始化函数*****************************/void init_18b20(){bit q;dq = 1; //把总线拿高delay_uint(1); //15usdq = 0; //给复位脉冲delay_uint(80); //750usdq = 1; //把总线拿高等待delay_uint(10); //110usq = dq; //读取18b20初始化信号delay_uint(20); //200usdq = 1; //把总线拿高释放总线}/*************写18b20内的数据***************/void write_18b20(uchar dat){uchar i;for(i=0;i<8;i++){ //写数据是低位开始dq = 0; //把总线拿低写时间隙开始dq = dat & 0x01; //向18b20总线写数据了delay_uint(5); // 60usdq = 1; //释放总线}}/*************读取18b20内的数据***************/uchar read_18b20(){uchar i,value;for(i=0;i<8;i++){dq = 0; //把总线拿低读时间隙开始value >>= 1; //读数据是低位开始dq = 1; //释放总线if(dq == 1) //开始读写数据value |= 0x80;delay_uint(5); //60us 读一个时间隙最少要保持60us 的时间}return value; //返回数据}/*************读取温度的值读出来的是小数***************/uint read_temp(){uint value;uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0x44); //启动一次温度转换命令delay_uint(50); //500usinit_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0xbe); //发出读取暂存器命令EA = 0;low = read_18b20(); //读温度低字节value = read_18b20(); //读温度高字节EA = 1;value <<= 8; //把温度的高位左移8位value |= low; //把读出的温度低位放到value的低八位中value *= 0.625; //转换到温度值小数return value; //返回读出的温度带小数}/******************1ms 延时函数*******************/void delay_1ms(uint q){uint i,j;for(i=0;i<>< p=""><>for(j=0;j<120;j++);}/******************写星期函数*******************/void write_week(uchar hang,uchar add,uchar week)//写星期函数{if(hang==1)write_com(0x80+add);elsewrite_com(0x80+0x40+add);。
基于12864的万年历加温度显示设计
基于12864的万年历加温度显示设计摘要本设计将制作一种基于单片机控制的带实时温度显示、具有定时功能的电子万年历。
传统的电子日历大都体积大,功耗大,显示不准确等特点。
为了缩小体积,减小功耗,使其变得小巧灵敏,本设计加入了时钟芯片DS1302,可对时间进行准确记时,同时可设置定时时间,实现定时功能。
另外本设计具有显示实时温度的功能。
传统的温度传感器系统大都采用放大、调理、A/D转换,转换后的数字信号送入计算机处理,处理电路复杂、可靠性相对较差,占用计算机的资源比较多。
本设计将采用DS18B20一线制数字温度传感器,可将温度信号直接转换成数字信号送给微处理器,电路简单,成本低,实现了时间温度同时显示的效果。
最后,温度和时间都将通过12864液晶显示器进行显示。
测试表明系统达到了设计要求的各项功能,各部分工作正常。
关键词时钟/温度检测/单片机/温度MICROCONTROLLER-BASHED CALENDER AND TEMPERATURE DISPLAY DESIGNABSTRACTThis design creates an electronic calendar with real-time temperature display and timing function based on single chip control. Most of traditional calendars are characterized by large size, high power consumption and inaccurate display. In order to reduce volume and power consumption and make calendars become small and exquisite, the design adds a clock chip DS1302, which can accurately record the time and set a regular time to achieve timing function. In addition, this design displays real-time temperature function. Traditional temperature sensor system is mostly amplified, recuperated and A / D converted. The converted digital signal is input the computer to be processed, but the processing circuit is complicated with relatively poor reliability and occupies more resources of the computer. This design uses the DS18B20 first-line system digital temperature sensor to directly convert the temperature signal into digital signal and send it the microprocessor, whose circuit is simple and low cost, achieving the displayed effect of time and temperature simultaneously. Finally, the temperature and time will be displayed through the 12864 liquid crystal display. The test indicates that the system has reached various functions of the design requirements and each part operates smoothly.KEY WORDS clock, temperature detection, SCM, temperature目录中文摘要 (I)英文摘要.................................................................................................... I I 1概论. (1)1.1万年历发展背景 (1)1.2电子万年历的特点 (1)1.3国内外现状、发展 (1)2系统基本方案选择和论证 (2)2.1单片机芯片的选择方案和论证 (2)2.2显示模块的选择方案和论证 (3)2.3时钟芯片的选择方案和论证 (4)2.4温度传感器的选择方案和论证 (4)2.5电路设计最终方案确定 (5)3系统硬件电路设计 (6)3.1系统功能模块划分 (6)3.2各单元模块功能分析及模块电路设计 (6)3.2.1时钟模块 (6)3.2.2 温度模块 (7)3.2.3显示模块 (10)3.2.5 独立键盘模块 (18)3.2.6蜂鸣器模块 (19)3.2.7单片机模块 (20)3.3电路原理图的绘制和电路的焊接 (23)3.3.1原理图绘制软件PROTEL (23)3.3.2 PCB制作 (23)3.3.3 元器件的焊接 (24)4 系统软件设计 (26)4.1 万年历软件系统的流程图 (26)4.2温度信息的采集 (27)4.3时钟的读取 (30)4.3.1 DS1302控制字节的说明 (30)4.3.2 DS1302时间日期寄存器及相应位定义 (31)4.3.3 DS1302数据的输入和输出 (31)4.3.4 DS1302读写部分(程序)部分 (32)4.4温度的显示控制 (32)4.5键盘模块 (34)4.6蜂鸣器模块 (34)5设计总结 (35)致谢 (36)参考文献 (37)附录 (38)1 概论1.1 万年历发展背景随着电子技术的发展,人类不断研究,不断创新纪录。
9--12864液晶显示原理+电路图+程序
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
基本特性:l低电源电压(VDD:+3.0--+5.5V)l显示分辨率:128×64点l内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)l内置128个16×8点阵字符l2MHZ时钟频率l显示方式:STN、半透、正显l驱动方式:1/32DUTY,1/5BIASl视角方向:6点l背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 l通讯方式:串行、并口可选l内置DC-DC转换电路,无需外加负压l无需片选信号,简化软件设计l工作温度:0℃-+55℃,存储温度:-20℃-+60℃模块接口说明*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。
2.2并行接口管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC 3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5R/W(SID)H/L R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线是用于模块屏幕显示开和关的控制。
12864液晶显示图片原理(完整版)
51单片机综合学习12864液晶原理分析1辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理……芯片:YM12864R P-1 控制芯片:ST7920A 带中文字库初步小结:1、控制芯片不同,寄存器定义会不同2、显示方式有并行和串行,程序不同3、含字库芯片显示字符时不必对字符取模了4、对芯片的结构地址一定要理解清楚5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。
每个显示点对应一位二进制数,1表示亮,0表示灭。
存储这些点阵信息的RAM 称为显示数据存储器。
要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。
图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。
由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。
左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。
显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。
512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。
每个存储单元存储8个液晶点的显示信息。
为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。
基于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五五作品功能实现作品功能实现通过硬件的焊接与程序的编写本电子万年历终于完成了实现的功能如下
12864液晶原理及程序电路图
12864液晶原理+程序+ 照片+电路图一;12864(带字库汉字显示演示程序);*************************************************************************** ;* sxj1974@ (51c51 test web) *;* Create by :石学军 更多例程请登陆网站 *;***************************************************************************RS EQU P2.0RW EQU P2.1E EQU P2.2PSB EQU P2.3RST EQU P2.5;-----------------------------------------------LCD_X EQU 30HLCD_Y EQU 31HCOUNT EQU 32HCOUNT1 EQU 33HCOUNT2 EQU 34HCOUNT3 EQU 35H;----------------------------------------------- LCD_DATA EQU 36HLCD_DATA1 EQU 37HLCD_DATA2 EQU 38HSTORE EQU 39H;----------------------------------------------- ORG 0000HLJMP MAINORG 0100H;----------------------------------------------- MAIN:MOV SP,#5FHCLR RST ;复位LCALL DELAY4SETB RSTNOPSETB PSB ;通讯方式为8位数据并口;********************初始化********************** LGS0: MOV A,#34H ;34H--扩充指令操作LCALL SEND_IMOV A,#30H ;30H--基本指令操作LCALL SEND_IMOV A,#01H ;清除显示LCALL SEND_IMOV A,#06H ;指定在资料写入或读取时,光标的移动方向LCALL SEND_I ;DDRAM 的地址计数器(AC)加1MOV A,#0CH ;开显示,关光标,不闪烁LCALL SEND_I;=============================================== TU_PLAY1:MOV DPTR,#TU_TAB1 ;显示图形LCALL PHO_DISPLCALL DELAY3;================================================= ;;显示汉字和字符;加入80ms的延时,使你能够看清楚显示的过程;根据汉字显示坐标分段写入(顺序写入);================================================= HAN_WR2:LCALL CLEAR_PHAN_WR2A:MOV DPTR,#TAB1A ;显示汉字和字符MOV COUNT,#10H ;地址计数器设为16。
12864 万年历设计报告
课程设计报告题目多功能数字钟课程名称电子系统设计与工程实践院部名称电子与信息工程学院专业电子信息工程班级电子1001班学生姓名李盖(1010910101)指导教师荣峰多功能数字钟完成人:李盖(电子1001)摘要:随着人类科技文明的发展,人们对于时钟的要求在不断地提高。
时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。
高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
具有小巧,价格低廉,走时精度高,使用方便,功能多等特点。
本设计的控制核心是单片机(STC90C516RD+),采用蜂鸣器、液晶显示器(LCD12864)、及其他电路构成。
实现了时间设置、闹铃设置、闹铃开和关、显示节日、显示生日、显示农历、生日时播放音乐、整点报时以及温度采集等功能。
关键词:多功能时钟,温度采集,闹铃,农历,显示节日1、设计要求1.利用LCD显示“年、月、日、星期、时、分、秒”信息,并可通过键盘修改当前时间。
2.具有闹钟时间设置和闹铃功能,利用蜂鸣器进行闹铃。
当闹铃发生时,能够通过按键取消闹铃。
3.利用温度传感器检测环境温度,并显示在LCD上。
2、总体设计2.1系统组成系统由单片机主控模块、时钟模块、测温模块、报警模块、显示模块、键盘接口模块共6个模块组成,电路系统框图下图所示:图1 系统框图2.2工作原理本设计核心器件之一时钟芯片DS1302,其主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
采用普通32.768KHz晶振。
采用STC90C51作为主控芯片,利用它定期的读取时钟芯片DS1302中的时间并显示在LCD上;通过算法得出阴历日期并显示在LCD 上。
2.3用户至上的设计通过合理的布局,将键盘设置在LCD屏的下方,方便操作;其他的元路隐藏在LCD的后面使外观整洁简约。
单片机课程设计 电子万年历的设计
3.具有定时闹钟功能;
4.阴历与阳历的转换;
1.2
方案1——基于AT89S52单片机定时器产生时钟脉冲
不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。AT89S52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦写1000余次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
③P2端口 (P2.0~P2.7) P2是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
④P3端口(P3.0~P3.7)P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。
P3.6
/WR (外部数据存储器写选通)
P3.7
/RD (外部数据存储器读选通)
(2).DS1302时钟电路
芯片介绍:
低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义。
·可选的慢速充电(至VCC1)的能力。
项目五 12864液晶万年历制作
模块的驱动函数
任务一 12864液晶显示数字
3.12864液晶显示模块知识
(3)模块的使用——驱动函数
/******写命令到LCD函数 参数:cmd命令******/ void wcmd_12864(uchar cmd) //写命令到LCD函数 { check_busy_12864(); //忙状态检测 RS=0; //向LCD发送命令 RW=0; //写有效 E=1; //产生下降沿的高电平部分 DATAPORT=cmd; //命令字送LCD数据端口 E=1; //保持高电平短暂延时 E=0; //产生下降沿的低电平部分 }
任务二 12864液晶显示汉字和数字
2. C语言的指针知识
(4)使用指针的显示函数
/***参数:row起始页,col起始列,x水平像素,y纵向页数,s字模表****/
void disp_12864(uchar row,uchar { uchar i,j; if(col<64){CS1=1,CS2=0;} else{CS1=0,CS2=1;col-=64;} for(i=0;i<y;i++) { wcmd_12864(0xb8+row+i); wcmd_12864(0x40+col); for(j=0;j<x;j++) wdat_12864(s[i*x+j]); } }
1 0 0 0 0 1
0 0 0 0 0 0 0 0
模块带有显示缓存;单片机将代表点阵的亮或暗(1或0)的信息写入 到显示缓存中,LCD的行、列驱动器会自动扫描LCD点阵,保持用户期望的 显示效果。写入到显示缓存中的数据是按字节为单位来进行读写的。
任务一 12864液晶显示数字
电子万年历的电路原理与设计
电子万年历电路原理与设计学生姓名:张开志、邱云翔、陈繁设计指导:刘刚提交日期:2011年6月电子万年历的电路原理与设计摘要:随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。
日历是人们不可或缺的日常用品。
但一般日历都为纸制用品,使用不便,寿命不长。
电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。
万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
Pick to: along with the rapid development of economy in the world today with the advent of the information age, all kinds of small-sized intelligent electrical appliances product gradually appear in our life. Calendar is people indispensable everyday items. But general calendar for paper supplies, use inconvenience, life is not long. Electronic calendar using intelligent electronic control and display technology, improve the paper calendar defects. Calendar has read convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages, conform to the trend of the development of electronic instruments, and has a broad market prospect.关键词:单片机STC89C52,串口通信,控制模块,显示模块,发声模块, 12864LCD 液晶1.前言万年历可以显示年、月、日、时、分、秒、星期等,具有日期和时间校准、闰年补偿、温度显示、闹钟功能。
单片机课程设计报告-电子万年历
单片机课程设计题目名称:姓名:学号:学院:班级:指导老师:完成时间:电子万年历设计报告1)设计题目题目:电子万年历2)设计任务和要求1、显示年月日时分秒及星期信息。
2、具有可调整日期和时间功能3、增加闰年计算功能3)原理电路和程序设计:一、芯片模块设计方案:STC89C52,宏晶公司的51系列单片机,价格便宜,在国内使用者非常多。
支持串口下载,使用非常方便,且具有很大的价格优势。
缺点是仅支持串口下载,不支持在线下载,使用中会有些不方便。
由于本设计对控制芯片的要求不高,因此选用此方案。
二、时钟模块设计方案:使用时钟芯片DS1302。
优点是同步串行通信,仅使用3个IO口,占用最少的单片机资源;其内部功能强大。
更重要的是其价格便宜,具有非常高的性价比。
缺点是串行通信,控制比较复杂。
综上,本设计选择此方案。
三、显示模块设计方案:利用12864对电子万年历进行显示。
优点是12864可以显示中文字符且足够显示电子万年历所有的内容。
所以本设计选择此方案。
(1)系统框图:(2)单元电路设计;1、单片机最小系统控制芯片使用STC89C52,控制部分主控制芯片采用STC89C52,最小系统包括晶振电路、复位电路、下载接口。
2、时钟芯片模块时钟芯片使用DS1302,该模块电路原理图如下图。
时钟电路采用的是ds1302芯片,DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
工作电压与单片机的输入电压比较适合。
上面是它的一些基本的应用介绍。
下面是它的引脚的描述。
下面是DS1302的时钟寄存器。
我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。
当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。
电子万年历的设计制作
电子万年历1.1 功能要求电子万年历能显示阳历年、月、日、星期、[小]时、分、秒和阴历月、日、温度、节假日,在显示阴历时间时,能标明是否为闰年。
2.1方案论证按照系统设计功能的要求,初步确定设计系统由主控模块、显示模块、键盘接口模块共4个模块组成。
主控芯片使用51系列STC89C52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。
采用DS1302作为主要计时芯片,可以做到计时准确。
更重要的是,DS1302可以在很小电流的后备电源(2.5~~5.5v电源,在 2.5v时耗电小于300nA)下继续计时,并可以编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
图3.1 电子万年历电路系统构成框图显示模块采用12864液晶屏,键输入采用查询法实现调整功能。
系统由主控制器STC89C52、时钟芯片DS1302、串口显示电路及键扫描电路组成。
2.2 主控制器STC89C52台湾宏晶公司生产的STC89(:52单片机采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash 程序存储器。
它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。
主要性能特点有:·8 KB Flash ROM,可以擦除1 000次以上,数据保存10年。
·256字节内部RAM。
·电源控制模式——时钟可停止和恢复;——空闲模式;——掉电模式。
·6个中断源。
·4个中断优先级。
·4个8位I/O口。
·全双工增强型UART。
·3个16位定时/计数器,TO、T1(标准80C51)和增加的T2(捕获和比较)。
·全静态工作方式:0~24 MHz。
2.3 时钟电路DSl3021.DSl302的性能特性·实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;·用于高速数据暂存的31×8位RAM;·最少引脚的串行I/O;·2.5~5.5 V电压工作范围;·2.5 V时耗电小于300 nA;·用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;·简单的3线接口;·可选的慢速充电(至V CC1)的能力。