欢迎光临散文网 会员登陆 & 注册

8位数码管显示(译码器-595方式)

2023-04-30 00:54 作者:赵一潮  | 我要投稿

此种方式与595连级都采用读表方式(读取数组中的段码表和位选表)进行数据读取。

在这里译码器做位选器,595做段选器,两者分别配有“段码表”和“位选表”;

两者根据显示函数的内容,从表中读取数据后传输至数码管进行显示。

IO口定义与初始化
显示函数部分
宏定义合并一个H文件

附件“主程序代码附注”

*********************************************************************************************************

#include<STCXXXX.H>


u8 a,b,c,d,e,f,g,i,j;

u32 num,HG,HS,FG,FS,MG,MS; 


sbit SCK = P3^2; //数据时钟

sbit RCK = P3^5; //锁存时钟

sbit SI  = P3^4;         //数据信号


sbit A0 = P4^0;

sbit A1 = P5^5;

sbit A2 = P4^4;


code Data1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};  //段码数据发送给595

code Data2[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};                      //位选数据发送给38译码器(时-分-秒)


void Gun(u8 c)        //驱动595硬件         

{  

    a = Data1[c];                 

    for(b=0;b<8;b++)  //参数已用:a,b,c

    {

        SI = a&0x80;  

        SCK = 0;

        SCK = 1;      

        a=a << 1; //595拉栓炮,拉for栓装弹,弹容量8发     

    }     

    RCK=0;              //锁存器扳机,并行炮,一炮射八发

    RCK=1;            

}


void YMQ138(u8 e)    //驱动38译码器硬件  

{

  d=Data2[e];         

  A0 = d&0x01;        //参数已用:d,e

  A1 = (d&0x02)>>1;

  A2 = (d&0x04)>>2;  //38读表机

}


void Delay5ms()   //延时

{

_nop_();

i = 32;

j = 40;

do

{

while (--j);

} while (--i);

}



void main()

{   

  P0M0=0X00;P0M1=0X00;      //配置I/O口,做初始化,模式:“双向口”

P1M0=0X00;P1M1=0X00;

P2M0=0X00;P2M1=0X00;

P3M0=0X00;P3M1=0X00;

P4M0=0X00;P4M1=0X00;

    

    TMOD=0X01;                //定时器初始化

    TH0=(65535-50000)/256;    

    TL0=(65535-50000)%256;

    EA=1;

    ET0=1;

    TR0=1;                    //此刻,定时器已开启!

 

  while(1)        //while循环-展示数码管动态扫描

  { 

      

    YMQ138(0);     //38译码器的数组控制函数(控位选)  

    Gun(MG);       //595的数组段选控制函数(控段选)

    Delay5ms();    //延时函数给予显示延时

    Gun(10);       //595锁存数据清空

    

    YMQ138(1);

    Gun(MS);

    Delay5ms();

    Gun(10);

      

    YMQ138(2);

    Gun(11);

    Delay5ms();

    Gun(10);

    

    YMQ138(3);

    Gun(FG);

    Delay5ms();

    Gun(10);

    

    YMQ138(4);

    Gun(FS);

    Delay5ms();

    Gun(10);

    

    YMQ138(5);

    Gun(11);

    Delay5ms();

    Gun(10);

    

    YMQ138(6);

    Gun(HG);

    Delay5ms();

    Gun(10);

    

    YMQ138(7);

    Gun(HS);

    Delay5ms();

    Gun(10);

    

    HS=num/3600%24/10;//   "num"定时器参数-链接显示与定时器

    HG=num/3600%24%10;//时

    FS=num%3600/60/10;

    FG=num%3600/60%10;//分

    MS=num%60/10;

    MG=num%60%10;     //秒

    

    }

      

}


void T0_time() interrupt 1 //中断

{

    TH0=(65535-50000)/256;

    TL0=(65535-50000)%256;    

    f++;

    if(f==20)

    {

       f=0;         //已用参数f

        num++;

    }

}



8位数码管显示(译码器-595方式)的评论 (共 条)

分享到微博请遵守国家法律