矩阵键盘扫描实验

合集下载

矩阵键盘扫描实验

矩阵键盘扫描实验

实验矩阵键盘扫描实验一、实验要求利用4X4 16位键盘和一个7段LED构成简单的输入显示系统,实现键盘输入和LED 显示实验。

二、实验目的1、理解矩阵键盘扫描的原理;2、掌握矩阵键盘与51单片机接口的编程方法。

三、实验电路及连线Proteus实验电路1、主要知识点概述:本实验阐述了键盘扫描原理,过程如下:首先扫描键盘,判断是否有键按下,再确定是哪一个键,计算键值,输出显示。

2、效果说明:以数码管显示键盘的作用。

点击相应按键显示相应的键值。

五、实验流程图1、Proteus仿真a、在Proteus中搭建和认识电路;b、建立实验程序并编译,加载hex文件,仿真;c、如不能正常工作,打开调试窗口进行调试参考程序:ORG 0000HAJMP MAINORG 0030HMAIN:MOV DPTR,#TABLE ;将表头放入DPTRLCALL KEY ;调用键盘扫描程序MOVC A,@A+DPTR ;查表后将键值送入ACCMOV P2,A ;将ACC值送入P0口LJMP MAIN ;返回反复循环显示KEY: LCALL KS ;调用检测按键子程序JNZ K1 ;有键按下继续LCALL DELAY2 ;无键按调用延时去抖AJMP KEY ;返回继续检测按键K1:LCALL DELAY2LCALL DELAY2 ;有键按下延时去抖动LCALL KS ;再调用检测按键程序JNZ K2 ;确认有按下进行下一步AJMP KEY ;无键按下返回继续检测K2: MOV R2,#0EFH ;将扫描值送入R2暂存MOV R4,#00H ;将第一列值送入R4暂存K3: MOV P1,R2 ;将R2的值送入P1口L6: JB P1.0,L1 ;P1.0等于1跳转到L1MOV A,#00H ;将第一行值送入ACCAJMP LK ;跳转到键值处理程序L1: JB P1.1,L2 ;P1.1等于1跳转到L2 MOV A,#04H ;将第二行的行值送入ACCAJMP LK ;跳转到键值理程序进行键值处理L2: JB P1.2,L3 ;P1.2等于1跳转到L3MOV A,#08H ;将第三行的行值送入ACCAJMP LK ;跳转到键值处理程序L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处MOV A,#0cH 将第四行的行值送入ACCLK: ADD A,R4 ;行值与列值相加后的键值送入APUSH ACC ;将A中的值送入堆栈暂存K4:LCALL DELAY2 ;调用延时去抖动程序LCALL KS ;调用按键检测程序JNZ K4 ;按键没有松开继续返回检测POP ACC ;将堆栈的值送入ACCRETNEXT:INC R4 ;将列值加一MOV A,R2 ;将R2的值送入AJNB ACC.7,KEY ;扫描完至KEY处进行下一扫描RL A ;扫描未完将A中的值右移一位进行下一列的扫描MOV R2,A ;将ACC的值送入R2暂存AJMP K3 ;跳转到K3继续KS: MOV P1,#0FH ;将P1口高四位置0低四位值1MOV A,P1 ;读P1口XRL A,#0FH ;将A中的值与A中的值相异或RET ;子程序返回DELAY2: ;40ms延时去抖动子程序MOV R5,#08HL7: MOV R6,#0FAHL8: DJNZ R6,L8DJNZ R5,L7RETTABLE: ;七段显示器数据定义DB 0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234DB 92H, 82H, 0F8H, 80H, 90H ; 56789DB 88H, 83H, 0C6H, 0A1H, 86H ; ABCDEDB 8EH ; FEND ;程序结束。

键盘扫描程序实验报告

键盘扫描程序实验报告

一、实验目的1. 理解键盘扫描的基本原理。

2. 掌握使用C语言进行键盘扫描程序设计。

3. 学习键盘矩阵扫描的编程方法。

4. 提高单片机应用系统的编程能力。

