最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

74hc595驱动数码管实例程序

来源:动视网 责编:小OO 时间:2025-09-28 21:02:19
文档

74hc595驱动数码管实例程序

/*************************************程序内容:利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。编写人:***硬件支持:12MHz、74hc595驱动数码管、对应YL-48开发板时间:2012.
推荐度:
导读/*************************************程序内容:利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。编写人:***硬件支持:12MHz、74hc595驱动数码管、对应YL-48开发板时间:2012.
/************************************* 

程序内容:利用动态扫描和定时器1在数码管上

显示出从765432开始以1/10秒的速度往下递

减直至765398并保持显示此数,与此同时利用

定时器0以500MS速度进行流水灯从上至下移动,

当数码管上数减到停止时,实验板上流水灯也

停止然后全部开始闪烁,3秒后(用T0定时)流

水灯全部关闭、数码管上显示出“HELLO”。到此

保持住。

编写人:***

硬件支持:12MHz     、74hc595驱动数码管、对应YL-48开发板

时间: 2012.8.22

备注:参考郭天祥《十天学会单片机》 

***************************************/

#include

#include

#define uint unsigned int    //宏定义

#define uchar unsigned char  //宏定义

unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xc7,0xc7,0x86,0x}; // 共阳数码管位码值

unsigned char code wei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

unsigned char disbuf[]={7,6,5,0,0,0,10,11,12,13,14};                                           //数码管初值

sbit si=P2^2;         

sbit sclk=P2^4;

sbit slck=P2^3;

//void senda();

void send();

void out();

void init(); 

void delay (unsigned char h);

uint temp,t0,t1,shu,flat,flat1;          //flat为流水灯运行标志位、 flat1为数码管标志位

uchar m,n,num;

main()

{

   shu=432;

 // disbuf[3]=shu%10/10;

//      disbuf[4]=shu/10%10;

//      disbuf[5]=shu%10;

    

   init();

   while(1)

     {                                                      

       if(flat1==0)                                        //flat1为1,数码管递减中

           {

         for(n=0,m=0;n<6,m<6;n++,m++)     

                    {

                      send();

                      out(); 

                     }

           }

        //      while(1); 

        else                                            //当数码管递减完后、显示hello

           {

     for(n=6,m=0;n<11,m<5;n++,m++)

                   {

                       send();

                      out();

                   }

           }

      }                      

}

void init()

{

  temp=0xfe;

  P1=temp;

  TMOD=0x11;                     //定时器0、1 工作方式都为1

  TH0=(65536-50000)/256;         //定50ms的初值            

  TL0=(65536-50000)%256;         

  TH1=(65536-50000)/256;                     

  TL1=(65536-50000)%256;        

  EA=1;

  ET0=1;

  ET1=1;

  TR0=1;

  TR1=1;

}

void time0() interrupt    1    //定时器0 子函数

{

  TH0=(65536-50000)/256;                    

  TL0=(65536-50000)%256;

  t0++;

  if(flat==0)

    {

      if(t0==10)

        {

          t0=0;

          temp=_crol_(temp,1);

          P1=temp;

        }

    }

  else

    {

      

       P1=0xff;

       TH0=(65536-50000)/256;         //    重新定义初值    

       TL0=(65536-50000)%256;

       t0++;

       if(t0%10==0)

         P1=~P1;

       if(t0==60)

         {

           TR0=0;

           P1=0xff;

           flat1=1;

         }

    }

}

void time1() interrupt 3     //定时器1 子函数

{

  TH1=(65536-50000)/256;                    

  TL1=(65536-50000)%256;

  t1++;

  if(t1==2)

    {

      t1=0;

      disbuf[3]=shu/100;

      disbuf[4]=shu/10%10;

      disbuf[5]=shu%10;

       shu--;      

      if(shu==397)          

        {

         TR1=0;

         flat=1;

        }      

         

//         TR0=0;

    }

}

/*void senda(void)

{    uint  a ;

for(a=0;a<8;a++)

         {

            sclk=0;

            si=num&0x80;

         num=num<<1;

            sclk=1;

          }    

}       */

void send(void)                // 数据传输

{  

  uchar a,b;

// for(m=0;m<6;m++)    

   // { 

    if(b==0)

          {

              b++;

            num=wei[m];

         for(a=0;a<8;a++)

         {

            sclk=0;

            si=num&0x80;

         num=num<<1;

            sclk=1;

          }    

        //    senda();

           }

      if(b==1)

           {

             b--;

             num=duan[disbuf[n]];

         for(a=0;a<8;a++)

         {

            sclk=0;

            si=num&0x80;

         num=num<<1;

            sclk=1;

          }    

//             senda();

           }

//         m++;

//        if(m==6)

//              m=0;      

      }       

//}

void out()                    // 数据输出

{

    slck=0;

    delay(50);

    slck=1;

}

void delay (uchar h)       //延时0.1ms个单位

  {    

       while(h--);

 }

 

文档

74hc595驱动数码管实例程序

/*************************************程序内容:利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。编写人:***硬件支持:12MHz、74hc595驱动数码管、对应YL-48开发板时间:2012.
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top