矩阵键盘扫描实验
矩阵键盘扫描实验
实验矩阵键盘扫描实验一、实验要求利用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数码显示综合实验
一、实验要求
利用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. 矩阵键盘的应用潜力:矩阵键盘广泛应用于各种电子产品中,如计算机、手机、电视遥控器等。
它具有结构简单、成本低廉、易于集成等优点,因此在电子产品设计中具有广阔的应用前景。
结论:通过本次实验,我们对矩阵键盘的工作原理和接线方法有了更深入的了解,并验证了其可靠性和稳定性。
矩阵键盘作为一种常见的输入设备,在电子产品设计中具有重要的地位和潜力。
实验三 矩阵键盘检测实验
实验三矩阵键盘识别实验
一、实验目的
掌握单片机I/O口的输入检测的方法、矩阵按键的识别方法、键盘消抖等。
学会实时程序的调试技巧。
二、实验原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
三、实验内容
实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0到F,6个数码管同时静态显示即可。
下图中按键s6-s218条线分别联接p3口相连,p3.0~p3.3控制1~4行,p3.4~p3.7控制1~4列。
图1 实验板键盘电路原理图
四、实验步骤
1、按实验要求在Keil中创建项目,编辑、编译程序。
2、将编译生成的目标码文件(后缀为.Hex)传入实验板中。
3、在实验板上运行程序,观察实验运行结果并记录。
实验五 键盘扫描实验 实验报告
实验五键盘扫描实验实验报告一、实验目的本次实验的主要目的是深入了解键盘扫描的工作原理,掌握键盘扫描的编程实现方法,以及提高对硬件接口和软件编程的综合应用能力。
二、实验设备1、计算机一台2、实验开发板一套3、下载线一根4、键盘一个三、实验原理键盘扫描的基本原理是通过逐行或逐列扫描键盘矩阵,检测按键的按下和释放状态。
常见的键盘扫描方式有行列式扫描和编码式扫描。
在行列式扫描中,将键盘的行线和列线分别连接到微控制器的输入输出端口。
通过依次将行线设置为低电平,同时读取列线的状态,来判断是否有按键按下。
如果在某一行被设置为低电平时,对应的列线检测到低电平,则表示该行和该列交叉处的按键被按下。
编码式扫描则是利用专门的编码芯片对键盘进行扫描和编码,微控制器只需读取编码芯片输出的按键编码即可确定按键的状态。
四、实验步骤1、硬件连接将实验开发板与计算机通过下载线连接好。
将键盘连接到实验开发板的相应接口。
2、软件编程选择合适的编程语言和开发环境,如 C 语言和 Keil 开发环境。
定义键盘的行线和列线所对应的端口。
编写扫描函数,实现键盘扫描的逻辑。
在主函数中调用扫描函数,并根据返回的按键值进行相应的处理,如显示按键字符或执行特定的操作。
3、编译下载对编写好的程序进行编译,检查是否有语法错误。
将编译生成的可执行文件下载到实验开发板中。
4、实验测试按下键盘上的不同按键,观察实验开发板上的显示或输出结果是否正确。
检查是否能够准确检测到按键的按下和释放,以及是否存在按键抖动等问题。
五、实验结果与分析1、实验结果在实验过程中,成功实现了对键盘的扫描,并能够准确检测到按键的按下。
按下不同的按键时,实验开发板能够正确显示相应的按键字符或执行预定的操作。
2、结果分析对于按键的准确检测,说明编写的扫描函数逻辑正确,能够有效地识别键盘矩阵中的按键状态变化。
在检测到按键按下时,没有出现误判或漏判的情况,表明行线和列线的设置以及读取操作正常。
实验8-矩阵键盘扫描实验
//查询按键键值
key = Key_Scan() ;
if( key != 0xff )
printf( "Interrupt occur... K%d is pressed!\n", key ) ;
//重新初始化IO口
rGPGCON = rGPGCON & (~((3<<12)|(3<<4))) | ((1<<12)|(1<<4)) ;//GPG6,2 set output
6.EINT19、EINT11、EINT2、EINT0中断开启
}
6.2键盘中断响应
void __irq KeyISR(void)
{
1.GPG13、GPG11、GPF2、GPF0设为input端口
2.清楚中断EINT19、EINT11、EINT2、EINT0
3.键盘扫描Key_Scan(),并在串口输出
else if( (rGPGDAT&(1<< 3)) == 0 )return 14 ;
else if( (rGPGDAT&(1<<11)) == 0 )return 13 ;
//扫描键盘第2列K11、K8、K5、K2
rGPGDAT = rGPGDAT & (~((1<<6)|(1<<2))) | (0<<6) | (1<<2) ;//GPG6 output 0;GPG2 output 1
rEXTINT0 &= ~(7|(7<<8));
rEXTINT0 |= (2|(2<<8));//set eint0,2 falling edge int
单片机 矩阵键盘实验 实验报告
单片机矩阵键盘实验实验报告
实验名称:单片机矩阵键盘实验
实验目的:掌握单片机矩阵键盘的原理和应用,能够使用单片机按键输入
实验内容:利用Keil C51软件,采用AT89C51单片机实现一个4x4的矩阵键盘,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。
实验步骤:
1、搭建实验电路,将矩阵键盘与单片机相连,连接好电源正负极,然后将电路焊接成一个完整的矩阵键盘输入电路。
2、打开Keil C51软件,新建一个单片机应用工程,然后编写代码。
3、通过代码实现对矩阵键盘输入的扫描功能,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。
4、编译代码,生成HEX文件,下载HEX文件到单片机中,将单片机与电源相连,然后就可以测试了。
5、测试完成后,根据测试结果修改代码,重新编译生成HEX 文件,然后下载到单片机中进行验证。
实验结果:
经过测试,实验结果良好,能够准确地输入按键的值,显示在液晶屏上。
实验感想:
通过这次实验,我深深地认识到了矩阵键盘技术的重要性以及应用价值,同时也更加深入了解单片机的工作原理和应用技术,这对我的学习和工作都有很好的帮助。
键盘扫描实验
实验键盘扫描显示实验一、实验要求编写程序,将键盘上的值显示在第八位LED七段数码管上。
二、实验目的1.掌握LED七段数码管动态显示的原理。
2.学习键盘扫描的原理及其编程方法。
三、实验说明图1 矩阵键盘原理图电路如图1所示。
键盘矩阵输入电路采用行列扫描法实现。
将行线接输出口,列线接到输入口,采用列扫描法,先将某一行输出为低电平,其它行输出为高电平,用输入口来查询列线上的电平,逐次读入列值,如果行线上的值为0时,列线上的值也为0,则表明有按键按下。
否则,接着读入下一列,直到找到该行有按下的键为止。
如该行没有找到有按键按下,就按此方法逐行找下去,直到扫描完全部的行和列,并显示键值。
四、实验电路连线此实验不需要连线。
五、程序框图开始数码管消隐启动T0计时中断计时至0.1ms扫描键盘按键消抖发送位码和段码显示数字六、程序代码#include <C:\keil\c51\INC\STC\STC15.h>sbit P_HC595_SER = P4^0; //pin 14 SER data inputsbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clocksbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clockunsigned char code rui[]={// 0 1 2 3 4 5 6 7 8 9 A B C D E F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x10}; //段码//unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码unsigned char i,j;unsigned char code T_COM = 0x01;unsigned char display_index = 0; //显示位索引void Send_595(unsigned char dat, unsigned char dat2){ unsigned char a;for(a=0; a<8; a++){ dat <<= 1; //选数码管,位码P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}for(a=0; a<8; a++) //要显示的数字,段码{ dat2 <<= 1;P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0; }P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据}void main(void){TMOD=0x01;TL0=0xCE;TH0=0xFF;ET0=1; //允许T0中断EA=1; //开总中断TR0=1; //启动T0计数i=500;Send_595(0xff,rui[17]);Send_595(0xff,rui[17]);//消抖while(1);}//中断函数void T0_ISR(void) interrupt 1{unsigned char a,b,hang,lie;TL0=0xCE;TH0=0xFF; //1毫秒显示一次i--;hang = 0x10;for(a=0;a<4;a++){P0=~hang;hang <<= 1;if( (P0&0x0f) < 0x0f ){lie = 0x01;for(b=0;b<4;b++){if( (P0&lie) == 0x00 ){if( i=500&&(P0&lie) == 0x00 ){while( (P0&lie) == 0x00 );display_index = a*4+b;Send_595(~T_COM,rui[display_index]); //共阴输出位码,段码i=500;return;}}lie <<= 1;}}}}七、问题与解决数码管初始化时,显示的数字是乱码,可能原因是寄存器重置时存入的数是随机的。
矩阵键盘扫描实验
班级07电本一班学号2007050352姓名钟发炫同组人
实验日期2010. 05.27 室温大气压成绩
实验题目:矩阵键盘扫描实验
一、实验目的
1.掌握键盘信号的输入,DSP I/O的使用;
2.掌握键盘信号之间的时序的正确识别和引入。
二、实验设备
1. 一台装有CCS软件的计算机;
2. DSP试验箱的TMS320F2812主控板;
3. DSP硬件仿真器。
三、实验原理
实验箱上提供一个 4 * 4的行列式键盘。
TMS320F2812的8个I / O口与之相连,这里按键的识别方法是扫描法。
当有键被按下时,与此键相连的行线电平将由此键相连的列线电平决定,而行线的电平在无法按键按下时处于高电平状态。
如果让所有的列线也处于高电平,那么键按下与否不会引起行线电平的状态变化,始终为高电平。
所以,在让所有的列线处于高电平是无法识别出按键的。
现在反过来,让所有的列线处于低电平,很明显,按键所在的行电平将被拉成低电平。
根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按。
实验四键盘扫描及显示设计实验报告
实验四键盘扫描及显⽰设计实验报告实验四键盘扫描及显⽰设计实验报告⼀、实验要求1. 复习⾏列矩阵式键盘的⼯作原理及编程⽅法。
2. 复习七段数码管的显⽰原理。
3. 复习单⽚机控制数码管显⽰的⽅法。
⼆、实验设备1.PC 机⼀台2.TD-NMC+教学实验系统三、实验⽬的1. 进⼀步熟悉单⽚机仿真实验软件 Keil C51 调试硬件的⽅法。
2. 了解⾏列矩阵式键盘扫描与数码管显⽰的基本原理。
3. 熟悉获取⾏列矩阵式键盘按键值的算法。
4. 掌握数码管显⽰的编码⽅法。
5. 掌握数码管动态显⽰的编程⽅法。
四、实验内容根据TD-NMC+实验平台的单元电路,构建⼀个硬件系统,并编写实验程序实现如下功能:1.扫描键盘输⼊,并将扫描结果送数码管显⽰。
2.键盘采⽤ 4×4 键盘,每个数码管显⽰值可为 0~F 共 16 个数。
实验具体内容如下:将键盘进⾏编号,记作 0~F,当按下其中⼀个按键时,将该按键对应的编号在⼀个数码管上显⽰出来,当再按下⼀个按键时,便将这个按键的编号在下⼀个数码管上显⽰出来,数码管上可以显⽰最近 4 次按下的按键编号。
五、实验单元电路及连线矩阵键盘及数码管显⽰单元图1 键盘及数码管单元电路实验连线图2实验连线图六、实验说明1. 由于机械触点的弹性作⽤,⼀个按键开关在闭合时不会马上稳定地接通,在断开时也不会⼀下⼦断开。
因⽽在闭合及断开的瞬间均伴随有⼀连串的抖动。
抖动时间的长短由按键的机械特性决定,⼀般为 5~10ms。
这是⼀个很重要的时间参数,在很多场合都要⽤到。
键抖动会引起⼀次按键被误读多次。
为了确保 CPU 对键的⼀次闭合仅做⼀次处理,必须去除键抖动。
在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。
按键的抖动,可⽤硬件或软件两种⽅法消除。
2. 为了减少键盘与单⽚机接⼝时所占⽤ I/O 线的数⽬,在键数较多时,通常都将键盘排列成⾏列矩阵形式。
3. 从数码管显⽰⽅式看,数码管分为静态显⽰和动态显⽰两种⽅式。
矩阵键盘扫描与数码管显示实验结果分析
矩阵键盘扫描与数码管显示实验结果分析
矩阵键盘扫描与数码管显示实验是一种常见的数字电路实验。
在这个实验中,我们可以通过按下矩阵键盘上的按键,控制数码管上的数字显示。
实验结果分析主要包括以下几个方面:
1. 矩阵键盘扫描:在实验中按下键盘上的某个按键,可以通过扫描算法检测到按键的位置,并将对应按键的行列信息送入微处理器或控制电路。
分析实验结果时,可以观察是否可以正常检测到按键的位置,并且是否能够正确传递给其他部分的电路或处理器。
2. 数码管显示:通过实验中的控制电路,可以将微处理器或其他控制器输出的数字信号转换成数码管上的对应数字显示。
在分析实验结果时,可以观察数码管是否能够正常显示所期望的数字,并且是否能够响应输入信号的变化。
3. 信号传递与处理:在整个实验电路中,信号的传递和处理是关键部分。
可以分析信号在各个部分的传递过程中是否出现错误或干扰,是否能够实现正确的数据传输和处理。
4. 稳定性和可靠性:实验结果的分析还需要考虑电路的稳定性和可靠性。
即在长时间使用或复杂环境条件下,电路能否保持正常工作,并且不出现意外错误或故障。
总结来说,矩阵键盘扫描与数码管显示实验结果的分析需要关注按键的检测和传递、数码管的正确显示、信号传递与处理等方面,同时也需要考虑电路的稳定性和可靠性。
实验四 键盘扫描实验
一、实验目的、要求设计一个4X4的矩阵键盘,键盘的号码0~15,要求编写出一个键盘输入扫描程序,要求单片机能根据键盘排列顺序,能将按下去键盘号正确识别出来,并采用两个数码管分别键盘号码的个位和十位。
二、实验原理三、源程序清单或实验步骤1.设计电路,并按照电路接线2.编写调试程序:#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4;sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;unsigned char codeTab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9的段码unsigned char keyval;/**************************************************************函数功能:数码管动态扫描延时**************************************************************/void led_delay(void){unsigned char j;for(j=0;j<200;j++);}/**************************************************************函数功能:按键值的数码管显示子程序**************************************************************/void display(unsigned char k){P2=0xbf;P0=Tab[k/10];led_delay();P2=0x7f;P0=Tab[k%10];led_delay();}/**************************************************************函数功能:软件延时子程序**************************************************************/void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){EA=1;ET0=1;TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;keyval=0x00;while(1){display(keyval);}}/************************************************************** 函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/ void time0_interserve(void) interrupt 1 using 1{P1=0xf0;if((P1&0xf0)!=0xf0)delay20ms();if((P1&0xf0)!=0xf0){P1=0xfe;if(P14==0)keyval=1; if(P15==0) keyval=2; if(P16==0) keyval=3;if(P17==0)keyval=4;P1=0xfd;if(P14==0)keyval=5;if(P15==0)keyval=6;if(P16==0)keyval=7;if(P17==0)keyval=8;P1=0xfb;if(P14==0)keyval=9;keyval=10;if(P16==0)keyval=11;if(P17==0)keyval=12;P1=0xf7;if(P14==0)keyval=13;if(P15==0)keyval=14;if(P16==0)keyval=15;if(P17==0)keyval=16;}TR0=1;TH0=(65536-500)/256;TL0=(65536-500)%256;}四、实验结果经过调试:矩阵键盘上的输入按键的键号能够正常显示在LED数码管上。
实验一 矩阵键盘检测
实验一矩阵键盘检测一、实验目的:1、学习非编码键盘的工作原理和键盘的扫描方式。
2、学习键盘的去抖方法和键盘应用程序的设计.二、实验设备:51/AVR实验板、USB连接线、电脑三、实验原理:键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。
我们可以通过键盘输入数据或命令来实现简单的人机通信。
1、按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。
前者造价低,后者寿命长。
目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键).按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。
编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。
全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。
非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。
由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。
2、按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。
也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容.此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。
当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。
因此,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,通过接口电路与单片机相连. 单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。
实验五阵列式键盘实验指导书
实验五阵列式键盘实验指导书实验五阵列式键盘驱动实验一、实验目的掌握用扫描法驱动键盘二、实验原理对于一些比较复杂的系统和按键较多的场合,一般采用矩阵式键盘,矩阵式键盘有很多种,下面以应用最广泛的4x4矩阵式键盘为例来介绍4x4键盘的结构如下图所示扫描法是在程序中反复扫描键盘接口,根据端口的输入情况调用不同的按键处理子程序,单片机不能再次相应按键请求。
扫描法的步骤:(1)、先令列线Y0为低电平0,其余三根列线均为高电平,此时读取行线的状态,如果行线(X0~X3)均为高电平,则Y0这一列上没有按键按下,如果行线(X0~X3)不全为高电平,则其中为低电平的行线与Y0相交的按键按下。
这样按照同样的方法依次检查到Y1、Y2和Y3有没有按键按下。
(2)、按键软件消抖,当判断有按键按下之后,程序中延迟10ms左右的时间后,再次判断一下按键的状态,如果按键仍然处于按键按下的状态,即行线不全为1,则可以肯定按键按下,否则当做按键的抖动来处理。
(3)、根据Y0~Y3中低电平的位置Y以及X0~X3中低电平的位置X就可以找到按键按下的位置,进而对按键进行编码。
X0 X1 X2 X3Y0Y1Y2Y3三、实验内容设计阵列式键盘驱动程序,使用静态串行显示模块显示键值。
四、实验步骤1、单片机最小应用系统1的P2口接阵列式键盘的A1-A4口,P3.6接静态数码显示DIN,P3.7接CLK。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加阵列KEY.C 源程序,进行编译,直到编译无误。
4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。
在键盘上按下某个键,观察数显是否与按键值一致。
16位键盘的键值从左至右、从上至下依次为0-F (16进制数)。
阵列式键盘驱动参考程序:ORG 0000H LJMP START ORG 0030HSTART: MOV R0,#4MOV R1,#0FEH MOV P1,#0FH MOV P0,#01H MOV R2,#00HSTART1: MOV P1,R1 LOOP: MOV A,P1ANL A,#0F0H CJNE A,#0F0H,KEY AJMP BACKKEY: MOV A,P1ANL A,#0F0H CJNE A,#0F0H,KEY1 AJMP BACKKEY1: MOV B,P1MOV R3,#00H MOV DPTR,#KEYTABLOOP1: MOV A,R3MOVC A,@A+DPTR INC R3CJNE A,B,LOOP1 DEC R3 MOV A,R3 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P2,ABACK: MOV A,R1RL AMOV R1,A DJNZ R0,START1 LJMP STARTTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,0B9H,5EH,0F9H,71H KEYTAB:DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,07DH,0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H END#include #include#define uchar unsigned char #define uint unsigned intuchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D //0,1,2,3,4,5 ,0x7D,0x07,0x7F,0x6F,0x77,0x7C //6,7,8,9,A,b ,0x58,0x5E,0x7B,0x71 //c、d、e、f、全暗};uchar num,temp;void delay(uint z) //延时子程序 {uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }uchar keyscan() //键盘扫描程序,返回uchar型参数 {uchar i;for(i=0;i<4;i++) {P2=_crol_(0xfe,i); temp=P2;temp=temp&0xf0; while(temp!=0xf0) {delay(5); //延时消抖 temp=P2;temp=temp&0xf0; while(temp!=0xf0) {temp=P2; switch(temp) {case 0xee:num=1;break; case 0xde:num=2;break; case0xbe:num=3;break; case 0x7e:num=4;break; case 0xed:num=5;break;case 0xdd:num=6;break; case 0xbd:num=7;break; case 0x7d:num=8; break; case 0xeb:num=9;break; case 0xdb:num=10;break; case0xbb:num=11;break; case 0x7b:num=12;break; case 0xe7:num=13;break; case 0xd7:num=14;break; case 0xb7:num=15;break; case0x77:num=16;break; }while(temp!=0xf0) //等待按键释放{temp=P2;temp=temp&0xf0; } } } }return num; }main() {unsigned char k; unsigned char bb; SCON=0x00; P2=0xff; P1=0x01; while(1) {bb=keyscan(); P3=table[bb]; } }感谢您的阅读,祝您生活愉快。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;。