二、实验原理键盘扫描是指通过检测键盘矩阵的行列状态,判断按键是否被按下,并获取按键的值。

常见的键盘扫描方法有独立键盘扫描和矩阵键盘扫描。

独立键盘扫描是将每个按键连接到单片机的独立引脚上,通过读取引脚状态来判断按键是否被按下。

矩阵键盘扫描是将多个按键排列成矩阵形式,通过扫描行列线来判断按键是否被按下。

这种方法可以大大减少引脚数量,降低成本。

本实验采用矩阵键盘扫描方法,使用单片机的并行口进行行列扫描。

三、实验设备1. 单片机开发板(如51单片机开发板)2. 键盘(4x4矩阵键盘)3. 连接线4. 调试软件(如Keil)四、实验步骤1. 连接键盘和单片机:将键盘的行列线分别连接到单片机的并行口引脚上。

2. 编写键盘扫描程序:(1)初始化并行口:将并行口设置为输入模式。

(2)编写行列扫描函数:逐行扫描行列线,判断按键是否被按下。

(3)获取按键值:根据行列状态,确定按键值。

(4)主函数:调用行列扫描函数,读取按键值,并根据按键值执行相应的操作。

3. 调试程序:将程序下载到单片机,观察键盘扫描效果。

五、实验程序```c#include <reg51.h>#define ROW P2#define COL P3void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void scan_key() {unsigned char key_val = 0xFF;ROW = 0xFF; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值}void main() {while (1) {scan_key();if (key_val != 0xFF) {// 执行按键对应的操作}}}```六、实验结果与分析1. 实验结果:程序下载到单片机后,按键按下时,单片机能够正确读取按键值。

矩阵键盘扫描

矩阵键盘扫描

矩阵键盘扫描1.实验目的与效果:4¡4矩阵键盘在众多场合有举足轻重的地位,所以有必要学好矩阵键盘扫描的编程。

实验板上的矩阵键盘是接单片机P2口的,以P2.4-P2.7作输出线,P2.0-P2.3作输入线;每按一个键会在数码管上显示相关的信息。

键盘上可以这样来定义,这只是个例子,用户在运用矩阵键盘键值是可以重新定义之。

2.原理图:矩阵键盘连接图3.实验板上操作:1)矩阵键盘在实验板上已经固定连接P2口了。

2)将HEX文件烧到单片机上。

3)将数码管的位选拨码开关拨到ON上。

4.实物连接图:拨码开关全部拨到ON5. C语言程序://MCU:AT89S51//晶振:12M#include"AT89X51.H"unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF};//数字0~9及ABCDEF共阳数码管代码unsigned char code charcode[]={0xc0,0xc7,0xc7,0x86,0x89};// HELLO 字样共阳数码管代码unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码管位选代码unsigned char dispbuf[8]={16,16,16,0,1,2,3,4};unsigned char disp_bit_count;unsigned char disp_count;unsigned char temp;unsigned char key;unsigned char i,j;/********1ms延时子程序***********/delay_nms(unsigned int n){unsigned int i;unsigned char j;for(i=0;i<n;i++)for(j=0;j<120;j++); //空操作}unsigned char keyscan(void){P2=0xff;P2_4=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=10;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_5=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_6=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if(temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=1;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;}temp=P2;temp=temp&0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_7=0;temp=P2;temp=temp & 0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp & 0x0f;switch(temp){case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;case 0x07:key=15;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp & 0x0f;}}}return (key);}void main(void){TMOD=0x02; //使用定时器0,选择方式2(常数自动重装的8位定时器)TH0=0x06; //保存数值,用于自动重装TL0=0x06; //定时250uS初值TR0=1; //开定时器0ET0=1; //开定时器0溢出中断EA=1; //开总中断while(1){dispbuf[0]=keyscan();}}/**********T0250uS中断服务程序***************/void t0(void) interrupt 1 using 0{disp_count++;if(disp_count==8){disp_count=0;if(disp_bit_count>=3)P0=charcode[dispbuf[disp_bit_count]];elseP0=numcode[dispbuf[disp_bit_count]];P1=bitcode[disp_bit_count];disp_count=0;disp_bit_count++;if(disp_bit_count==8){disp_bit_count=0;}}}。

