原理图如下
通过P0口作为段码的输入控制段,P3口位选的输入控制端。
本次计数范围为0~99,因此只引用P2的P2.0与P2.1。
代码如下
#include<reg52.h> unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极 unsigned int count; void delay (unsigned int ms) //延时函数 {unsigned char j; while(ms--); for(j=0;j<120;j++); } void main() { count=0; //初始化 EA=1; //总中断允许 EX0=1; //允许外部中断0中断 EX1=1; //允许外部中断1中断 IT0=1; //跳沿触发 IT1=1; //跳沿触发 P0=0xff; //段码灭 P2=0; //位码灭 while(1) { P0=0xff; P2=0x01; P0=table[count/10]; //十位 delay(5); P0=0xff; //消隐 P0=table[count%10];// 个位 P2=0x02; delay(5);} } void int0_isr() interrupt 0 //外部中断0服务函数 {count++; if(count==100) {count=0;}} void int1_isr() interrupt 2 // 外部中断1服务函数 {count--; if (count==0) {count=99;}}