锁存器74hc595的数码管的驱动程序(原理图)【100~120显示】

2020-01-23 14:47发布

360软件小助手截图20130520140706.jpg (393.7 KB, 下载次数: 1) 下载附件 原理图 2013-5-20 14:09 上传
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit shcp1=P2^0;        //上升沿输入
sbit   ds1=P2^1;        //输入数据
sbit stcp1=P2^2;        //上升沿输出

sbit shcp2=P2^3;
sbit   ds2=P2^4;
sbit stcp2=P2^5;
char temp1,temp2,temp3;
char num=100,n=0;

uchar code duan[]=
{0xc0,0xf9,0xa4,0xb0,0x99,                /* 0到9 */
0x92,0x82,0xf8,0x80,0x90};

         
     /*简单延时*/
void delay(uint z)
{
  uint x,y;
     for(x=z;x>0;x--)                 
       for(y=100;y>0;y--);
  }

       /*595第一个锁存器*/

     /*段选数据输入   */
void input1(char  temp)
{
      uchar i;
          for(i=0;i<8;i++)        /*只是表明向左移动   移动过几次*/
          {       
               temp<<=1;         
               ds1=CY;
                   shcp1=0;                 
                   shcp1=1;
          }  
}
           /*段选数据输出*/
void output1()
{                                                  
            stcp1=0;
         stcp1=1;

}

                 /*595第二个锁存器*/

     /*位选选数据输入   */                       
void input2(char temp)
{
      uchar i;
          for(i=0;i<8;i++)        /*只是表明向左移动   移动过次*/
          {       
               temp<<=1;         
               ds2=CY;
                   shcp2=0;                                       
                   shcp2=1;
                  
          }  
}
   
               /*位选数据输出*/                 
void output2()
{
            stcp2=0;
         stcp2=1;
}
   
            /*主函数*/
void main(void)
{       
             char i,j,k;
            TMOD=0x01;                                 
              TH0=(65536-45872)/256;
            TL0=(65536-45872)%256;
            EA=1;
            ET0=1;
                TR0=1;
           while(1)               
                     {                                    
                       /*个位*/
                temp2=0x04;          //595的位选输入
                input2(temp2); //输入
            output2();        
                                     
                i=num%10;
            temp1=duan;
            input1(temp1);//595的段选输入
            output1();          //输出
                delay(5);

             /*十位*/
                temp2=0x02;           //
                input2(temp2);  //         595的位选输入
                output2();           //          输出

                 j=num/10%10;
                 temp1=duan[j];  //
             input1(temp1);         //        595的段选输入
             output1();                 //        输出
                 delay(5);
                                          
            /*百位*/
                 temp3=0x01;           //
                 input2(temp3);  //         595的位选输入
                 output2();           //          输出

                 k=num/100;
                 temp1=duan[k];  //
                 input1(temp1);         //        595的段选输入
                 output1();                 //        输出
                 delay(5);
            if(n==20)
             {
                        n=0;
                        num++;
                      if(num==121)
                             {
                          num=100;
                              }
                  }
       
                                                                                                                                                                                       
                                }         
           }


                         /*中断*/

void T0_time()interrupt 1
{
          TH0=(65536-45872)/256;
          TL0=(65536-45872)%256;
      n++;
}
          
          
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。