赞
踩
清翔51单片机教程
利用独立键盘的按键,控制数码管数字的变化。
**特点:**每个按键占用一个IO口,当按键数量较多时,IO口的利用效率不高,但程序简单,适用于所需按键较少的场合。
**原理:**以按键S2为例,给P30赋逻辑1,当S2被按下的时候,由于S2左端接地,则P30输出由高电平变低电平。S2没被按下依旧输出高电平。
#include <reg52.h>
#include <intrins.h>//标准库函数
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6; //数码管段选
sbit WE = P2^7; //数码管位选
sbit key_s2 = P3^0;//独立按键S2
sbit key_s3 = P3^1;//独立按键S3
uchar num; //数码管显示的值
//共阴数码管段选表0-9
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//毫秒级延时函数定义
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void main()//main函数自身会循环
{
WE = 1;//打开位选锁存器
P0 = 0XFE;//1111 1110
WE = 0;//锁存位选数据
while(1)
{
if(key_s2 == 0)
{
delay(20);//按键消抖(按键会有抖动影响结果)
if(key_s2 == 0)
{
num++;
if(num == 10)
num = 0;
while(!key_s2);//松手检测(松手后跳出循环)
}
}
if(key_s3 == 0)
{
delay(20);//按键消抖
if(key_s3 == 0)
{
num--;
if(num == 255)
num = 9;
while(!key_s3);//松手检测
}
}
//松手之后刷新显示
DU = 1;//打开段选锁存器
P0 = tabel[num];//0000 0110
DU = 0;//锁存段选数据
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。