单片机数码管0到100编程,按键控制暂停
时间: 2023-11-24 14:27:08 浏览: 150
下面是一个基于单片机的数码管计数器程序,可以实现从0到100的计数,并且可以通过按键控制暂停:
```c
#include <reg52.h>
sbit KEY = P1^0; // 按键连接到P1.0口
sbit D1 = P2^0; // 数码管第一位
sbit D2 = P2^1; // 数码管第二位
sbit D3 = P2^2; // 数码管第三位
sbit D4 = P2^3; // 数码管第四位
unsigned char code LED_DuanMa[]={
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
void Delay(unsigned int i) // 延时函数
{
unsigned int j, k;
for(j = 0; j < i; j++)
for(k = 0; k < 110; k++);
}
void Display(unsigned char num) // 数码管显示函数
{
D1 = LED_DuanMa[num / 1000];
D2 = LED_DuanMa[num / 100 % 10];
D3 = LED_DuanMa[num / 10 % 10];
D4 = LED_DuanMa[num % 10];
}
void main()
{
unsigned int i = 0;
while(1)
{
if(KEY == 0) // 检测按键是否按下
{
while(!KEY); // 等待按键释放
Delay(10); // 延时去抖动
while(KEY) // 暂停状态
{
Display(i);
}
}
else // 计数状态
{
i++;
if(i > 100) i = 0;
Display(i);
Delay(500);
}
}
}
```
该程序使用了一个`Delay()`函数来实现延时,这个函数可以根据实际需求进行调整。在正常计数状态下,程序会每500毫秒自动加1,直到计数到100后又从0开始。按下按键后,程序会进入暂停状态,此时数码管会显示当前计数的值,并且程序会一直停留在此状态,直到再次按下按键才会继续计数。
阅读全文