m0_63930110 2022-06-10 00:33 采纳率: 100%
浏览 72
已结题

单片极的共阴极数码管按下按键1和按键2输出的内容

按下按键1,8位共阴极数码管输出2022-606。
按下按键2,8位共阴极数码管输出606-1132。
在1和2之间显示内容切换。
哪位路人知道的,请帮我解答一下,万能的CSDN区

  • 写回答

1条回答 默认 最新

  • 百色彭于晏 2022-06-14 01:51
    关注
    
    #include<reg52.h>
    #define DataPort  P0
    sbit K1=P3^0;
    sbit K2=P3^1;
    sbit LATCH1=P2^2;
    sbit LATCH2=P2^3;
    unsigned char seg7code[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选
    unsigned char str1[9]={0x7d,0x3f,0x7d,0x40,0x06,0x06,0x4f,0x5b};//606-1132
    unsigned char str2[9]={0x5b,0x3f,0x5b,0x5b,0x40,0x7d,0x3f,0x7d};//2022-606
    unsigned char  i=0;
    unsigned char  j=0;
    void Delay(int x)        //@12.000MHz
    {  //延时函数x,参数代表延时的毫秒数
        while(x--){
            unsigned char i, j;
            i = 2;
            j = 239;
            do{
                while (--j);
            } while (--i);
        }
    }
    void key_scan()
    {//按键扫描
        if(!K1){Delay(20);if(!K1){while(!K1);j=1;}}        
        if(!K2){Delay(20);if(!K2){while(!K2);j=2;}}  
    }
    void display()
    {   
        if(j==1)
            {   
                DataPort=seg7code[i];//送位选
                LATCH2=1;//开位选
                LATCH2=0;//关位选,到这里完成了位选信号的输送
            
                DataPort=str2[i];//送段选(2022-606)
                LATCH1=1;//开段选
                LATCH1=0;//关段选,到这里,完成了段选信号的输送   
            
                 Delay(1);//延时一下,让数码管稳定显示1毫秒
        
                i++;        //让位选码和段选码数组下标加1     
                if(8==i)    //因为数码管只有8位,数组长度也只有八位,i不能超过8
                    i=0;    //超过8要让i=0;
            }
        if(j==2)        //同上
        {
                DataPort=seg7code[i];
                LATCH2=1;
                LATCH2=0;
            
                DataPort=str1[i];//606-1132
                LATCH1=1;
                LATCH1=0;
            
                 Delay(1);
                i++;
                if(8==i)
                i=0;
        }
    }
    main()
    {  
           while(1)
        {    
            key_scan();//按键扫描
            display();//显示
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 已采纳回答 6月14日
  • 创建了问题 6月10日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分