手动计数器:一位数码管,一个按键,按下一次数码管加1,计数上限为9。51单片机程序
参考知识1
是8个数码管?首先用8个十进制计数器互相连接,形成10X8=100000000进制计数器然后让按键作为一个clk输入,你可以设置成ifclk'eventandclk='1'上升沿触发计数,或者下降沿都可以按键按一次会产生一个脉冲的最后把每一个计数器结果分别译码输出到对应的数码管
参考知识B
#include<reg51.h>
unsigned char n, nixie[]=
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;
void main()
EA=1;
EX0=1;
IT0=1;
while(1)P1=nixie[n]; /* 共阳数码管接在P1,七段笔画a-f按顺序接P1.0-P1.6 */
void ex0()interrupt 0 // 按钮接在P3.2,外中断
if(++n>9)n=0;
参考知识C
假设P0口接数码管 P1^0接按钮
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P1^0;
uchar num=0;
//共阴数码管七段码
uchar code table[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77;
void Delay1ms(uint i) //1ms延时程序
uint j;
for(;i>0;i--)
for(j=0;j<164;j++)
;
void main(void )//主程序
while(1)
if(key==0)//判断按键是否按下
Delay1ms(10);//延时消抖
if(key==0)
while(key==0);//等待按键抬起
num++;
if(num==10)num=0;
P0=table[num];