|
发表于 2020-8-9 20:29:26
|
显示全部楼层
是不是switch里的数打错了。
顺便上传一个结合开关的动态。按一下开关从0~7.
不知道为什么数字有点暗
//按键使动态数码管从0到7;
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit key=P3^0;
void moves(u16 n);//定义函数名(独立按键函数在)
unsigned char smg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//阴极段码
void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++)
{
;
}
}
//独立按键
void keypros(u16 i)
{
if(key==0)//判断按键是否被按下
{
delay_ms(5);//消抖(延时一般在5ms~10ms)
if(key==0)//再次判断按键是否被按下
{
i++;
if(i>7)
{
i=0;
}
}
while(!key)//等待按键释放(key!=1)
{
;
}
}
moves(i);
}
//动态数码管
void moves(unsigned int n)
{
switch(n)
{
case(0)SA=0,LSB=0,LSC=0;break;//0
case(1)SA=1,LSB=0,LSC=0;break;
case(2)SA=0,LSB=1,LSC=0;break;
case(3)SA=1,LSB=1,LSC=0;break;
case(4)SA=0,LSB=0,LSC=1;break;
case(5)SA=1,LSB=0,LSC=1;break;
case(6)SA=0,LSB=1,LSC=1;break;
case(7)SA=1,LSB=1,LSC=1;break;
}
P0=smg[n];
delay_ms(50);
P0=0x00;//消隐
keypros(n);
}
void main()
{
keypros(0);
}
|
|