论坛元老
- 积分
- 4654
- 金钱
- 4654
- 注册时间
- 2017-7-6
- 在线时间
- 705 小时
|
主函数用的定时器1,1ms扫描一次;呼吸灯用的定时器0,定时了50us,做了140级,按键和数码管都在主函数1ms扫描里面,
呼吸灯在其外面;各个模块的程序如下:
一、主函数
void main(void)
{
Init_System();
Time_int();
while(1)
{
if(b_1ms_t)
{
b_1ms_t = 0;
WDTR = 0x5A;
deplay(); //êyÂë1ü
key(); //°′¼ü
}
led_on(); //oôÎüμÆ
}
}
二、数码管
void deplay(void)
{
P0M &= 0x3f;
P1M &= 0x3f;
P2M &= 0x00;
num_show(r_smg_num);
seg_on();
r_smg_1st++;
if(r_smg_1st == 200)
{
r_smg_1st = 0;
r_smg_num++;
if(r_smg_num == 40)
{
r_smg_num = 0;
}
}
}
void seg_on(void)
{
if(b_key_smg)
{
r_smg_t1++;
if(r_smg_t1 == 17)
{
r_smg_t1 = 1;
}
if(seg0 == 1&&r_smg_t1 == 1) //a
{
P0M |= 0xc0;
P1M |= 0x00;
P2M |= 0x00;
led2 = 1;
led1 = 0;
}
if(seg1 == 1&&r_smg_t1 == 2) //b
{
P0M |= 0x80;
P1M |= 0x00;
P2M |= 0x01;
led2 = 1;
led3 = 0;
}
if(seg2 == 1&&r_smg_t1 == 3) //c
{
P0M |= 0x40;
P1M |= 0x00;
P2M |= 0x02;
led4 = 1;
led1 = 0;
}
if(seg3 == 1&&r_smg_t1 == 4) //d
{
P0M |= 0x40;
P1M |= 0x80;
P2M |= 0x00;
led5 = 1;
led1 = 0;
}
if(seg4 == 1&&r_smg_t1 == 5) //e
{
P0M |= 0x40;
P1M |= 0x40;
P2M |= 0x00;
led6 = 1;
led1 = 0;
}
if(seg5 == 1&&r_smg_t1 == 6) //f
{
P0M |= 0xc0;
P1M |= 0x00;
P2M |= 0x00;
led1 = 1;
led2 = 0;
}
if(seg6 == 1&&r_smg_t1 == 7) //g
{
P0M |= 0x40;
P1M |= 0x00;
P2M |= 0x01;
led3 = 1;
led1 = 0;
}
if(seg7 == 1&&r_smg_t1 == 8) //dp
{
P0M |= 0x00;
P1M |= 0x80;
P2M |= 0x01;
led5 = 0;
led3 = 0;
}
if(seg_l0 == 1&&r_smg_t1 == 9) //a
{
P0M |= 0x00;
P1M |= 0xc0;
P2M |= 0x00;
led6 = 1;
led5 = 0;
}
if(seg_l1 == 1&&r_smg_t1 == 10) //b
{
P0M |= 0x80;
P1M |= 0x40;
P2M |= 0x00;
led6 = 1;
led2 = 0;
}
if(seg_l2 == 1&&r_smg_t1 == 11) //c
{
P0M |= 0x00;
P1M |= 0x40;
P2M |= 0x01;
led3 = 1;
led6 = 0;
}
if(seg_l3 == 1&&r_smg_t1 == 12) //d
{
P0M |= 0x00;
P1M |= 0x80;
P2M |= 0x01;
led3 = 1;
led5 = 0;
}
if(seg_l4 == 1&&r_smg_t1 == 13) //e
{
P0M |= 0x00;
P1M |= 0x80;
P2M |= 0x02;
led5 = 1;
led4 = 0;
}
if(seg_l5 == 1&&r_smg_t1 == 14) //f
{
P0M |= 0x80;
P1M |= 0x00;
P2M |= 0x02;
led2 = 1;
led4 = 0;
}
if(seg_l6 == 1&&r_smg_t1 == 15) //g
{
P0M |= 0x00;
P1M |= 0x40;
P2M |= 0x02;
led6 = 1;
led4 = 0;
}
if(seg_l7 == 1&&r_smg_t1 == 16) //dp
{
P0M |= 0x00;
P1M |= 0xc0;
P2M |= 0x00;
led5 = 0;
led6 = 0;
}
}
else if(!b_key_smg)
{
r_smg_num = 0;
}
}
void num_show(uint8_t num)
{
seg = numtab[num/10];
seg_l = numtab[num%10];
}
三、呼吸灯
void led_on(void)
{
if(b_key_led)
{
if(b_50us_t)
{
b_50us_t = 0;
r_led_t0++;
if(r_led_t0 <= r_led_t1)
{
led = 1;
}
else
{
led = 0;
}
if(r_led_t0 == 140)
{
r_led_t0 = 0;
if(!b_led)
{
r_led_t1++;
if(r_led_t1 == 140)
{
b_led = 1;
}
}
if(b_led)
{
r_led_t1--;
if(r_led_t1 == 0)
{
b_led = 0;
}
}
}
}
}
}
|
|