51单片机实现加法计数(计数初值为0,按键K4每按下并弹起1次,计数结果加1,计数结果为OxFF时再“加1”则让计数结果回到0),并将计数结果送D9~D16 显示变亮(D9用作计数结果最高位,D16用作计数结果最低位),要求用到延时的
时间: 2023-06-25 08:08:06 浏览: 93
以下是基于51单片机的加法计数程序,实现了计数初值为0,按下K4按键一次就让计数结果加1,当计数结果为0xFF时再按下一次K4按键,计数结果就会回到0。
```c
#include <reg51.h>
#define DATA P0
#define KEY P1
sbit LED9 = P2^0;
sbit LED10 = P2^1;
sbit LED11 = P2^2;
sbit LED12 = P2^3;
sbit LED13 = P2^4;
sbit LED14 = P2^5;
sbit LED15 = P2^6;
sbit LED16 = P2^7;
unsigned char count = 0;
void delay(unsigned int time)
{
unsigned int i, j;
for (i = time; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(unsigned char num)
{
DATA = num;
LED9 = (num & 0x80) >> 7;
LED10 = (num & 0x40) >> 6;
LED11 = (num & 0x20) >> 5;
LED12 = (num & 0x10) >> 4;
LED13 = (num & 0x08) >> 3;
LED14 = (num & 0x04) >> 2;
LED15 = (num & 0x02) >> 1;
LED16 = num & 0x01;
}
void main()
{
unsigned char key_state = 0;
display(count);
while (1)
{
if (KEY == 0x0F)
key_state = 0;
else if (key_state == 0 && KEY != 0x0F)
{
key_state = 1;
delay(20);
if (KEY != 0x0F)
{
count++;
if (count == 0xFF)
count = 0;
display(count);
}
}
}
}
```
在程序中,我们使用了一个unsigned char类型的变量count来存储计数结果,初始值为0。在主函数中,我们通过不断地检测按键K4的状态来实现计数器的加法计数功能。具体地,当按键K4被按下并弹起时,程序会检测到KEY寄存器的值不等于0x0F,此时会将计数器count加1,并判断计数器是否达到0xFF,如果达到就将计数器count置为0。然后程序会调用display函数,将计数器的值通过8个LED灯的亮灭状态显示出来。
在display函数中,我们将计数器count的值赋给DATA寄存器,然后通过位运算将计数器的最高位赋给LED9,将计数器的最低位赋给LED16,以此类推,实现了对计数器值的8位显示。为了保证8个LED灯的亮灭状态能够被人眼观察到,我们在显示之前加入了一个短暂的延时。
阅读全文