06 12864LCD显示计算器键盘按键实验
- 格式:doc
- 大小:326.00 KB
- 文档页数:19
华南理工大学无线电爱好者协会F D R 工作室实验二十一:PS2键盘控制LCD12864实验一. 实验目的:1. 认识ps2键盘协议2. 掌握12864液晶模块的使用方法。
3. 学会利用12864实现小型可视化图形界面 二. 实验原理:12864与单片机连接原理图12864跟ps2键盘的底层通讯较为复杂,我们在文件夹里提供了相应的资料给读者。
在此不再累述。
提醒读者一下:12864 驱动电流加大,使用时请先调lcd 座旁的蓝色可调电阻,使lcd 上能显示一个一个的小方格。
然后才能正常显示。
12864有并行跟串行两种通讯方式。
当psb 脚为高平时是并行,反之为串行。
华南理工大学F D R 工作室华南理工大学无线电爱好者协会F D R 工作室键盘要注意通码(按下键盘时发出)跟断码(松开键盘时发出)之间的联系。
三.硬件链接图:12864连线:如图所示的红线排针连到单片机各IO口,12864的几个控制脚都是连接在P0口上,从右到左依次是RS、RW、E、PSB、NC(我们提供的12864用不到该引脚)、RST,依次连接到P0^0,P0^1,P0^2,P0^3,P0^4,P0^5; 而数据线则直接接到P1口。
键盘连线:键盘的两条控制线在排针P7靠近红外接收头的两根上,最后一根是时钟线sclk,上边一根是数据线dat,将数据线接到单片机P3^2上靠近单片机一侧的排针上,将时钟线接到单片机INT1上。
12864连线图四.实验程序:#include<AT89X52.h>#include"led.h" //该头文件包含数码管显示数字驱动 #include"tg12864p.h"//该头文件包含lcd12864驱动sbit dat =P3^2;//DATA IN华南理工大学F D R 工作室华南理工大学无线电爱好者协会F D R 工作室#define uchar unsigned char // 即 uchar 等同与unsigned char #define uint unsigned int uchar sp2key_scan();/*****************常量声明区******************************************/ uchar code key_table[47]={'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t', //说明:存放键盘上按键的as2码值 'u','v','w','x','y','z',' ','-','=',']', ';','"',',','.','/','[',' ' //作用:方便日后传值到液晶上 };/****************全局变量声明区************************************/ uchar key=0; //用于存放键盘解码函数的解码结果 uchar key_temp=0; bit BF=0; //接收到通码的标志位uchar key_count=0; //记录键盘传任一个数据时传来时钟脉冲个数 uchar key_buffer[5]={0,0,0,0,0};//接收键盘传来数据的缓冲区uchar key_num=0;//一个按键动作,键盘会发出通码,段吗,这用于记录收到编码个数。
实验三 LCD12864液晶显示参赛序号实验题目LCD12864液晶显示实验成组员左虎博杨颂王志鹏指导教师赵勇报告日期2014年7月16日-2014年7月18日摘要:本设计以超低功耗MSP430单片机为微控制器,以4位/8位并行,2线或3线串行多种接口方式的LCD12864为输出显示器。
通过对MSP430单片机进行编程,在LCD12864上显示8×4行16×16点阵的汉字。
关键字:MSP430 LCD12864目录一.方案论证 (4)液晶显示器的论证与选择 (4)二.LCD12864的工作原理 (4)1.引脚功能说明 (4)LCD12864采用20接口,各引脚接口说明如表3所示: (4)2. 指令说明 (5)三.实验框图和电路图 (7)1. 系统框图 (7)2. 电路原理图 (7)四.实验程序设计 (7)五.系统测试 (11)1. 测试方案 (11)2. 测试结果 (11)3. 测试分析与结论 (12)一.方案论证液晶显示器的论证与选择方案一:采用带中文字库的LCD12864。
LCD12864具有4 位/8 位并行、2 线或3 线串行多种接口方式,可以显示8×4 行16×16 点阵的汉字。
也可完成图形显示。
低电压低功耗是其一显著特点。
方案二:采用LCD1602。
LCD1602显示内容为16X2,即可以显示两行,每行16个字符液晶模块,只能显示字符和数字。
通过论证可知LCD12864显示内容多,功能多,低电压低功耗,因此选用方案一。
二.LCD12864的工作原理1.引脚功能说明LCD12864采用20接口,各引脚接口说明如表1所示:表1 引脚说明表管脚号管脚名称电平管脚功能描述1 VSS 0V 电源地2 VCC 3.0+5V 电源正3 V0 - 对比度(亮度)调整4 RS(CS)H/LRS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据5 R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR6 E(SCLK) H/L 使能信号7 DB0 H/L 三态数据线表1 引脚说明表注释1:如在实际应用中仅使用串口通讯模式,可将PSB 接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
12864lcd显示部分试验总结报告管岱2014.12.19【实验目的】在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。
并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。
【实验原理】12864-3A接口说明表:在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。
【实验内容】12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。
在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序:发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。
在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。
例如,在写指令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。
虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。
因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。
程序片段如下:利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。
这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。
并且受此启发,在写数据的程序段,对百位、十位、个位以及单位的译码程序中,将原本分别对各自数位信号敏感的四个单独进程改成了受一个的时钟上升沿敏感的一个进程,从而较好的保证了程序的时序性和同步性,经实验验证效果良好。
第1篇一、实验目的1. 熟悉按键电路的基本原理和设计方法。
2. 掌握按键电路的搭建和调试方法。
3. 了解按键电路在实际应用中的重要性。
4. 提高动手实践能力和电路分析能力。
二、实验原理按键显示电路是一种将按键输入转换为数字信号,并通过显示设备进行显示的电路。
本实验主要涉及以下原理:1. 按键原理:按键通过机械触点实现电路的通断,当按键被按下时,电路接通,产生一个低电平信号;当按键释放时,电路断开,产生一个高电平信号。
2. 译码电路:将按键输入的信号转换为相应的数字信号,以便后续处理。
3. 显示电路:将数字信号转换为可视化的信息,如LED灯、数码管等。
三、实验器材1. 电路板2. 按键3. 电阻4. LED灯5. 数码管6. 电源7. 基本工具四、实验步骤1. 按键电路搭建(1)根据电路原理图,在电路板上焊接按键、电阻、LED灯等元器件。
(2)连接电源,确保电路板供电正常。
2. 译码电路搭建(1)根据电路原理图,在电路板上焊接译码电路所需的元器件。
(2)连接译码电路与按键电路,确保信号传输正常。
3. 显示电路搭建(1)根据电路原理图,在电路板上焊接显示电路所需的元器件。
(2)连接显示电路与译码电路,确保信号传输正常。
4. 电路调试(1)检查电路连接是否正确,确保无短路、断路等问题。
(2)按下按键,观察LED灯或数码管显示是否正常。
(3)根据需要调整电路参数,如电阻阻值、电源电压等,以达到最佳显示效果。
五、实验结果与分析1. 实验结果通过实验,成功搭建了一个按键显示电路,按下按键后,LED灯或数码管能够正确显示数字信号。
2. 结果分析(1)按键电路能够正常工作,实现电路通断。
(2)译码电路能够将按键输入转换为相应的数字信号。
(3)显示电路能够将数字信号转换为可视化的信息。
六、实验总结1. 通过本次实验,掌握了按键电路的基本原理和设计方法。
2. 提高了动手实践能力和电路分析能力。
3. 了解了按键电路在实际应用中的重要性。
目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。
设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。
重点就是各部分硬件的连接设计以及程序的编写。
本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。
将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。
1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。
3、分析一下此程序的各部分的功能,各零件的工作原理。
4、对程序进行调试,分析调试结果,观察并得出结论。
1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。
//12864汉字液晶显示--按键电子时钟程序(具有闪烁,移位,加一,减一功能)#include <reg52.h>#include <intrins.h>#define uchar unsigned charvoid lcd_ini();void ascii_change(void);void delay();void wri_add(uchar com);void wri_dat(uchar com1);void shan(void);void disp();void tkey(void);sbit cs=P1^7;sbit sid=P1^6;sbit sclk=P1^5;bit flag=1;uchar dat,count,f=1;//f测试哪个单元为当前闪烁状态uchar data clock[3]={23,45,12};uchar code clockname[10]={"北京时间:"};uchar data num[6];/*******主程序*************/void main(){lcd_ini();count=10;//机器周期为1us,每次定时50ms,此变量用来控制循环次数,在下面赋值为20,共定时1秒TMOD=0x01;TL0=0XB0;TH0=0X3C;EA=1;ET0=1;IT0=1;EX0=1;TR0=1;while(1){back:ascii_change();disp();delay();if(flag==1)goto back;tkey();shan();delay();}}/****lcd初始化*******/void lcd_ini(){wri_add(0x30);delay();wri_add(0x0c);delay();wri_add(0x01);delay();wri_add(0x06);delay();}/********定时程序*************/ void timer1() interrupt 1 using 2 {TL0=0XB0;TH0=0X3C;count--;if(count==0){count=10;clock[2]++;//秒//}elsegoto out;if(clock[2]==60){clock[2]=0;clock[1]++;//分//}if(clock[1]==60){clock[1]=0;clock[0]++;}if(clock[0]==24)//时//clock[0]=0;out:_nop_();}/*******十位个位转换成ASCII码************/ void ascii_change(void){num[5]=clock[2]-(clock[2]/10)*10+0x30;num[4]=clock[2]/10+0x30;num[3]=clock[1]-(clock[1]/10)*10+0x30;num[2]=clock[1]/10+0x30;num[1]=clock[0]-(clock[0]/10)*10+0x30;num[0]=clock[0]/10+0x30;}/********廷时程序*************/void delay(){uchar i,j;for (i=250;i>0;i--)for (j=250;j>0;j--);}/*****Write address*********/void wri_add(uchar com){uchar i,j,k;cs=0;cs=1;dat=0xf8;for(i=1;i<=8;i++){sid=(bit)(dat&0x80);sclk=0;sclk=1;sclk=0;dat=dat<<1;}dat=com;dat=dat&0xf0;for(j=1;j<=8;j++){sid=(bit)(dat&0x80);sclk=0;sclk=1;sclk=0;dat=dat<<1;}dat=com;dat=_cror_(dat,4);// 此为高低四位交换dat=dat&0xf0;for(k=1;k<=8;k++){sid=(bit)(dat&0x80);sclk=0;sclk=1;sclk=0;dat=dat<<1;}}/*********Write data*************/ void wri_dat(uchar com1){uchar i,j,k;cs=0;cs=1;dat=0xfa;for(i=1;i<=8;i++){sid=(bit)(dat&0x80);sclk=0;sclk=1;sclk=0;dat=dat<<1;}dat=com1;dat=dat&0xf0;for(j=1;j<=8;j++){sid=(bit)(dat&0x80);sclk=0;sclk=1;sclk=0;dat=dat<<1;}dat=com1;dat=_cror_(dat,4);// 此为高低四位交换dat=dat&0xf0;for(k=1;k<=8;k++){sid=(bit)(dat&0x80);sclk=0;sclk=1;sclk=0;dat=dat<<1;}}/******display program***********/ void disp(){uchar i,k=0;wri_add(0x80);for (i=1;i<=9;i++)wri_dat(clockname[i-1]);wri_add(0x90);for (i=1;i<=6;i++) {k++;if(k==3||k==5)wri_dat(clockname[8]);//时间之间的冒号。
点阵LCD12864的显示原理(不带字库)在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的D OS前辈想了一个办法,就是将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或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到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前先必须了解以下功能器件才能进行编程。
r16 .set 280hr17 .set 282hr18 .set 284hr21 .set 286hr22 .set 288hr23 .set 28ahr24 .set 28chr25 .set 28ehr26 .set 290hr28 .set 27ehkeydata .set 292hrowdata .set 294hscandata .set 296hkeybuffer .set 298hdp_user .set 5hkeydata1 .set 29ahlcdtab .set 29chlcddata .set 29ehpbdatdir .set 709ahdp_pf2 .set 0e1hpadatdir .set 7098hpcdatdir .set 709chmcra .set 7090hmcrb .set 7092hmcrc .set 7094hpedatdir .set 7095hpfdatdir .set 7096h.datatab00:;-- 文字: E --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,007H,006H,004H,004H,004H,00 4H,004H,004H,004H,007H,007H,004H,004H ,000H.word000H,0C0H,080H,000H,01FH,007H,002H,00 2H,002H,002H,002H,0FFH,0FFH,000H,000H ,000H.word000H,006H,001H,000H,0C0H,000H,000H,00 0H,000H,000H,000H,0FFH,0FFH,000H,000H ,000H .word000H,000H,0C0H,0C0H,040H,040H,040H,04 0H,040H,040H,040H,0C0H,0C0H,040H,040H ,000Htab01:;-- 文字: 0 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,001H,003H,006H,004H,00 4H,004H,006H,003H,001H,000H,000H,000H ,000H.word000H,01FH,0FFH,0C0H,000H,000H,000H,00 0H,000H,000H,000H,0E0H,0FFH,01FH,000H ,000H.word000H,0F0H,0FEH,007H,001H,000H,000H,00 0H,000H,000H,001H,00FH,0FEH,0F0H,000H ,000H.word000H,000H,000H,000H,080H,0C0H,040H,04 0H,040H,0C0H,080H,000H,000H,000H,000H ,000Htab02:;-- 文字: F --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,007H,006H,006H,004H,004H,004H,00 4H,004H,004H,004H,007H,007H,004H,004H ,000H.word0C0H,080H,000H,01FH,007H,002H,002H,00 2H,002H,002H,002H,0FFH,0FFH,000H,000H ,000H.word000H,000H,000H,0C0H,000H,000H,000H,00 0H,000H,000H,000H,0FFH,0FFH,000H,000H ,000H.word000H,000H,000H,000H,000H,000H,000H,00 0H,000H,040H,040H,0C0H,0C0H,040H,040H ,000Htab03:;-- 文字: D --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,001H,003H,002H,006H,00 4H,004H,004H,004H,007H,007H,004H,004H ,000H.word000H,01FH,0FFH,0E0H,000H,000H,000H,00 0H,000H,000H,000H,0FFH,0FFH,000H,000H ,000H.word000H,0F0H,0FCH,00FH,001H,000H,000H,00 0H,000H,000H,000H,0FFH,0FFH,000H,000H ,000H.word000H,000H,000H,000H,080H,080H,0C0H,04 0H,040H,040H,040H,0C0H,0C0H,040H,040H ,000Htab04:;-- 文字: 7 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,006H,007H,006H,006H,006H,00 6H,006H,006H,006H,007H,007H,001H,000H ,000H.word000H,000H,000H,000H,0C0H,030H,00CH,00 3H,000H,000H,000H,000H,080H,0E0H,000H ,000H.word000H,000H,000H,000H,000H,000H,000H,08 0H,07FH,00FH,000H,000H,000H,000H,000H ,000H.word000H,000H,000H,000H,000H,000H,000H,00 0H,0C0H,0C0H,000H,000H,000H,000H,000H ,000Htab05:;-- 文字: 8 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 -- .word000H,000H,000H,001H,003H,006H,004H,00 4H,004H,004H,006H,003H,001H,000H,000H ,000H.word000H,000H,0F0H,0F8H,00CH,003H,003H,00 3H,003H,006H,00FH,01DH,0F8H,0F0H,000H ,000H.word000H,000H,03EH,07FH,0E1H,0C0H,080H,00 0H,000H,000H,000H,080H,0C1H,07FH,03EH ,000H.word000H,000H,000H,000H,080H,080H,040H,04 0H,040H,040H,040H,080H,080H,000H,000H ,000Htab06:;-- 文字: 9 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,000H,001H,002H,004H,00 4H,004H,004H,004H,002H,003H,001H,000H ,000H.word000H,000H,03FH,0FFH,083H,001H,000H,00 0H,000H,000H,000H,000H,081H,0FFH,07EH ,000H.word000H,000H,0E0H,0FCH,01EH,083H,081H,04 0H,040H,040H,040H,0C0H,083H,003H,000H ,000H.word000H,000H,000H,000H,000H,000H,080H,0C 0H,040H,040H,040H,040H,080H,080H,000H ,000Htab07:;-- 文字: C --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,007H,003H,002H,004H,004H,00 4H,004H,006H,002H,001H,000H,000H,000H.word000H,060H,080H,000H,000H,000H,000H,00 0H,000H,000H,000H,080H,0E0H,07FH,00FH ,000H.word000H,00CH,003H,001H,000H,000H,000H,00 0H,000H,000H,000H,001H,00FH,0FEH,0F0H ,000H.word000H,000H,000H,080H,080H,040H,040H,04 0H,040H,040H,080H,080H,000H,000H,000H ,000Htab08:;-- 文字: 4 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,000H,007H,007H,003H,00 0H,000H,000H,000H,000H,000H,000H,000H ,000H.word000H,000H,000H,000H,0FFH,0FFH,0FFH,08 0H,060H,018H,00CH,003H,000H,000H,000H ,000H.word000H,010H,010H,010H,0FFH,0FFH,0FFH,01 0H,010H,010H,010H,010H,090H,070H,010H ,000H.word000H,020H,020H,020H,0E0H,0E0H,0E0H,02 0H,020H,020H,000H,000H,000H,000H,000H ,000Htab09:;-- 文字: 5 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,006H,006H,006H,006H,006H,00 6H,006H,006H,006H,007H,000H,000H,000H ,000H.word000H,000H,000H,003H,006H,00CH,008H,00 8H,008H,008H,004H,0C2H,03FH,000H,000H .word000H,000H,0FCH,0FFH,003H,000H,000H,00 0H,000H,000H,000H,000H,00CH,00FH,000H ,000H.word000H,000H,000H,000H,080H,080H,040H,04 0H,040H,040H,040H,040H,080H,000H,000H ,000Htab10:;-- 文字: 6 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,001H,003H,004H,004H,004H,00 4H,006H,002H,001H,000H,000H,000H,000H ,000H.word000H,000H,081H,083H,006H,004H,004H,00 4H,004H,002H,003H,0E1H,07FH,00FH,000H ,000H.word000H,0FCH,0FFH,001H,000H,000H,000H,00 0H,000H,000H,001H,087H,0FEH,0F8H,000H ,000H.word000H,000H,000H,080H,080H,040H,040H,04 0H,040H,0C0H,080H,000H,000H,000H,000H ,000Htab11:;-- 文字: B --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,001H,003H,003H,006H,004H,00 4H,004H,004H,004H,007H,007H,004H,004H ,000H.word000H,000H,0F0H,0F9H,00DH,006H,002H,00 2H,002H,002H,002H,0FFH,0FFH,000H,000H ,000H.word000H,03EH,0FFH,081H,000H,000H,000H,00 0H,000H,000H,000H,0FFH,0FFH,000H,000H.word000H,000H,000H,080H,0C0H,040H,040H,04 0H,040H,040H,040H,0C0H,0C0H,040H,040H ,000Htab12:;-- 文字: 1 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,000H,000H,000H,000H,00 7H,003H,001H,001H,001H,001H,000H,000H ,000H.word000H,000H,000H,000H,000H,000H,000H,0F FH,0FFH,000H,000H,000H,000H,000H,000H ,000H.word000H,000H,000H,000H,000H,000H,000H,0F FH,0FFH,000H,000H,000H,000H,000H,000H ,000H.word000H,000H,000H,040H,040H,040H,0C0H,0C 0H,0C0H,0C0H,040H,040H,040H,000H,000H ,000Htab13:;-- 文字: 2 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,003H,003H,006H,004H,00 4H,004H,004H,004H,002H,001H,000H,000H ,000H.word000H,000H,0F8H,0FCH,006H,001H,000H,00 0H,000H,000H,000H,000H,030H,0F0H,000H ,000H.word000H,000H,00FH,001H,000H,000H,080H,04 0H,020H,010H,008H,004H,002H,001H,000H ,000H.word000H,000H,000H,0C0H,0C0H,0C0H,0C0H,0C 0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,000H tab14:;-- 文字: 3 --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,000H,003H,003H,006H,00 4H,004H,004H,004H,002H,003H,001H,000H ,000H.word000H,000H,000H,0F0H,0F9H,00DH,007H,00 2H,002H,002H,000H,000H,0E0H,0E0H,000H ,000H.word000H,000H,03CH,0FFH,081H,000H,000H,00 0H,000H,000H,000H,000H,00FH,00FH,000H ,000H.word000H,000H,000H,000H,080H,080H,040H,04 0H,040H,040H,040H,080H,080H,000H,000H ,000Htab15:;-- 文字: A --;-- 宋体24; 此字体下对应的点阵为:宽x高=16x32 --.word000H,000H,000H,000H,000H,000H,000H,00 FH,007H,007H,000H,000H,000H,000H,000H ,000H.word000H,000H,000H,000H,000H,007H,07FH,0F 8H,000H,0C0H,07CH,007H,000H,000H,000H ,000H.word000H,000H,000H,003H,07FH,0FCH,0C0H,04 0H,040H,040H,040H,0C0H,07CH,007H,000H ,000H.word000H,040H,040H,0C0H,0C0H,040H,000H,00 0H,000H,000H,000H,040H,040H,0C0H,0C0H ,040H.include "240xa.inc".def _c_int0.text_c_int0setc INTMclrc SXMclrc OVMclrc CNFldp #0e0hsplk #0e8h,WDCRldp #0Splk #0h,IMRsplk #0ffffh,IFRldp #dp_usersplk #0FFFH,r22out r22,WSGRldp #dp_pf2lacl #00hsacl mcralacl mcrblacl #0ff00hsacl mcrblacl #000hsacl mcrcnopldp #5lacl #0sacl lcdtabsacl keydatalong1:lacl #0ff00h ldp #0e1hsacl PADATDIRrpt #20 noplacl #0ff00hsacl PCDATDIR rpt #20noplacl #0ff00h sacl pedatdirrpt #20nop ldp #dp_usersplk #3eh,r16call write_ins0rpt #100 noprpt #100 noprpt #100nop ldp #dp_usersplk #3fh,r16call write_ins0 call write_ins1rpt #100nop rpt #100nopl1: ldp #dp_user splk #0c0h,r16call write_ins0noplong2:ldp #dp_user splk #0bfh,r16call write_ins0ldp #dp_usersplk #40h,r16call write_ins0ldp #dp_user call display_cs0call display_cs1long100: LAR AR4,#07Hcall display_cs0 SAR AR4,r28scan_again:call scan_keylacl keydatabcnd scan_again,eqlacl #0ff00hldp #0e1hsacl PADATDIRrpt #20noplacl #0ff00hsacl PCDATDIR noplacl #0ff00hsacl pedatdirlacl #0hldp #5hsacl lcdtablacc #0mar *,ar5ldp #5hlacl keydatasub #01hsacl keydatalar ar5,keydatalar ar0,#00hlacl #00lay1:LACL lcdtabadd #6sacl lcdtabsbrk #1hnopcmpr 00bcnd lay1,NTCsacl lcdtablong35:ldp #dp_usersplk #10h,r22ldp #dp_usersplk #0beh,r23ldp #dp_userlt r28mpy #16SPL r24ldp #dp_usersplk #0bbh,r25lacc lcdtabadd #tab00sacl lcdtabcall display4 ldp #dp_user LAR AR4,r28mar *,ar4long4:BANZ long444,*-b long100long444:SAR AR4,r28call delaylong445:call scan_key lacl keydatabcnd scan_again,eqcall delayb long445scan_key:lacl #0ff00hldp #0e1hsacl pfdatdirrpt #20noplacl #000hsacl pcdatdirrpt #20noplacl #0ff00hsacl pedatdirldp #dp_userlacl #00hsacl keydatalacl #04hSaclrowdata Lacl #0fff7hsacl scandataLDP #0e1hmmm:lacl #0ff00hsacl pfdatdirnoplacl pcdatdirnopldp #5hsacl keybufferand #0ffhor #1ehxor #0ffhbcnd scanout ,eqscan:ldp #5hlacl scandataldp #0e1hsacl pfdatdirnoplacl pcdatdirnopand #0ffhor #1ehxor #0ffhbcnd scannext,eqldp #dp_userbit keybuffer,15bcnd key1,tcldp #5hlacl keydataadd #01hsacl keydatab scanoutkey1: bit keybuffer,10bcnd key2,tclacl keydataadd #02hsacl keydatab scanoutkey2: bit keybuffer,9bcnd key3,tclacl keydataadd #03hsacl keydatanopb scanoutkey3: bit keybuffer,8bcnd scanout,tclacl keydataadd #04hsacl keydatab scanout scannext:ldp #dp_userlacl scandatasfrldp #5hsacl scandatalacl keydataadd #04hsacl keydatalacl rowdatasub #01hsacl rowdatabcnd scan,neq scanout: retdisplay4:ldp #dp_userlacl r22sacl r21ldp #dp_userpage_cycle4:ldp #dp_userlacl r24sacl r16call write_ins0ldp #dp_userLaclr23sacl r16call write_ins0ldp #dp_userlacl #0c0hsacl r16call write_ins0arrange_cycle4:ldp #dp_userlacl lcdtabldp #dp_usertblr lcddatalacl lcddataldp #dp_usersacl r16call write_data0ldp #dp_userlacl lcdtabadd #1sacl lcdtabldp #dp_userlacl r22sub #1sacl r22lar ar0,#0ldp #dp_userlar ar6,r22mar *,ar6cmpr 00bcnd arrange_cycle4,NTC LDP #dp_userlacl r21sacl r22ldp #dp_userlar ar0,r23ldp #dp_userlar ar7,r25lacl r23sub #1hldp #dp_usersacl r23mar *,ar7cmpr 00bcnd page_cycle4,NTCretdisplay5:ldp #dp_userlacl r22sacl r21ldp #dp_userpage_cycle5:ldp #dp_userlacl r24sacl r16call write_ins1ldp #dp_userLaclr23sacl r16call write_ins1ldp #dp_userlacl #0c0h sacl r16call write_ins1arrange_cycle5:ldp #dp_userlacl lcdtabldp #dp_usertblr lcddatalacl lcddataldp #dp_usersacl r16call write_data1ldp #dp_userlacl lcdtabadd #1sacl lcdtab ldp #dp_userlacl r22sub #1sacl r22lar ar0,#0ldp #dp_userlar ar6,r22mar *,ar6cmpr 00bcnd arrange_cycle5,NTC LDP #dp_userlacl r21sacl r22ldp #dp_userlar ar0,r23ldp #dp_userlar ar7,r25lacl r23sub #1hldp #dp_usersacl r23mar *,ar7cmpr 00bcnd page_cycle5,NTCret write_ins1:ldp #dp_pf2lacl #03fchsacl padatdirnoplacl #1c08hsacl pcdatdirrpt #20nopldp #0e1hlacl #0301hsacl padatdirnopldp #dp_userlacl r16or #0ff00hldp #0e1hsacl pedatdirrpt #50nopldp #0e1hlacl #03fchsacl padatdirrpt #5nopldp #0e1h lacl #0302hsacl padatdirldp #dp_pf2lacl #1c0chsacl pcdatdirldp #dp_userrpt #5nopretwrite_ins0:ldp #dp_pf2lacl #03fchsacl padatdirnoplacl #1c04hsacl pcdatdirrpt #20nopldp #0e1h lacl #0301hsacl padatdir nopldp #dp_userlacl r16or #0ff00hldp #0e1hsacl pedatdirrpt #50nopldp #0e1hlacl #03fchsacl padatdirrpt #5nopldp #0e1h lacl #0302hsacl padatdir ldp #dp_pf2lacl #1c0chsacl pcdatdirldp #dp_userrpt #5nopretwrite_data1:ldp #0e1hlacl #0ff00hsacl padatdirnopldp #0e1hlacl #1c18hsacl pcdatdirrpt #10nopldp #0e1h lacl #0ff01hsacl padatdirnopldp #dp_userlacl r16or #0ff00hldp #0e1hsacl pedatdirrpt #5nopldp #0e1hlacl #0ff00hsacl padatdirrpt #5nopldp #0e1hlacl #0ff02hSaclpadatdir ldp #dp_pf2lacl #1c0chsacl pcdatdirldp #dp_userrpt #5nopretwrite_data0:ldp #0e1hlacl #0ff00hsacl padatdirnopldp #0e1hlacl #1c14hsacl pcdatdirrpt #10nopldp #0e1hlacl #0ff01hsacl padatdirnopldp #dp_userlacl r16or #0ff00hldp #0e1hsacl pedatdir rpt #5nopldp #0e1hlacl #0ff00hsacl padatdirrpt #5nopldp #0e1h lacl #0ff02hsacl padatdirldp #dp_pf2lacl #1c0chsacl pcdatdirldp #dp_userrpt #5nopretdisplay_cs0:ldp #5hsplk #0c0h,r16call write_ins0ldp #5hsplk #0b8h,r17 arrange00:ldp #5hsplk #040h,r18 ldp #5hlacl r17sacl r16call write_ins0ldp #5hlacl r18sacl r16call write_ins0arrange01:ldp #5hsplk #00h,r16call write_data0ldp #5hlacl r18Add#1hsacl r18ldp #5hmar *,ar6lar ar6,r18lar ar0,#128cmpr 01Bcndarrange01,TCldp #5hlacl r17add #1hsacl r17call delaylar ar5,r17lar ar0,#0c0hmar *,ar5cmpr 01bcndarrange00,tcretdisplay_cs1:ldp #5hsplk #0c0h,r16call write_ins1ldp #5hsplk #0b8h,r17 arrange10:ldp #5hsplk#040h,r18ldp #5hlacl r17Saclr16call write_ins1ldp #5hlaclr18sacl r16call write_ins1arrange11:ldp #5hsplk #00h,r16call write_data1ldp #5hlacl r18add #1h ;sacl r18ldp #5hmar *,ar6ar ar6,r18lar ar0,#128cmpr 01bcnd arrange11,TCldp #5hlacl r17add #1hsacl r17call delayar ar5,r17lar ar0,#0c0hmar *,ar5cmpr 01bcndarrange10,tc retdelay:mar *,ar3lar ar3,#0fffhlar ar0,#00hdelay1:sbrk #1hnopcmpr 00bcnd delay1,NTCretend。
12864lcd显示部分试验总结报告管岱2014.12.19【实验目的】在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。
并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。
【实验原理】12864-3A接口说明表:在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。
【实验内容】12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。
在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序:发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。
在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。
例如,在写指令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。
虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。
因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。
程序片段如下:利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。
这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。
并且受此启发,在写数据的程序段,对百位、十位、个位以及单位的译码程序中,将原本分别对各自数位信号敏感的四个单独进程改成了受一个的时钟上升沿敏感的一个进程,从而较好的保证了程序的时序性和同步性,经实验验证效果良好。
这是一个在LCD128*64上显示图形的一个程序,一直以来都总是不知道怎么搞,现在终于都通了,想当初在网上总找,要不是程序不全,就是无法运行,或者是C51汇编语言,让人不爽,这样的痛苦不可以再让别人难受了。
在LCD上显示一幅图,是“我的电脑,我的文档”。
IC用PIC16F877A,晶振4MHZ,采用并行8线,LCD:TS12864-3,接法在程序中有定义,只要将此程序COPY到你的PICC里编译下载后,在目标板上即可以看到图画了!不知道可不可以加酷?#include "pic.h"#define RS RC0#define RW RC1#define E RC2#define PSB RC3#define RST RC4//PORTD=DATA;unsigned char COUNT3,COUNT2,COUNT1,COUNT,LCD_X,LCD_Y,LCD_DATA1,LCD_D ATA2,LCD_DATA,F3,R1,F0;const unsigned char TU_TAB1[]={// 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 10xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x18,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xFF,0xDC,0x00, 0x01,0x80,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xFF,0xBC,0x00,0 x01,0x80,0x00,0x30,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xB8,0x00,0 x01,0x80,0x00,0x30,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0x78,0x00,0 x01,0x80,0x00,0x19,0xFF,0xFE,0xC0,0x00,0x00,0x00,0x00,0x02,0xFF,0xFF,0x70,0x00,0 x01,0x80,0x00,0x18,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0xFF,0xFE,0xF0,0x00,0 x01,0x80,0x00,0x0C,0x01,0xFF,0x60,0x00,0x00,0x00,0x00,0x05,0xFF,0xFE,0xE0,0x00, 0x01,0x80,0x00,0x0C,0x7F,0xD0,0x20,0x00,0x00,0x00,0x00,0x05,0xFF,0xFD,0xE0,0x00,0x 01,0x80,0x00,0x06,0x00,0x0F,0xB0,0x00,0x00,0x00,0x00,0x0B,0xFF,0xFD,0xC0,0x00,0x 01,0x80,0x00,0x06,0x03,0xFC,0x10,0x00,0x00,0x00,0x00,0x0B,0xFF,0xFB,0xC0,0x00,0x 01,0x80,0x00,0x03,0x1F,0x00,0x18,0x00,0x00,0x00,0x00,0x17,0xFF,0xFB,0x80,0x00,0x0 1,0x80,0x00,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x17,0xFF,0xF7,0x80,0x00,0x0 1,0x80,0x00,0x01,0x80,0x00,0x0C,0x00,0x00,0x00,0x00,0x17,0xFF,0xF7,0x00,0x00,0x 01,0x80,0x00,0x01,0x80,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0xFF,0xEF,0x00,0x00,0x0 1,0x80,0x00,0x00,0xC0,0x00,0xF6,0x00,0x00,0x00,0x00,0x06,0x7F,0xEE,0x00,0x00,0x 01,0x80,0x00,0x00,0xC0,0x03,0xC2,0x00,0x00,0x00,0x00,0x01,0x9F,0xDE,0x00,0x00,0x 01,0x80,0x00,0x00,0x60,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x67,0xDF,0x00,0x00,0x 01,0x80,0x00,0x00,0x60,0x00,0xE3,0x00,0x00,0x00,0x00,0x00,0x19,0xBF,0x00,0x00,0x 01,0x80,0x00,0x00,0x30,0x03,0x8E,0x00,0x00,0x00,0x00,0x00,0x06,0x3F,0x00,0x00,0x0 1,0x80,0x00,0x00,0x30,0x06,0x3C,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x 01,0x80,0x00,0x00,0x18,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x0 1,0x80,0x00,0x00,0x18,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0x80,0x00,0x0 1,0x80,0x00,0x00,0x0C,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x1F,0xC0,0x00,0 x01,0x80,0x00,0x00,0x0C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x07,0xE0,0x00,0x 01,0x80,0x00,0x00,0x06,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0xE0,0x00,0x 01,0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0xC0,0x00,0x 01,1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x00,0x00,0x 01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x0 1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x 01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 1,0x80,0x05,0x40,0x88,0x04,0x01,0x08,0x00,0x00,0x0A,0x81,0x10,0x04,0x00,0x20,0x0 1,0x80,0x79,0x21,0x08,0x02,0x21,0x49,0x00,0x00,0xF2,0x42,0x10,0x04,0x47,0x10,0x0 1,0x80,0x09,0x07,0xDF,0x7F,0xF7,0xAA,0x00,0x00,0x12,0x0F,0xBE,0x7F,0xE5,0xFE,0 x01,0x80,0x7F,0xF4,0x51,0x08,0x81,0x2C,0x00,0x00,0xFF,0xE8,0xA2,0x44,0x47,0x00,0x 01,0x80,0x09,0x04,0x61,0x08,0x81,0x7F,0x00,0x00,0x12,0x08,0xC2,0x7F,0xC5,0x4A,0x 01,0x80,0x0B,0x24,0x51,0x08,0x83,0x81,0x00,0x00,0x16,0x48,0xA2,0x44,0x45,0x6A,0x 01,0x80,0x1D,0x47,0xC9,0x05,0x05,0x01,0x00,0x00,0x3A,0x8F,0x92,0x44,0x47,0x52,0x 01,0x80,0x68,0x84,0x49,0x05,0x05,0x7F,0x00,0x00,0xD1,0x08,0x92,0x7F,0xC5,0x6A,0x 01,0x80,0x09,0x94,0x41,0x02,0x01,0x01,0x00,0x00,0x13,0x28,0x82,0x44,0x05,0x4A,0 x01,0x80,0x0E,0x57,0xC1,0x0D,0x81,0x01,0x00,0x00,0x1C,0xAF,0x82,0x04,0x29,0x42,0x 01,0x80,0x38,0x34,0x4E,0x70,0x71,0x7F,0x00,0x00,0x70,0x68,0x9C,0x03,0xEB,0x7E, 0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 xFF};//*************delay_ms********************************void delay_10us(unsigned char x){while(x--);}void delay_ms(unsigned char cnt){unsigned char i;do {i = 4;do {delay_10us(39);} while(--i);} while(--cnt);}//***********检查是否LCD忙碌的子程序**********************void check_busy(void){TRISD=0xff;//在此处设为输入。
计算器键盘按键显示摘要为了满足利用AT89C51单片机结合12864LCD显示器设计计算器4*4键盘按键的要求,我设计了利用AT89C51控制整个电路显示12864LCD显示器设计计算器键盘按键的系统。
系统主要包括硬件和软件两部分。
其中包括各模块的器件选择和电路设计。
将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上,包含复位、定时电路。
通过在proteus和keil仿真软件联合仿真环境下,系统达到了通过按键显示计算器键盘按键的需求,12864LCD 精准的显示了按键信息,达到了目的。
关键字:计算器键盘、液晶显示屏、按键、复位、定时一、系统方案论证与选择根据题目要求,系统可以分为定时电路模块、复位电路模块、液晶显示电路模块、键盘模块、控制电路模块,控制电路是以AT89C51为主控芯片,其他电路模块都是由控制电路模块AT89C51芯片进行控制。
如图1,为系统总电路模块框图。
定时图1 系统总框图1.1系统基本方案论证为实现各模块的功能,分别论证了几种不同的设计方案并进行了讨论,并且就各方案的优缺点进行了方案选择。
1.1.1液晶显示电路的选择方案一:选用LCD1602液晶显示器,LCD1602是字符型的模组,为16字乘2行字符型。
但只能显示数字与字符,不可以显示汉字。
不能显示出题目目的的汉字字符。
方案二:选用LCD12864液晶显示器,12864屏幕为64行,每行显示128个字符,是点阵型显示器。
可根据需求任意显示字符、数字 、汉字、图形,LCD12864是图形型的模组。
显示器控制器接口信号说明如表1所示。
表1 控制器借口信号说明RS R/W 功能说明L L MPU写指令到IRL H 读出BF及AC状态H L MPU写数据到DRH H MPU从DR读出数据综上所述,配合我的AT89C51控制系统和液晶显示系统,我选择方案二,达到了我需要显示汉字、符号、数字的要求。
LCD1602A的显示实验液晶屏的电路连接图:/****************************************************************************** ** 描述: ** 12864标准字库液晶演示数据p0,控制p2 ******************************************************************************** */#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/************* 12864LCD引脚定义*************/#define LCD_data P0 //数据口sbit LCD_RS = P2^6; //寄存器选择输入sbit LCD_RW = P2^5; //液晶读/写控制sbit LCD_EN = P2^7; //液晶使能控制sbit LCD_PSB = P3^2; //串/并方式控制sbit LCD_RST = P3^7; //液晶复位端口#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};/*********************************************************/uchar code DIS1[] = {" 普中科技"};uchar code DIS2[] = {"自学单片机第一站"};uchar code DIS3[] = {" "};uchar code DIS4[] = {"TEL:755-29325187"};/*********************************************************/ uchar code Photo1[] ={0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0xC0,0x80,0x42,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x1F,0xFC,0x42,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xDE,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2A,0x87,0xF0,0xA2,0x0A,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x84,0x10,0xA2,0x0A,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,0xFC,0xA2,0x0A,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9F,0x90,0x05,0x2F,0xCA,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0xE1,0xA8,0x4A,0xA8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xC2,0x24,0x48,0x44,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x84,0x24,0xA8,0x4A,0xA8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6,0x58,0x3D,0x0F,0xD0,0xC4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x08,0x37,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x08,0x40,0x00,0xFF,0x90,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x86,0x10,0x40,0x00,0x08,0x08,0x10,0xFF,0x86,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x49,0x40,0x40,0x00,0x7F,0x0B,0xFC,0x08,0x0F,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x40,0x20,0x00,0x10,0x00,0x10,0x49,0x0F,0x00,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x20,0x20,0x01,0xFF,0xDD,0x10,0x2A,0x0F,0x00,0x00,0x00,0x00,0x00,0x91,0xFF,0xC6,0x00,0x00,0x00,0x00,0x00, 0x04,0x52,0x44,0x90,0x20,0x00,0x7F,0x04, 0x90,0x1C,0x06,0x00,0x00,0x00,0x00,0x00, 0x09,0xA4,0x28,0x4C,0x10,0x00,0xA1,0x04, 0x10,0x2A,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x44,0xE9,0xC3,0x90,0x01,0x3F,0x04, 0x70,0x49,0x06,0x00,0x00,0x00,0x00,0x00, 0x00,0x82,0xC5,0x81,0x70,0x00,0x21,0x0A, 0x01,0x88,0xC6,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x83,0x00,0x80,0x00,0x3F,0x11, 0xFC,0x08,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x0C,0x70,0x00,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x13,0x87,0x10,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x20,0x78,0xA0,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x20,0x00,0x60,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x21,0x80,0x60,0x40,0x00,0x00,0x71, 0xEE,0x3C,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x11,0x98,0x90,0x80,0x00,0x00,0x8E, 0x31,0xC6,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x08,0x18,0x80,0x80,0x00,0x01,0x24, 0x24,0x83,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x96,0x01,0x01,0x00,0x00,0x01,0x40, 0x28,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x49,0x86,0x03,0x00,0x00,0x01,0x40, 0x28,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x34,0x78,0x8C,0x00,0x00,0x01,0x00, 0x20,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0E,0x01,0x30,0x00,0x00,0x00,0x80, 0x30,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x71,0x87,0xCE,0x00,0x00,0x00,0x40, 0x68,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xE0,0x78,0x07,0x00,0x00,0x00,0x20, 0xC4,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0xAF,0xFF,0xC5,0x80,0x00,0x00,0x11, 0x82,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0xA9,0xB6,0x45,0xC0,0x00,0x00,0x0B, 0x01,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x2F,0x03,0xC4,0xE0,0x00,0x00,0x06, 0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x08,0x00,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x84,0x00,0x21,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/******************************************************************************/uchar code Photo2[] ={/*-- 调入了一幅图像:G:\HC-6800\12864\C语言\pz.bmp --*//*-- 宽度x高度=128x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFE,0x60, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x63,0x20, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x63,0x10, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x63,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7E,0x08, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x6C,0x08, 0x1F,0xF8,0x3F,0xF8,0x7F,0xF0,0x0F,0xF9,0xF1,0xF0,0xFF,0x87,0xC3,0xC4,0x6C,0x08, 0x0E,0x7C,0x1E,0xFC,0x38,0xF8,0x3E,0xF8,0xE0,0xE0,0x1C,0x03,0xC1,0x84,0x66,0x08, 0x0E,0x1E,0x1C,0x3C,0x38,0x38,0x38,0x38,0xE0,0xE0,0x1C,0x03,0xE1,0x84,0x66,0x08, 0x0E,0x1E,0x1C,0x1C,0x38,0x18,0x78,0x38,0xE0,0xE0,0x1C,0x03,0xE1,0x82,0x63,0x10, 0x0E,0x0E,0x1C,0x1C,0x38,0x00,0xF0,0x18,0xE0,0xE0,0x1C,0x03,0xF1,0x81,0xF3,0xA0, 0x0E,0x0E,0x1C,0x3C,0x38,0xC0,0xF0,0x00,0xE0,0xE0,0x1C,0x03,0xF1,0x81,0x80,0x60, 0x0E,0x1E,0x1C,0x3C,0x38,0xC0,0xF0,0x00,0xE0,0xE0,0x1C,0x03,0x79,0x80,0x40,0x80, 0x0E,0x1E,0x1C,0xF8,0x39,0xC0,0xE0,0x00,0xE0,0xE0,0x1C,0x03,0x79,0x80,0x3F,0x00, 0x0E,0x7C,0x1F,0xF0,0x3F,0xC0,0xE0,0x00,0xFF,0xE0,0x1C,0x03,0x3D,0x80,0x00,0x00, 0x0F,0xF8,0x1D,0xE0,0x39,0xC0,0xE0,0x00,0xE0,0xE0,0x1C,0x03,0x3D,0x80,0x00,0x00, 0x0E,0x00,0x1D,0xE0,0x38,0xC0,0xE0,0x00,0xE0,0xE0,0x1C,0x03,0x1F,0x80,0x00,0x00, 0x0E,0x00,0x1C,0xF0,0x38,0xC0,0xF0,0x00,0xE0,0xE0,0x1C,0x03,0x1F,0x80,0x00,0x00, 0x0E,0x00,0x1C,0xF0,0x38,0x00,0xF0,0x00,0xE0,0xE0,0x1C,0x03,0x0F,0x80,0x00,0x00, 0x0E,0x00,0x1C,0x78,0x38,0x00,0xF0,0x18,0xE0,0xE0,0x1C,0x03,0x0F,0x80,0x00,0x00, 0x0E,0x00,0x1C,0x78,0x38,0x18,0x70,0x38,0xE0,0xE0,0x1C,0x03,0x07,0x80,0x00,0x00, 0x0E,0x00,0x1C,0x78,0x38,0x38,0x78,0x30,0xE0,0xE0,0x1C,0x03,0x07,0x80,0x00,0x00, 0x0E,0x00,0x1C,0x3C,0x38,0xF8,0x3E,0xF0,0xE0,0xE0,0x1C,0x03,0x03,0x80,0x00,0x00, 0x1F,0x00,0x3E,0x3E,0x7F,0xF0,0x1F,0xE1,0xF1,0xF0,0xFF,0x87,0x83,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xF0,0x38,0x00,0x00,0x78,0x00,0x00,0x18,0x07,0x80,0x1C,0x03,0x80,0x00, 0x00,0x00,0x7C,0x7C,0x00,0x00,0x78,0x00,0x00,0x7C,0x07,0x80,0x1C,0x03,0xC0,0x00, 0x00,0x00,0x3C,0x70,0x00,0x00,0x70,0x00,0x07,0xFC,0x07,0x00,0x1C,0x03,0x80,0x00, 0x00,0x00,0x1C,0xE3,0xC0,0x00,0x70,0x00,0x1F,0xE1,0xC7,0x00,0x1C,0x03,0x80,0x00, 0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x70,0x00,0x00,0xE1,0xE7,0x00,0x1C,0x03,0x80,0x00,0x00,0x06,0x1C,0xE6,0x00,0xFF,0xFF,0xFC,0x00,0xE0,0xF7,0x00,0x1D,0x83,0x9E,0x00, 0x00,0x07,0x1C,0xE7,0x80,0xFF,0xFF,0xFC,0x00,0xE0,0xF7,0x03,0xFF,0xFF,0xFE,0x00,0x00,0x03,0x9C,0xEF,0x80,0xE0,0x70,0x38,0x00,0xEE,0x67,0x00,0x1C,0x03,0x80,0x00, 0x00,0x03,0xDC,0xEE,0x00,0xE0,0x70,0x38,0x3F,0xFE,0x07,0x00,0x1C,0x03,0x80,0x00, 0x00,0x01,0xFC,0xFC,0x00,0xE0,0x70,0x38,0x01,0xE0,0x07,0x00,0x1C,0x03,0x80,0x00, 0x00,0x01,0xDC,0xF8,0xE0,0xE0,0x70,0x38,0x01,0xE1,0xC7,0x00,0x1D,0xC3,0xB8,0x00, 0x00,0x3F,0xFF,0xFF,0xF0,0xE0,0x70,0x38,0x03,0xF1,0xE7,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x3F,0xFF,0xFF,0xF0,0xE0,0x70,0x38,0x03,0xFC,0xE7,0x00,0x7E,0x38,0x38,0x00, 0x00,0x00,0x80,0x0C,0x00,0xFF,0xFF,0xF8,0x07,0xFE,0xE7,0xE3,0xFC,0x18,0x78,0x00, 0x00,0x00,0xFF,0xFE,0x00,0xE0,0x70,0x38,0x07,0xFE,0x07,0xF3,0xFC,0x1C,0x70,0x00, 0x00,0x00,0xFF,0xFE,0x00,0xE0,0x70,0x38,0x0F,0xEC,0x3F,0xC1,0x9C,0x1C,0xF0,0x00, 0x00,0x00,0xE0,0x1E,0x00,0x00,0x70,0x00,0x0E,0xE7,0xFF,0x00,0x1C,0x0E,0xE0,0x00, 0x00,0x00,0xE0,0x1E,0x00,0x00,0x70,0x00,0x1C,0xEF,0x07,0x00,0x1C,0x0F,0xE0,0x00, 0x00,0x00,0xFF,0xFE,0x00,0x00,0x70,0x00,0x38,0xE0,0x07,0x00,0x1C,0x07,0xC0,0x00, 0x00,0x00,0xE0,0x1E,0x00,0x00,0x70,0x00,0x30,0xE0,0x07,0x00,0x1C,0x07,0x80,0x00, 0x00,0x00,0xE0,0x1E,0x00,0x00,0x70,0x00,0x00,0xE0,0x07,0x00,0x1C,0x0F,0xE0,0x00, 0x00,0x00,0xE0,0x1E,0x00,0x00,0x70,0x00,0x00,0xE0,0x07,0x01,0xDC,0x3F,0xF8,0x00, 0x00,0x00,0xFF,0xFE,0x00,0x00,0x70,0x00,0x00,0xE0,0x07,0x01,0xFC,0x78,0xFF,0x00, 0x00,0x00,0xE0,0x1E,0x00,0x00,0x70,0x00,0x00,0xE0,0x07,0x00,0x7F,0xE0,0x3F,0x00, 0x00,0x00,0xC0,0x1C,0x00,0x00,0x70,0x00,0x00,0xC0,0x07,0x00,0x37,0x80,0x0C,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*******************************************************************//* */ /* 延时函数*/ /* */ /*******************************************************************/ void delay(int ms){while(ms--){uchar i;for(i=0;i<150;i++){_nop_();_nop_();_nop_();_nop_();}}}/*******************************************************************/ /* */ /* 延时函数*/ /* */ /*******************************************************************/ void delay1(int ms){while(ms--){uchar y;for(y=0;y<100;y++) ;}}/*******************************************************************/ /* */ /*检查LCD忙状态*/ /*lcd_busy为1时,忙,等待。
12864lcd显示部分试验总结报告管岱2014.12.19【实验目的】在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。
并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。
【实验原理】12864-3A接口说明表:在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。
【实验内容】12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。
在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序:发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。
在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。
例如,在写指令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。
虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。
因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。
程序片段如下:利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。
这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。
并且受此启发,在写数据的程序段,对百位、十位、个位以及单位的译码程序中,将原本分别对各自数位信号敏感的四个单独进程改成了受一个的时钟上升沿敏感的一个进程,从而较好的保证了程序的时序性和同步性,经实验验证效果良好。
12864LCD液晶显示原理及使用方法液晶简介液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。
分为两种,带字库的和不带字库的。
不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。
带字库的LCD提供字库字模,但是只能显示GB2312的宋体。
各有优缺点,根据不同应用场景灵活选择。
其液晶模块原理图如下所示。
12864LCD点阵图形液晶模块原理框图下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD 的引脚说明管脚号管脚名称LEVER 管脚功能描述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”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR 或DR 6EN H/L R/W=“L”,E 信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM 数据读到DB7∽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 -10VLCD 驱动负电压19LED+ - LED 背光板电源20LED- - LED 背光板电源12864LCD点阵图形液晶模块应用连接电路液晶驱动设置在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。
目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。
设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。
重点就是各部分硬件的连接设计以及程序的编写。
本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。
将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。
1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。
3、分析一下此程序的各部分的功能,各零件的工作原理。
4、对程序进行调试,分析调试结果,观察并得出结论。
1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。
同时罗列出需要主要使用到的各个器件,以方面系统开发中器件的选取。
通过框图设计,让设计者从整体上把握系统的开发。
12864LCD显示计算器键盘按键实验设计框图如下所示2.2 元件解析2.2.1 12864 LCD 芯片1、主要技术参数和显示特性:电源:VDD 3.3V ~+5V (内置升压电路,无需负压); 显示内容:128列× 64行 显示颜色:黄绿显示角度:6:00钟直视 LCD 类型:STN与MCU 接口:8位或4位并行/3位串行 配置LED 背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等控制器接口信号说明:1、RS,R/W的配合选择决定控制界面的4种模式:2、E信号忙标志:BF BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态.字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。
DFF=1为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。
DFF 的状态是指令DISPLAY ON/OFF 和RST信号控制的。
显示数据RAM(DDRAM)模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。
字型产生RAM(CGRAM)字型产生RAM提供图象定义(造字)功能, 可以提供四组16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。
地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。
光标/闪烁控制电路此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。
2.2.2 AT89C51芯片(1)AT89C51简介AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51芯片图如下图所示。
图AT89C51芯片图(1)AT89C51主要特性:与MCS-51 兼容;4K字节可编程闪烁存储器;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24MHz;三级程序存储器锁定;128×8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。
2.2.3 计算器键盘键盘电路的设计原理首先行列式键盘中的键实际上就是一个机械开关,该开关位于行线和列线的交点处,通过按键加以连接。
当按下某个键时,该交点的行线和列线接通,相应行线或列线上的的电平发生变化,从而可以确定被按下的功能键。
4行×4列的行列式键盘如图:其次运用线翻转法判断有无键按下:键盘的高4位用于列控制,低4位用于行控制,并将全部行线P0.0~P0.3置低电平,然后再检查列线电平的状态。
只要其中有一列电平为低,则表示右键按下,并且被按下的键位于低电平和4根行线交叉的某一个按键中。
判断被按下键的位置:依次将所有的行线P0.4~P0.77置为低电平,在判断4根列线的电平状态,当遇到某一列的电平为低时表示此键按下。
计算器键盘就是一个4*4的行列扫描,行对应着A、B、C、D(和P1.0~P1.3相连),列对应着1、2、3、4(和P1.4~P1.7相连),读取P1口的值判断哪个键被按下了,执行该操作。
2.2.4电路分析1、通过AT89C51芯片PO口与键盘相接,键盘中的键就是一个行列开关,该开关位于行列的交点处,通过按下某个键,该交点的行线和列线联通,相应的行列电平发生变化,从而可以确定按下的功能键。
读取P0的值就可以确定按键,再由AT89C51芯片读取按键的值通过P1口和P2口显示在LCD12864上,每显示一个按键值LS1发出声音。
接P3.7口,判断键盘是否按下,一旦键盘某个键按下,此元件会发出声音。
2、时钟电路由AT89S51得18、19引脚的时钟端(XTL1及ATAL 2)以及12MHZ晶振、47pF 的电容C1、C2组成,采用片内振荡方式。
其时间周期为1/12us,机器周期为1s。
单片机的外部晶振电路如图3AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成振荡器。
振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平。
3、复位电路采用简单的上位电路,由1K电阻及22uF电容接至 AT89S52的RST复位端电阻给电容充电,电容的电压缓慢上升直到vcc,没到vcc时芯片复位脚近似低电平,于是芯片复位,接近vcc时芯片复位脚近高电平,于是芯片停止复位,复位完成。
按键后:电容器被短路放电、RST直接和VCC相连,就是高电平,此时进入“复位状态”。
松手后:电源开始对电容器充电,此时,充电电流在电阻上,形成高电平送到RST,仍然是“复位状态”;,RST降为低电平,开始正常工作。
4和列线的交点处,通过按键加以连接。
当按下某个键时,该交点的行线和列线接通,相应行线或列线上的的电平发生变化,从而可以确定被按下的功能键其次运用线翻转法判断有无键按下:键盘的高4位用于列控制,低4位用于行控制,并将全部行线Y0~Y3置低电平,然后再检查列线电平的状态。
只要其中有一列电平为低,则表示右键按下,并且被按下的键位于低电平和4根行线交叉的某一个按键中。
3 软件设计3.1主程序流程图按键操作子函数N3.2 程序代码(见附录1)4系统的仿真与调试4.1 硬件调试硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬件一般不会出现什么问题的。
静态调试一般采用的工具是万用表,它是在用户系统未工作时的一种硬件检测。
动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。
调试步骤是:首先把电路分为若干模块,调试过程中与该模块无关的元件可以不加考虑,这样可把故障限定在一定的范围内;故障清除后,把各个模块合在一起进行联调,即可完成整个硬件调试工作。
4.2 软件调试软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
调试过程:1、代码录入完成进行调试,运行出现了31个错误2、在Keil uVision3中检测查找错误,3、检测过程中总是有一处错误无法解决4、最后把原程序分开逐个调试,检查每段程序的错误,修正每个代码错误5、这种分开调试方法的效率还是很不错的,经过几次修改就完成了程序的调试,运行结果没有错误,电路显示也完全正确。