您的位置 首页 电源

课程设计,键盘扫描显现程序(c51)

//课程设计,键盘扫描显示程序//由于开发板中使用了锁存器,在proteus中仿真的话,加上锁存器的话,会出现乱码,并且//不成功,所以,就不…

//课程设计键盘扫描显现程序

//因为开发板中使用了锁存器,在proteus中仿真的话,加上锁存器的话,会呈现乱码,而且//不成功,所以,就不贴图了,不过以下代码,在事物板上测验成功

//试验代码为完成按键扫描,并显现在数码管上

//试验班上共有4个按键,别离接在p3.4,p3,5,p3.6.p3.7上,因而并没有用到矩阵键盘扫描,//操控起来比较简单,6数码管观经过锁存器接在P0口上。

#include

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6; //数码管段选操控位

sbit wela=P2^7; //数码管位选操控位

uchar key=8;

//共阴数码管段码(不叫特别的编码)

uchar code table[]=

{

0xed, 0x48, 0xf4, 0xb5, 0x99,

0x3d, 0x7d, 0x85, 0xfd, 0xbd,

0xdd, 0x79, 0x6c, 0xf1, 0x7c,

0x5c, 0x10, 0x00,

};

//位选编码

uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//函数声明

void display(uchar Duan_value,uchar Wei_value); //数码管扫描函数

void delay(uchar t); //延时函数

void key_scan(); //按键扫描函数

void delay(uchar t)

{

uchar x,y;

for(x=t;t>0;t–)

for(y=111;y>0;y–);

}

//显现对应位选的数码管按键值

void display(uchar Duan_value,uchar Wei_value)

{

dula=1;

P0=table[Duan_value];

dula=0;

wela=1;

P0=table1[Wei_value];

wela=0;

delay(3);

}

void key_scan()

{

uchar temp;

P3=0xff; //P3口写1,用于读取数据

temp=P3&0xf0; //只取高四位

if(temp!=0xf0)

{

delay(10); //延时,去除颤动

temp=P3&0xf0;

if(temp!=0xf0)

{

switch(temp)

{

case 0xe0:key=0;break;

case 0xd0:key=1;break;

case 0xb0:key=2;break;

case 0x70:key=3;break;

default:

key=8;break;

}

do{ //消除按起颤动

temp=P3;

temp&=0Xf0;

}while(temp!=0xf0);

}

}

}

void main()

{

while(1)

{

display(key,5); //用开发板上最终一位显现按键值

key_scan();

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/266737.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部