资源简介
基于51单片机的记分器,外设利用资源为矩阵键盘,数码管,蜂鸣器,单片机课程设计经常的课题.
代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit led4=P2^7;
uint key;
int a_scores;
int b_scores;
uint a_shi;
uint a_ge;
uint b_shi;
uint b_ge;
uchar shu; //每次加减分数
uchar flag=0; //判断胜负标志位
uchar code table[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5e0x90x71 };
//{0xc00xf90xa40xb00x990x920x820xf80x800x900x880x830xc60xa10x860x8e };
void delayxms(uint xms)
{
uint ij;
for(i=0;i for(j=0;j<110;j++);
}
void key_scan() //键盘扫描程序
{
uchar temp;
P1=0xfe;//给P1口送状态1111 1110//扫描第1排
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)//延时10ms消抖确认有键按下
{
delayxms(10);
temp=P1; //再次读i/o状态
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;//若有键按下高四位有一位拉低
switch(temp)
{
case 0x7e:key=1;break; //0111 1110 A队加分
case 0xbe:key=2;break; //1011 1110 A队减分
case 0xde:key=3;break; //1101 1110 B队加分
case 0xee:key=4;break; //1110 1110 B队减分
}
while(temp!=0xf0)//等待按键释放未释放则一直停留在这个语句
{
temp=P1;
temp=temp&0xf0;
}
key=key;
}
}
P1=0xfd;//给P1口送状态1111 1101//扫描第2排
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)//延时10ms消抖
{
delayxms(10);
temp=P1; //再次读i/o状态确认有键按下
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;//若有键按下高四位有一位拉低
switch(temp)
{
case 0x7d:key=5;break; //0111 1101 切换加减分数
case 0xbd:key=6;break; //1011 1101 预置分数
case 0xdd:key=7;break; //1101 1101 清零
case 0xed:key=8;flag=1;break; //1110 1101 判断
}
while(temp!=0xf0)//等待按键释放未释放则一直停留在这个语句
- 上一篇:ADXL335加速度传感器
- 下一篇:无源定位学习代码
评论
共有 条评论