单片机C语言编程:按键、计数及显示
扫描二维码
随时随地手机看文章
应网友要求,下面写一个用C语言编写的程序。
电路中,共使用了三个按键,两位数码显示。使用12MHz或11.0592MHz的晶振皆可。
用Proteus仿真运行后截图如下:
程序如下:
//===================================================
#include
#define uint unsigned int
#define uchar unsigned char
sbit ADD_1 = P3^2;
sbit SUB_1 = P3^3;
sbit RST_0 = P3^4;
uchar num;
uchar code DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//---------------------------------------------------
void delay(uint ms)
{
uint i, j;
for(i = ms; i > 0; i--) for(j = 110; j > 0; j--);
}
//---------------------------------------------------
void display(uchar num)
{
P2 = 0; //消隐
P0 = DIS_SEG7[num / 10]; //输出段码
P2 = 2; //显示位置
delay(3); //显约3ms
P2 = 0;
P0 = DIS_SEG7[num % 10];
P2 = 1;
delay(3);
}
//---------------------------------------------------
void main()
{
num = 0;
while(1) { //主循环
display(num); //显示
if (ADD_1 == 0) { //如果有键按下
display(num); //用显示代替延时
if (ADD_1 == 0) { //如果键还在按下
num++; //按键功能处理
if (num >= 100) num = 0;
while(ADD_1 == 0) display(num); //等待按键释放
}
}
if (SUB_1 == 0) {
display(num);
if (SUB_1 == 0) {
num--;
if (num == -1) num = 99;
while(SUB_1 == 0) display(num);
}
}
if (RST_0 == 0) {
display(num);
if (RST_0 == 0) num = 0;
while(RST_0 == 0) display(num);
}
} }
//===================================================