Mi Manchi37 2022-03-25 17:27 采纳率: 40%
浏览 164
已结题

用51单片机实现流水灯和数码管1-F

(1)程序运行时P0^0的LED点亮,数码管显示0;

(2)当完成一次按键操作,P0^0的LED熄灭,P0^1的LED点亮,以此类推;同时数码管进行计数,完成一次按键操作,计数加 1 ,显示范围0-F;

img

  • 写回答

1条回答 默认 最新

  • 卡尔曼的BD SLAMer 计算机视觉领域新星创作者 2022-03-25 17:49
    关注

    点亮LED灯

    #include "reg52.h"//调用52单片机的头文件,写51也可以// 
    sbit LED=P2^0;//sbit 是用来确定地址,这里是把LED定义为P2的0号接口//
    void main()
    {
        LED=0;//代表着P2口出低电位使发光二极管前后产生电位差而发光//
    }
    
    
    

    流水灯实现

    #include "reg52.h" 
    #define LED P2
    #define ui unsigned int
    #define uc unsigned char
    
    
    void delayms(ui del) //延时语句,延时时长为(del*10)ms    
    {
        ui i,j;
        for(i=0; i<del; i++)
        for(j=0; j<1827; j++)  ;
    }
        
    void main(){
        int i;
        
        while(1){
        for(i=1;i<8;i++){
        LED=(0xff<<i);//把0的那一位不断左移使二极管导通
        delayms(15);//此处延时是为了展现视觉效果,不延时会太快人眼看不出流水效果
            }
        }    
    }
    
    
    

    实现使流水灯从左到右再从右到左

    #include "reg52.h" 
    #define LED P2
    #define ui unsigned int
    #define uc unsigned char
    
    
    void delayms(ui del)     
    {
        ui i,j;
        for(i=0; i<del; i++)
        for(j=0; j<1827; j++)  ;
    }
        
    void main(){
        int i;
        
        while(1){
    
        for(i=1;i<8;i++){
        LED=(0xff<<i);
        delayms(15);
        }
        LED=0x00;//让所有灯熄灭准备待会反着来亮
        delayms(10);//这就是待会……
         for(i=1;i<8;i++){
        LED=(0xff>>i);//右移!
        delayms(15);
        }    
    }
    }
    
    
    

    img


    最简单的让数码管显示一个’0’的代码:

    #include<reg52.h>
    void main()
    {
        P0=0X3F;//显示字符‘0’
    }
    
    
    

    img

    进行动态显示

    #include "reg52.h"
    typedef unsigned char u8;
    typedef unsigned int u16;
    sbit LSA = P2^2;
    sbit LSB = P2^3;
    sbit LSC = P2^4;
    u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,
                        0x66, 0x6d, 0x7d, 0x07,
                        0x7f, 0x6f, 0x77, 0x7c,
                        0x39, 0x5e, 0x79, 0x71}; //0~F数码
    void delay(u16 i) //延时函数
    {
        while(i--);
    }
        
    void DigDisplay() //数码管显示函数
    {
        u8 i;
        for(i=0;i<8;i++)
        { 
          switch(i)
          {
            case 0:
                  LSC = 0;LSB = 0;LSA = 0;break; //显示第1个数码管
            case 1:
                  LSC = 0;LSB = 0;LSA = 1;break; //显示第2个数码管
            case 2:
                 LSC = 0;LSB = 1;LSA = 0;break; //显示第3个数码管
            case 3:
                LSC = 0;LSB = 1;LSA = 1;break; //显示第4个数码管
            case 4:
                LSC = 1;LSB = 0;LSA = 0;break; //显示第5个数码管
            case 5:
                  LSC = 1;LSB = 0;LSA = 1;break; //显示第6个数码管
            case 6:
                  LSC = 1;LSB = 1;LSA = 0;break; //显示第7个数码管
            case 7:
                 LSC = 1;LSB = 1;LSA = 1;break; //显示第8个数码管
          }
          P0 = smgduan[i+1];//显示1~8的数值
          delay(100); //延时,造成视觉暂留现象
          P0 = 0x00; //数码管消隐
        }
    }    
     
    void main()
    {
       while(1)
       {
       DigDisplay();
       }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 ghpython这里总是报错而且rhino视图窗口内不显示怎么办
  • ¥15 布尔运算推导,请证明
  • ¥15 有没有人会打学生成绩管理系统呀
  • ¥15 在使用Fiddler和夜神模拟器抓包的时候一直出现443该怎么办啊QAQ搜了好几个笔记都没有解决
  • ¥15 3x7的二维数组A、B、C,A中的任意1个数组元素与B的任意1个数组元素、同时又与C的任意1个数组元素比较,把不同位置出现相同数的比较称为无意义,反之称为有意义,把有意义的比较打印输出。
  • ¥20 预测模型怎么处理原始数据(随机森林)
  • ¥20 请问discuz3.5如何实现插入ckplayer全能播放器功能呢?
  • ¥15 thingsboard代码编译出错误
  • ¥15 博途v18仿真报错怎么解决
  • ¥15 欧姆龙plc枕式包装机 ST编程