wcqwwwcom1226 2022-05-15 03:22
浏览 94
已结题

51单片机数码管的位选端接在I/O口,要怎么写代码确定位选端?

请问我这样子对吗?


#include<reg52.h>   //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^0;
sbit wei1=P1^0;
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;

uchar code table[]={
 0x3f,0x60,0x5b,0x4f,
 0x66,0x6d,0x7d,0x07,
 0x7f,0x6f,0x77,0x7c,
 0x39,0x5e,0x79,0x71};

uchar num,num1,num2,shi,ge;

void delay(uint xms)   //延时函数
{
     uint i,j;
     for(i=xms;i>0;i--)
          for(j=110;j>0;j--);
}

void display(uchar shi,uchar ge)   //关于显示子函数
{
     dula=1;
     P2=table[shi];   //送入段选数据
     dula=0;
     P2=0xff;   //消影 送入位选数据前关闭所有显示,防止打开位选锁存时,原来段选数据通过位选锁存器造成混乱
     wei1=1;
     wei2=0;
     wei3=0;
     wei4=0;
     P2=0xfe;   //送入位选数据
     wei2=0;
     delay(5);   //延时极短
     
     dula=1;
     P2=table[ge];
     dula=0;
     P2=0xff;
     wei2=1;
     wei1=0;
     wei3=0;
     wei4=0;
     P2=0xfd;
     wei2=0;
     delay(5);
}

void T0_time() interrupt 3   //T1中断 数码管的中断函数
{
     TH0=(65536-50000)/256;   //重装初值
     TL0=(65536-50000)%256;
     num2++;
     if(num2==20)   //如果到了20次 说明1秒时间到
     {
          num2=0;   //然后把num2清0再重新计20次
          num++;
          if(num==60)   //这个数用来送数码管显示,到60后归0
               num=0;
          shi=num/10;   //把一个2位数分离后成十位和个位分别送入数码管
          ge=num%10;   //%是求余,/是求模即取整数部分
      }
}

void main()
{
    TMOD=0x01;            //定时/计数器工作方式1,即16位的定时计数器
    TH0=(65536-50000)/256;            //装入初值
    TL0=(65536-50000)%256;
    EA=1;            //打开全局中断
    ET0=1;            //打开定时计数器T0的中断
    TR0=1;            //打开定时器T0的运行控制,即启动定时器0
    
    while(1)
    {
        display(shi,ge);
    }
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月23日
    • 创建了问题 5月15日

    悬赏问题

    • ¥50 永磁型步进电机PID算法
    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥200 uniapp长期运行卡死问题解决
    • ¥15 latex怎么处理论文引理引用参考文献
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?