怎么用C语言中的数组控制8个灯中的4个一起亮

发布时间:2019-08-01 05:17:34

#include <reg52.h>

unsigned char code a[]={0x7f,0xdf,0xf7,0xfd};  

unsigned char code b[]={0xbf,0xef,0xfb,0xfe}; 

unsigned char code LED[]={a,b};


unsigned char data i=0;

unsigned char data count=0;          //50ms计数器

void system_init();

void main()

{

system_init();                            // 系统初始化

while(1)

{

                                                 //空循环,主程序在等待中断的发生。

}

}

void system_init()

{

TMOD=0x01;

TH0=(65536-50000)>>8;         //取高8位的值。

TL0=(65536-50000);                 //编译器自动取低8位的值。

ET0=1;                                      //开定时器0中断。

EA=1;                                       //开总中断

TR0=1;                                     //开定时器0

P1=LED[0];                              //一开始第1个状态就开始执行。

}

void Timer_isr(void) interrupt 1

{

TH0=(65536-50000)>>8;     //取高8位的值。

TL0=(65536-50000);            //编译器自动取低8位的值。

count++;

    if(count==10)                  //计满10次,即10×50MS=0.5S

{

count=0;                              //计数器清0,准备下一次计数。

i++;                                     //新的状态

if(i>1) i=0;                           //如果状态编号为2即过界了

P1=LED[i];                           //把新的状态送给P1显示。

}

}

怎么灯不能交替一起亮

推荐回答

//假设晶振12MHZ,P1控制LED低电平亮#include "reg51.h"unsigned int YSJS=0;unsigned int P1BUF=0X03;void main(void){TMOD |= 0X10; //定时器1工作于方式1,16位定时器TH1 = 0XFF; //定时器1定时时间=500uSTL1 = 0X06;ET1 = 1; //使能定时器1中断EA =1; //开总中断P1 = P1BUF;while(1){}}void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组{TH1 = 0XFF; //定时器1定时时间=500usTL1 = 0X06;YSJS++;if(YSJS==2000) //500uS*2000=1000000us=1s{P1 = P1BUF;YSJS = 0P1BUF = P1BUF<<2;IF(P1BUF==0)P1BUF=0X03;}}

以上问题属网友观点,不代表本站立场,仅供参考!