找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 548|回复: 0
收起左侧

51单片机共阴数码管显示计数0-9,计数结束实现8个LED灯依次熄灭或依次点亮

[复制链接]
ID:1102256 发表于 2023-12-16 16:21 | 显示全部楼层 |阅读模式
功能实现:计数0~9,通过共阴数码管显示数值,计数到9时,实现8个LED灯依次熄灭或依次点亮

#include <reg52.h>
#include <intrins.h>
#define ledport        P2        //LED灯
#define SMG_PORT        P0  //数码管
sbit LSA= P1^0;
sbit LSB= P1^1;
sbit LSC= P1^2;


unsigned char i;
unsigned char code LedChar[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char Ledwei[8]={
        0x00,0x00 ,0x00 , 0x00, 0x00, 0x00,0x00,0x00
        };
unsigned int cnt = 0;
unsigned char sec = 0;
/*unsigned char code ledliang[9]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};        */
       

void  led();                                                                         
void main()
{
          unsigned char cnt = 0;
    LSC= 0;
    LSB= 0;
    LSA= 0;

  TMOD=0x01;//0000 0001 方式一
        TH0=0xFC;
        TL0=0x18;
        EA=1;
        ET0=1;
        TR0=1; //开启T0
        while(1)
        {
         
      led();
        }
}       
void  tmier0()   interrupt 1  
{
  TH0=0xFC;
        TL0=0x18;
    cnt++;         
        P0 = 0x00;
          
        switch(i)
        {
                case 0: LSC=1; LSB=1; LSA=1; i++; P0=Ledwei[0];break;
                case 1: LSC=1; LSB=1; LSA=0; i++; P0=Ledwei[1];break;
                case 2: LSC=1; LSB=0; LSA=1; i++; P0=Ledwei[2];break;
                case 3: LSC=1; LSB=0; LSA=0; i++; P0=Ledwei[3];break;
                case 4: LSC=0; LSB=1; LSA=1; i++; P0=Ledwei[4];break;
                case 5: LSC=0; LSB=1; LSA=0; i=0; P0=Ledwei[5];break;
                default:break;
        }
           
}
//延时
void delay_100ms(unsigned int ys)
{
   while(ys--);
}
void  led()
{
            if(cnt >= 1000)
                {
                         cnt = 0;
                   Ledwei[0] = LedChar[sec%10];
                         sec++;
                         if(sec==10)
                        {
                         sec=0;
                         P0 = 0x00;

              while(1)
             {
            unsigned int i = 0;   
              for(i=0;i<9;i++)
               {
                       /* P2=ledliang[i];*/  //方法1
                                           P2=~(0xff<<i);//方法二
                              delay_100ms(50000);
                              P2=0Xff;
                     }
                                if(i == 9)
                                          i=0;
              }
       }
    }
}

屏幕截图 2023-12-16 160859.png
屏幕截图 2023-12-16 160930.png
屏幕截图 2023-12-16 160955.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表