找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 2229|回复: 4

单片机 键盘输入 LED显示程序(机电系 51实验板

[复制链接]
gmszone 发表于 2011-4-22 18:01:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?快速注册

×
#include<reg52.h>
#define TRUE 1
#define FALSE 0                    
#define LEDPort P0                       
#define keyPort P1
#define uchar unsigned char
#define uint unsigned int
#define keyTemp 0xf0

uint    i;
uchar   j;
uint    temp;
uint    keyNum;
uchar   keyCnt;

const uchar code LEDMap[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77};
const uchar code keyMap[] ={0xf6,0xf5,0xf3};

void delay(uint delayTime){
  for(i=0;i<delayTime;i++)
    for(j=0;j<110;j++);
}

void init(){
  TMOD=0x0;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  keyNum=-1;
}

void drawKey(uchar thumbs){
    LEDPort=LEDMap[thumbs-1];
}

uchar keyScan(){
for(keyCnt=0;keyCnt<3;keyCnt++){

keyPort=keyMap[keyCnt];

temp=keyPort;

temp=temp&keyTemp;

if(temp!=keyTemp){

delay(10);

temp=keyPort;

temp=temp&keyTemp;

if(temp!=keyTemp){

switch(temp){

case 0xe0:keyNum=keyCnt+1; drawKey(keyNum);break;

case 0xd0:keyNum=keyCnt+4; drawKey(keyNum);break;

case 0xb0:keyNum=keyCnt+7; drawKey(keyNum);break;

case 0x70:keyNum=keyCnt+10;drawKey(keyNum);break;

}

while(temp!=keyTemp){

temp=keyPort;

temp=temp&0xf0;

}

}

}
}
  return keyNum;
}
void main(){
  init();
  while(TRUE){

keyScan();
  }
}

哈,应该没有难点

评分

1

查看全部评分

拉莫斯 发表于 2011-4-22 18:53:27 | 显示全部楼层
.......我打开vc把这代码一输入是不就出来个led?
回复

使用道具 举报

眼镜蛇 发表于 2011-4-22 20:24:45 | 显示全部楼层
虽然是学这个的
依旧表示有好大的鸭梨

这几天毕业设计要用汇编语言
各种纠结···
回复

使用道具 举报

 楼主| gmszone 发表于 2011-4-22 21:00:15 | 显示全部楼层
应该还可以吧,用汇编的地方不会很多吧。。用C可以解决多数问题,移植方面也没有多大问题,VC好像有点问题吧。
回复

使用道具 举报

xiongding8 发表于 2011-4-22 21:33:07 | 显示全部楼层
恩 这个很有用啊!我们上个星期才开始开单片机!
回复

使用道具 举报

快速回复 返回顶部 返回列表