您的位置 首页 制造

51单片机 独立键盘操控

键盘部分原理图:历程里面设计到数码管,这个参考前面的文章《51单片机数码显示数字》。代码如下:注释很详细。按键key1显示数

键盘部分原理图:

进程里边规划到数码管,这个参阅前面的文章《51单片机 数码显现数字》。

代码如下: 注释很具体。

//按键key1显现数字加1,按键key2显现数字减1,按键key3清零,按键key4数字每秒加1.
#include //头文件
#define uint unsigned int //宏界说
#define uchar unsigned char
//按键标明声明
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit duanxuan=P2^6;
sbit weixuan=P2^7;

uint number; //需求显现的数字
uint time_number; //T0计时器方法一计满次数

void delay(uint); //延时函数声明
void init(); //T0定时器中止初始化函数声明
void display(uint); //显现函数声明
void keyscan();//按键检测函数声明

uchar code table[]={ //字符断码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //C言语编码界说

void main() //主函数进口
{
init(); //T0定时器方法一中止初始化
while(1)
{
display(number); //显现函数
keyscan(); //键盘扫描函数
}
}
//延时函数主体
void delay(uint s)
{
uint i,j;
for(i=s;i>0;i–)
{
for(j=110;j>0;j–)
{

}
}
}
//定时器T0方法一中止初始化函数主体
void init()
{
TMOD=0x11; //TMOD赋值,确认T0/T1工作方法
TH0=(65536-46080)/256;//TH0/TL0;TH1/TL1核算初值
TL0=(65536-46080)%6;
EA=1; //总中止翻开
ET0=1; //开T0/T1中止
//TR0=1; //TR0/TR1置位,发动定时器(本程序当key4按下之后TR=1)
}
//显现函数主体
void display(uint number0)
{
uint no1,no2,no3,no4,no5;
no1=number0/10000;
no2=number0000/1000;
no3=number000/100;
no4=number00/10;
no5=number0;
//数码管1显现 ①送断码;②挑选要显现数码管
duanxuan=1; //翻开段选锁存器
P0=table[no1]; //送断码
duanxuan=0; //封闭(锁住)锁存器
P0=0xff; //必不可少的清屏
weixuan=1; //翻开位选锁存器
P0=0xfe; //挑选数码管
weixuan=0; //封闭锁存器
delay(2); //延时
//数码管2显现
duanxuan=1;
P0=table[no2];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xfd;
weixuan=0;
delay(2);
//数码管3显现
duanxuan=1;
P0=table[no3];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xfb;
weixuan=0;
delay(2);
//数码管4显现
duanxuan=1;
P0=table[no4];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xf7;
weixuan=0;
delay(2);
//数码管5显现
duanxuan=1;
P0=table[no5];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xef;
weixuan=0;
delay(2);
}
void keyscan() //按键检测函数主体
{
if(key1==0) //检测key1按下
{
delay(10); //延时10us
if(key1==0)//检测键盘依然是按下的
{
number++;//显现数字加1
if(number==10000)//假如记满10000
{
number=0; //清零重新开始
}
while(!key1); //等候按键放下
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
number–;
if(number==0)
{
number=10000;
}
while(!key2);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
number=0;
while(!key3);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
while(!key4);
TR0=~TR0;
}
}
}
//T0定时器方法一中止服务函数主体
void R0_Time_no1() interrupt 1
{
TH0=(65536-46080)/256;//预装值
TL0=(65536-56080)%6;
time_number++; //记满次数
if(time_number==20) //20次为1s
{
time_number=0;
number++;
if(number==10000)
{
number=0;
}
}
}

以上,完毕。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部