AT89C51单片机,8位数码管(共阴共阳都行),实现0~7左(右)移循环显示(可能差东西,除单片

2025-05-18 10:39:03
推荐回答(1个)
回答1:

/*头文件*/

#include      

/*端口定义*/

#define sled_dm_port  P0      /*定义LED显示的段码数据脚*/

#define sled_wm_port  P2      /*定义LED显示的位码数据脚*/


/*1MS为单位的延时程序*/

void delay_1ms(char x)

{

    char j;

    while(x--){

        for(j=0;j<125;j++)

            {;}

        }   

}

 

/*主程序*/

void main()

{

 char i;

 char j;

 int count=0;

 char sled_disp_buff[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,

                            0xc6,0xa1,0x86,0x8e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*数码管数据*/

    

    char sled_bit_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*定义需要点亮的数码管*/

 while(1){

  for(j=0;j<100;j++){ /*单次字符显示延时*/

   for(i=0;i<8;i++){ /*扫描输出8位数码管*/ 

    sled_wm_port = 0xff; /*关闭显示*/

    sled_dm_port = sled_disp_buff[i+count]; /*输出字符代码*/

    sled_wm_port = sled_bit_table[i]; /*点亮某位数码管*/

    delay_1ms(1);

    }

   }

  count++;

  if(count>=24) count=0; /*把数码管数组的数据输出完成后重新开始*/

  } 

}