矩阵键盘扫描及LED数码显示综合实验

矩阵键盘扫描及LED数码显示综合实验

实验三:矩阵键盘扫描及LED数码显示综合实验
一、实验要求
利用4×4键盘和一个LED数码管构成简单的输入显示系统,实现键盘输入和LED数码显示相应键值的功能。

二、实验目的
1.掌握数码管显示原理,及无译码显示电路的显示程序的编写;
1.理解矩阵键盘扫描的原理;
2.掌握矩阵键盘与51单片机接口的编程方法。

三、实验电路图
四、主要知识点
键盘扫描原理、无译码电路的显示原理。

五、实验流程图
六、实验效果:点击相应按键显示相应的键值
七、实验步骤
1.在keil环境下编写程序,汇编后生成*.Hex文件。

2.硬件验证
1)用ISP下载*.HEX程序到CPU
2)按连接表连接电路
3)检查验证结果。

八、连线表
十、源程序:自己编写源程序。

关于矩阵键盘行列扫描的测试实验

关于矩阵键盘行列扫描的测试实验
*******************************************************************************/
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f; // 位定义的引脚
if(GPIO_KEY!=0x0f) //读取按键是否按下
/*******************************************************************************
* 函数名 : KeyDown
* 函数功能 : 检测有按键按下并读取键值
* 输入 : 无
* 输出 : 无
* 作者 : INK
* 日期地点 : NANKING
下图就是矩阵键盘 由P1口控制,P10~P13为列 P14~P17为输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。
{
Delay10ms(); //延时10ms进行消抖
if(GPIO_KEY!=0x0f) //再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{ //此段程序只是为了确定列的值 方便在后面进行测试行的时候加减运算 获得具体案件的行列值 从而转换为按键值
case(0X07): KeyValue=0;break;//扫描第一列
switch(GPIO_KEY)
{ //已经进行过
case(0X70): KeyValue=KeyValue;break;//自己去看为什么是 0X70 列的时候又为什么是0X07 硬件相结合

矩阵键盘实验报告

矩阵键盘实验报告

自主学习用实验矩阵键盘识别实验
一、实验目的
1、掌握 4×4 矩阵键盘的工作原理和键盘的扫描方式。

2、掌握键盘的去抖方法和键盘应用程序的设计。

二、实验设备
1、PC 机一台;
2、开放式模块化单片机教学实验箱一台;
3、USB 下载线一根。

三、实验内容
自行编制程序,用 51 单片机实现 4×4 矩阵键盘扫描,采用线反转法;并实现当S11按下时在数码管上显值“0”,当S12按下时在数码管上显值“1”……,即依次将 S11 至S26按下,在数码管上依次显示十六进制数“0-F”,矩阵键盘原理图如图1-1 所示。

单片机与数码管接口电路原理图如图 1-2 所示。

图 1-1 矩阵键盘接口电路
图 1-2 数码管接口电路原理图
四、思考题
1.画出所编程序的流程图;
2.若要实现2×4 矩阵键盘,软硬件作如何修改。

答:将行线P2^3, P2^4接线去掉。

程序对应部分P2=0xfd; P2=0xfe;删掉。

3.实验中有何故障、问题出现,是否得到解决?如何解决的?问题:显示值对应出错。

原来是共阳段码和共阴段码弄相反了。

矩阵式键盘试验一

矩阵式键盘试验一

矩阵式键盘试验实验目的:1.掌握矩阵式键盘结构2.掌握矩阵式键盘工作原理3.掌握矩阵式键盘的两种常用编程方法,即扫描法和反转法实验要求:完成矩阵式键盘实验。

具体包括绘制仿真电路图、编写c源程序(反转法和扫描法)、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。

实验内容:实验1.矩阵式键盘实验功能:用数码管显示4*4矩阵式键盘的按键值,当K1按下后,数码管显示数字0,当K2按下后,显示为1,以此类推,当按下K16,显示F。

①硬件设计电路原理图如下②C源程序程序1:扫描法#include <REGx51.H>unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0x A1,0x86,0x8E};void delay(unsigned char xms) {while(xms--) {unsigned char i, j;i = 2;j = 239;do {while (--j);} while (--i);}}void dispaly(unsigned char num) {P2 = 0x00;P0 = table[num];}unsigned char keyscan() {P1 = 0xff;P1_3 = 0;if (P1_7 == 0) {delay(20);}if (P1_6 == 0) {delay(20);while(!P1_6) {}return 4;}if (P1_5 == 0) {delay(20);return 8;}if (P1_4 == 0) {delay(20);return 12; }P1 = 0xff;P1_2 = 0;if (P1_7 == 0) {delay(20);return 1;}if (P1_6 == 0) {return 5; }if (P1_5 == 0) {delay(20);return 9; }if (P1_4 == 0) {delay(20);return 13; }P1 = 0xff;P1_1 = 0;if (P1_7 == 0) {delay(20);return 2; }if (P1_6 == 0) {delay(20);return 6; }if (P1_5 == 0) {delay(20);}if (P1_4 == 0) {delay(20);return 14; }P1 = 0xff;P1_0 = 0;if (P1_7 == 0) {delay(20);return 3; }if (P1_6 == 0) {delay(20);return 7; }if (P1_5 == 0) {delay(20);return 11; }if (P1_4 == 0) {delay(20);return 15; }void main() {unsigned char num;while (1) {num = keyscan();dispaly(num);}}程序2:反转法#include <REGX51.H>unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0x A1,0x86,0x8E};unsigned char flag = 0;void delay(unsigned char xms) {while(xms--) {unsigned char i, j;i = 2;j = 239;do {while (--j);} while (--i);}}void display(unsigned char num) {P2 = 0x00;P0 = table[num];}unsigned char keyscan() {unsigned char n,m;P1 = 0x0f;n = P1;n &= 0x0f;P1 = 0xf0;m = P1;m &= 0xf0;switch(n | m) {case(0xee): flag = 1; return 15; //1110_1110case(0xde): flag = 1; return 11; //1101_1110case(0xbe): flag = 1; return 7; //1011_1110case(0x7e): flag = 1; return 3; //0111_1110case(0xed): flag = 1; return 14; //1110_1101case(0xdd): flag = 1; return 10; //1101_1101case(0xbd): flag = 1; return 6; //1011_1101case(0x7d): flag = 1; return 2; //0111_1101case(0xeb): flag = 1; return 13; //1110_1011case(0xdb): flag = 1; return 9; //1101_1011case(0xbb): flag = 1; return 5; //1011_1011case(0x7b): flag = 1; return 1; //0111_1011case(0xe7): flag = 1; return 12; //1110_0111case(0xd7): flag = 1; return 8; //1101_0111case(0xb7): flag = 1; return 4; //1011_0111case(0x77): flag = 1; return 0; //0111_0111default: flag = 0; return 0;}}void main() {unsigned char num = 0;while (1) {unsigned char num1 = keyscan();if (flag) {num = num1;}display(num);}}proteus仿真扫描法反转法实验结果与分析:。

矩阵键盘实验报告

矩阵键盘实验报告

矩阵键盘实验报告矩阵键盘实验报告引言:矩阵键盘是一种常见的输入设备,广泛应用于电子产品中。

本实验旨在通过对矩阵键盘的研究和实验,深入了解其原理和工作机制,并探索其在实际应用中的潜力。

本文将从实验目的、实验步骤、实验结果和讨论四个方面进行论述。

实验目的:1. 理解矩阵键盘的工作原理;2. 掌握矩阵键盘的接线方法;3. 通过实验验证矩阵键盘的可靠性和稳定性。

实验步骤:1. 准备实验材料:矩阵键盘、电路板、导线等;2. 连接电路:将矩阵键盘与电路板通过导线连接;3. 编写程序:使用C语言编写程序,实现对矩阵键盘的扫描和按键检测;4. 烧录程序:将编写好的程序烧录到单片机中;5. 运行实验:按下矩阵键盘上的按键,观察电路板上的指示灯是否亮起。

实验结果:经过实验,我们成功地完成了矩阵键盘的接线和程序烧录,并进行了按键测试。

在按下不同的按键时,电路板上相应的指示灯亮起,证明了矩阵键盘的正常工作。

讨论:1. 矩阵键盘的工作原理:矩阵键盘是由行线和列线组成的,每个按键都与行线和列线相连。

当按下某个按键时,对应的行线和列线会短接,从而使得电流流过该按键,被检测到。

2. 矩阵键盘的接线方法:在本实验中,我们采用了常见的4行4列的接线方式,即将矩阵键盘的4个行线连接到单片机的4个输入引脚上,将4个列线连接到单片机的4个输出引脚上。

3. 矩阵键盘的可靠性和稳定性:通过实验,我们发现矩阵键盘具有较高的可靠性和稳定性。

即使在长时间使用和频繁按键的情况下,矩阵键盘仍能正常工作,并且按键的检测准确率较高。

4. 矩阵键盘的应用潜力:矩阵键盘广泛应用于各种电子产品中,如计算机、手机、电视遥控器等。

它具有结构简单、成本低廉、易于集成等优点,因此在电子产品设计中具有广阔的应用前景。

结论:通过本次实验,我们对矩阵键盘的工作原理和接线方法有了更深入的了解,并验证了其可靠性和稳定性。

矩阵键盘作为一种常见的输入设备,在电子产品设计中具有重要的地位和潜力。

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

DSP实验报告
实验名称:矩阵键盘扫描实验系部:物理与机电工程学院专业班级:
学号:
学生姓名:
指导教师:
完成时间:2014-5-8
报告成绩:
矩阵键盘扫描实验
一、实验目的
1.掌握键盘信号的输入,DSP I/O的使用;
2.掌握键盘信号之间的时序的正确识别和引入。

二、实验设备
1. 一台装有CCS软件的计算机;
2. DSP试验箱的TMS320F2812主控板;
3. DSP硬件仿真器。

三、实验原理
实验箱上提供一个 4 * 4的行列式键盘。

TMS320F2812的8个I / O口与之相连,这里按键的识别方法是扫描法。

当有键被按下时,与此键相连的行线电平将由此键相连的列线电平决定,而行线的电平在无法按键按下时处于高电平状态。

如果让所有的列线也处于高电平,那么键按下与否不会引起行线电平的状态变化,始终为高电平。

所以,在让所有的列线处于高电平是无法识别出按键的。

现在反过来,让所有的列线处于低电平,很明显,按键所在的行电平将被拉成低电平。

根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按下。

假如是5键按下,为了进一步判定是哪一列的按键被按下,可在某一时刻只让一条列线处于低电平,而其余列线处于高电平。

那么按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。

模块说明:
此模块共有两种按键,KEY1—KEY4是轻触按键,在按键未按下时为高电平输入FPGA,当按键按下后对FPGA输入低电平,松开按键后恢复高电平输入,KEY5—KEY8是带自锁的双刀双掷开关,在按键未按下时是低电平,按键按下时为高电平并且保持高电平不变,只有再次按下此按键时才恢复低电平输入。

每当按下一个按键时就对FPGA就会对此按键进行编码,KEY1—KEY8分别对应的是01H、02H、03H、04H、05H、06H、07H、08H。

在编码的同时对DSP产生中断INT1,这个时候DSP就会读取按键的值,具体使用方法可以参考光盘例程
key,prj。

实验流程图:
四、实验步骤
1.把2812 模块小板插到大板上;打开液晶模块的电源开关;
2.按下键盘按键,液晶会显示所按键的号码。

3.设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行。

4.启动Code Composer Studio 2.21选择菜单Debug→Reset CPU。

5.打开工程文件打开本实验的工程编译Example_key.prj浏览Example_key.c文件的内容,理解各语句作用。

6.编译并下载程序,生成输出文件.OUT,通过仿真器把执行代码下载到DSP 芯片;
7.运行;按下键盘按键,液晶会显示所按键的号码。

五、实验结果及分析
矩阵键盘录入名字英文缩写、学号同时结合lcd显示汉字和学号
六、实验总结
运行程序后,在按下键盘上的按键时,会显示相对应的键号(键号为:0-9、A-D、#、* 共十六的键号),其显示是通过液晶显示器显示出来,显示格式为:“key is X”。

通过本次实验使我了解KEY 轻触按键的按键扫描及消除按键的机械抖动方法,4*4矩阵键盘的设定及其IO口的配置方式,进一步掌握用C语言编写DSP程序的方法,及编译、除错能力。

附页:实验原程序代码
#include"include/DSP281x_Device.h"// DSP281x Headerfile Include File
#include"include/DSP281x_Examples.h"// DSP281x Examples Include File
unsigned short key,keyvalue;
unsigned char nAsciiDot[] = // ASCII
{ //********************** };//ASCII字模的数据表-
void Gpio_select(void);
void delay(int time)
{ int i,j;
for(i=0;i<time;i++)
for(j=0;j<1200;j++);}
void wcom(unsigned char com)
{ Reg08=com; }
void wdata(unsigned char dat)
{ Reg07=dat; }
void lcdinit(void)
{ wcom(0xa4);
wcom(0xad);
wcom(0x03);
wcom(0xac);
wcom(0xe2); //initialize interal function
delay(10);
wcom(0xa2); //set nomal display
wcom(0xa0); //ADC select SEG1 to SEG132
wcom(0xc8); //set SHL COM1 to COM64 start page setup
wcom(0x2c); //power control(VB,VR,VF=1,1,1)
wcom(0x2e); //power control(VB,VR,VF=1,1,1)
wcom(0x2f); //power control(VB,VR,VF=1,1,1)
wcom(0x25); //
wcom(0x81); //set reference voltage mode
wcom(0x20); //set reference voltage
wcom(0x40); //Initial Display Line was first line
wcom(0xa6); //set nomal display
wcom(0xa4); //set nomal display
wcom(0xaf); //display on}
void clear(void)
{ unsigned char page;
unsigned char seg;
for(page=0xb0;page<0xb9;page++) //写页地址共页0xb0----0xb8 { wcom(page);
wcom(0x10);
wcom(0x00);
for(seg=0;seg<128;seg++) wdata(0x00); }
}
void lcdwritechar(char codenum ,char y ,char x ) { unsigned char seg;
unsigned int coden;
codenum-=0x20;
coden=codenum<<4;
wcom(0xb0|(y&0x0f));//
wcom(0x10|((x>>1)&0x0f));
wcom(0x00|((x<<3)&0x0f));
for(seg=0;seg<8;seg++)
wdata(nAsciiDot[coden++]);
wcom(0xb0|((y+1)&0x0f));
wcom(0x10|((x>>1)&0x0f));
wcom(0x00|((x<<3)&0x0f));
for(seg=0;seg<8;seg++)
wdata(nAsciiDot[coden++]);
}
main()
{ InitSysCtrl();
EALLOW; EDIS;
Gpio_select(); DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitXintf(); // For this example, init the Xintf lcdinit();
clear();
while(1)
{ keyvalue=0;
GpioDataRegs.GPADAT.all =0xefff;
Reg05=0x00;
key=GpioDataRegs.GPADAT.all;
if(key!=0xefff)
{ if(key==0xe7ff) keyvalue='D';
if(key==0xebff) keyvalue='#';
if(key==0xef7f) keyvalue='0';
if(key==0xefbf) keyvalue='*'; }
Reg05=0x00;
GpioDataRegs.GPADAT.all =0xdfff;
Reg05=0x00;
key=GpioDataRegs.GPADAT.all;。

相关文档
最新文档