单片机 - 图文(3)

2020-02-21 21:03

delay(); } } }}

void delay() //延时子程序 {

uint x,y;

for(x=2;x>0;x--)

for(y=110;y>0;y--); }

六、实验结果分析:

这次试验的重点是段选和位选,由于51芯片的引脚资源有限,而通过锁存器来扩充引脚资源又是一个比较好的办法,所以采用这种做法来控制数码管。

实验四 按键实验

一、实验目的

1、掌握单片机键盘与单片机接口

2、掌握单片机键盘(独立键盘和矩阵键盘)程序设计方法

二、实验内容

设计一4×4矩阵键盘,定义键盘数字为0~F;编制一位数码管显示按下键盘值程序。

三、实验原理

键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键盘(或称独立键盘),即一个键盘占用一个I/O口中一位,当按键较多时,这样的接法占用口线较多。在按键较多时,常将按键接成矩阵的形式,可以节省口线,例如一个I/O口可按4×4的形式接16个按键。

矩阵键盘通常由列线和行线构成,按键设在行线,列线交点处,行、列线分别连接到按键开关的两端。列线(按键一端)通过电阻接VCC,行线(按键另一端)的接地是通过程序对某I/O口输出数字“0”实现。矩阵键盘的每一个键都有自己的行值和列值,行值和列值的组合是识别这个按键的编码,称为键码。 图示出了单片机实验仪4×4矩阵键盘模块,它有P-14、P-15、P-16、P-17四行和P-10、P-11、P-12、P-13四列构成(当列线连接到某I/O时,可通过相应口经一电阻与VCC连接,见图1-1),共构成S1~S16个按键。四行行线和四列列线分别连接到JP4 接线排座的引脚,可通过它们连接到某个I/O口,实现键盘键盘闭合判断,获得键盘的键值。

四、硬件电路设计

利用单片机P2口低4位作为矩阵键盘的行线,高4为作为矩阵键盘的列线;利用8PIN 排线将最小系统模块的接线排座J8和矩阵按键模块的接线排座JP4连接(注意引脚号的对应关系)。利用P0口作为数码管的字形码输出口,利用8PIN排线将最小系统模块的接线排座J10和单位数码管模块的接线排座JP3连接(注意引脚号的对应关系)。

根据硬件电路设计,其键盘键码示于表5-1。设键盘对应数字如表5-2所示。

(S1)EE (S2)DE (S3)BE (S4)7E (S5)ED (S6)DD (S7)BD (S8)7D (S9)EB (S10)DB (S11)BB (S12)7B (S13)E7 (S14)D7 (S15)B7 (S16)77 表5-1 矩阵键盘键码表

(S1)1 (S5)5 (S2)2 (S6)6 (S3)3 (S4)4 (S7)7 (S8)8 (S9)9 (S10)0 (S11)A (S12)B (S13) (S14)D (S15)E (S16)F 表5-2 矩阵键盘对应数字

五、软件设计 1、程序流程图

开始

检测是否有按键按下 消陡

数码管显示 检测是否有按键按下

2、程序代码 #include

#define uchar unsigned char #define uint unsigned int

code char tab[16]={0xc0,0xf9, 0xa4,0xb0,0x99, 0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1, 0x86,0x8e};

//共阳极数码管显示码表 void delayms (); uchar kbscan();

void display(uchar keydisp); //函数调用声明 void main () {

uchar key; P0=0xc0; while (1) {

key=kbscan(); //是否有键按下 display(key); } }

void delayms () {

uchar i; //延时子程序 for (i=200;i>0;i--){} }

uchar kbscan () {

uchar sccode, recode; //定义矩阵键盘行,列

结束 P2=0xf0;

if((P2 & 0xf0)!=0xf0) { delayms ( );

if ((P2 & 0xf0)!=0xf0) //P2的高四位不全为1时说明有按键按下 {sccode=0xfe; //第一行为1 while((sccode&0x10)!=0) //不断扫描,确定按下的按键 { P2=sccode;

if ((P2 & 0xf0)!=0xf0) { recode = P2 & 0xf0; sccode= sccode & 0x0f; return (sccode+recode); } else

sccode=(sccode <<1)| 0x01; } } }

return(0); }

void display (uchar keydisp )

{ uchar keytab[16]={ 0xdb,0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,

0x7d,0xeb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77} ; //矩阵键码对应的数字 uchar m ;

for (m=0;m<16;m++) {

if (keytab[m]==keydisp) P0=tab[m] ; } }

六、实验结果分析:

这次的实验感觉也是比较容易的,主要针对的是将矩阵键盘对应数字进行改变,另外就是要求我们对代码要有很深的理解,这样做起来才会效率很高。。

实验五 中断实验


单片机 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电动轻便摩托车 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: