用ATP89C51芯片单片机使用P1口驱动3位7段共阴型数码管,使用P2.0-P2.2口选择用于显示的数码管,外部中断引脚INT0(P3.2)上连接了按键S1,用于中断计数,外部引脚P3.5(T1)上连接了按键S2,用于清零计数
时间: 2023-05-26 17:07:40 浏览: 88
思路:
1.设置P1口为输出口,P2.0-P2.2口为输出口,P3.2口为输入口,P3.5口为输入口。
2.编写计数器程序,按下S1键时计数器加1,按下S2键时计数器清零。
3.编写7段数码管驱动程序,根据计数器的值动态显示在数码管上。
4.编写中断程序,实现按下S1键时的中断计数功能。
代码实现:
1.初始化函数,设置IO口方向和初始值:
```
void Init()
{
P1=0xff;
P2=0;
P3=0x24;
TMOD=0x10;
TH1=0xb8;
TL1=0x00;
TR1=1;
ET0=1;
EA=1;
IT0=1;
}
```
2.计数器函数,用来设置计数器的初值、加1和清零:
```
void Count()
{
if(count==999)
{
count=0;
}
else
{
count++;
}
}
```
3.数码管驱动函数,根据计数器的值显示在数码管上(存放在数组digit[]中):
```
void Display()
{
unsigned char i;
unsigned int temp;
temp=count;
digit[0]=temp/100;
digit[1]=temp%100/10;
digit[2]=temp%10;
for(i=0;i<3;i++)
{
P2=0x01<<i;
P1=seg[digit[i]];
Delay(1);
P1=0xff;
}
}
```
4.中断程序,用来响应按下S1键的中断计数功能:
```
void Int0() interrupt 0
{
Count();
}
```
5.主函数,不停地执行数码管驱动程序,实现数码管动态显示计数器的值:
```
void main()
{
Init();
while(1)
{
Display();
}
}
```
完整代码如下:
阅读全文