久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2237|回復: 0
打印 上一主題 下一主題
收起左側

74hc595驅動代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:211301 發表于 2017-6-14 21:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下載:
74hc595.rar (2.27 KB, 下載次數: 7)
  1. #include <reg52.h>
  2. #include <intrins.h>           /*used for _nop_() function*/

  3. sbit  SDATA_595 =P1^3 ;/*串行數據輸入*/  
  4. sbit  SCLK_595  = P1^1;/*移位時鐘脈沖*/
  5. sbit  RCK_595   =P1^2 ;  /*輸出鎖存器控制脈沖*/

  6. #define  AD_WR    WR
  7. #define  AD_RD    RD
  8. #define  AD_INTR  INT0                  /*51的相應端口連接ADC0804的三個控制端口*/

  9. //#define  Vin_Max  5
  10. ////////////////////////////////////////
  11. static unsigned char data num1=15;        /*存放AD轉換數據的全局變量*/
  12. /****************************************************************/

  13. unsigned char code Dig_Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  14.                              0x88,0x82,0xc6,0xa1,0x84,0x8e};/*0到F的共陽段碼表*/

  15. //unsigned char data Dis_Tab[17]={0x00,0x01,0xff,0x02,0xff,0x04,0xff,0x08,0xff,0x10,0xff,0x20,0xff,0x40,0xbf,0x80,
  16. //                                   0xbf};
  17. unsigned char data Dis_Tab[17]={0x00,0x01,0xf7,0x02,0xf7,0x04,0xf7,0x08,0xff,0x10,0x7f,0x20,0xbf,0x40,0xbf,0x80,
  18.                                     0xbf};

  19. /****************************************************************/
  20. /* 更新顯示數組Dis_Tab[]函數Dis_Updata()*/
  21.            void Dis_Updata()
  22.          {
  23.               /*數據訪問通過全局的num1*/
  24.               //unsigned char data temp1;
  25. ///////////////////////////////////////////////
  26.           float  data temp2;  //定義存放計算得到的電壓值
  27.          unsigned long data temp3;
  28.          
  29.          // {
  30.          // temp1=num1;
  31.                  // num1&=0x0F;/*屏蔽高四位*/
  32.                  // Dis_Tab[16]=Dig_Tab[num1];   /*A為代顯示數據*/
  33.                                                                             /*Dig_Tab[]數組為段碼表,序號A值用來檢索對應段碼,同時賦制值更新顯示表*/
  34.              // num1=temp1;
  35.                  // /*此語句編譯時有問題,requires ANSI-style prototype ;missing function-prototype*/
  36.                  // /*asm ("SWAP  num1;" );*/
  37.              // /*用C實現高低四位交換程序如下,一個問題ACC是否為帶符號數*/
  38.              // num1>>=4;
  39.                  // num1&=0x0F;
  40.               
  41.                  // Dis_Tab[14]=Dig_Tab[num1];
  42.          // }
  43.         //////////////////添加/////////////////////////////////         
  44.               temp2=(num1*5)/255.0;
  45.          //temp2=(num1*5)/0xFF+((num1*5)%0xFF);  此除法運算有問題
  46.             
  47.                 if(temp2<0)
  48.             {
  49.               Dis_Tab[8]=0xbf;              //若小于零,顯示負號
  50.                   //temp2=(-temp2);               //若是負數,取正
  51.             }         
  52.            
  53.             temp2*=1000;                    //擴大1000倍,分別提取各個位的數值
  54.             temp3=temp2;
  55.                            
  56.            // temp3=( unsigned long)temp2;  //強制浮點數轉換為長整型
  57.                 Dis_Tab[10]=Dig_Tab[temp3/1000]&0x7f; //數制轉化,向高看齊,必須的用長整型,浮點數不可
  58.                 Dis_Tab[12]=Dig_Tab[temp3/100%10];
  59.                 Dis_Tab[14]=Dig_Tab[temp3%100/10];
  60.                 Dis_Tab[16]=Dig_Tab[temp3%10];
  61.                
  62.          
  63.            
  64.          }
  65. /****************************************************************/
  66. /*延時子程序void Delay(unsinged char data i)*/
  67.   void Delay1(unsigned char i)
  68.   {
  69.            while(--i);

  70.   }
  71. /****************************************************************/
  72. /* 精確延時time=2i+4,at 12MHZ AXIAL*/
  73.   void Delay2(unsigned char data j)
  74.   {
  75.      while(--j);
  76.   
  77.   }
  78. /****************************************************************/
  79. /*Int0 AD轉換結束讀取數據程序*/
  80. void Int0_ISR(void) interrupt 0
  81. {
  82.    AD_RD=0;   /*開始讀數據*/
  83.    num1=P0;   /*讀人數據*/
  84.    
  85.    AD_RD=1;

  86.    Dis_Updata();
  87.   

  88. }
  89. /****************************************************************/
  90. /*A/D數據采集子程序ADC0804*/
  91.   void AD_start(void)
  92.   {
  93.           AD_WR=0;
  94.         _nop_();
  95.         _nop_();
  96.         AD_WR=1;                /*發出寫信號,啟動AD轉換*/

  97.   }



  98. /****************************************************************/
  99. /*T0中斷程序,定時啟動AD轉換*/
  100. void T0_ISR(void) interrupt 1
  101. {
  102.    TL0=0x00;
  103.    TH0=0x00;
  104.    ///////////////////////////////////////////
  105.    AD_start(); /* 每隔0.256ms啟動一次AD*/
  106.    
  107.    Dis_Updata();

  108. }
  109. /****************************************************************/
  110. /*串口、定時器、TNT0中斷 初始化函數*/
  111. void Init_Mcu51(void)
  112. {
  113.   //TMOD|=0x22;/*T1波特率發生,MODE=2;T0為8位自動重裝,*/
  114.   TMOD|=0x21;/*T1波特率發生,MODE=2;T0為16位,*/
  115.   TL1=0xF4;
  116.   TH1=0xF4; /*2400bps  @AXIAL=11.0592MHZ*/
  117.   TL0=0x00;
  118.   TH0=0x00; /*定時時間為0.256ms*/
  119.   IT0=1;    //下降沿觸發
  120.   
  121.   TR1=1;     /*start T1*/
  122.   TR0=1;

  123.   SCON|=0x52;/*MODE=1,TI=1*/

  124.   IE=0x83;   /*開INT0,開T0,總中斷*/
  125.   
  126. }


  127. /****************************************************************/

  128. /*寫數據到74HC595函數*/
  129. void  WR_595(unsigned char data num2 )
  130. {
  131.    unsigned char data count1;
  132.    
  133.    for(count1=0;count1<=7;count1++)
  134.    {
  135.      if((num2&0x80)==0x80)  /*最高位為1,則向SDATA_595發送1*/
  136.             SDATA_595=1;/*發出數據的最高位*/
  137.          else  
  138.             SDATA_595=0;

  139.          num2<<=1;    /*右移位*/
  140.          SCLK_595=0;           
  141.          _nop_();
  142.          _nop_();
  143.          SCLK_595=1; /*產生上生沿*/
  144.    
  145.         }  

  146. }

  147. /****************************************************************/
  148. /*更新74HC595輸出數據函數void  Out_595(void)*/
  149. void  Out_595(void)
  150. {
  151.    RCK_595=0;
  152.    _nop_();
  153.    _nop_();
  154.    RCK_595=1;  /*上升沿鎖存數據*/


  155. }

  156. /****************************************************************/
  157. /*LED驅動程序void Led_Drive(void)*/
  158. void Led_Drive(void)
  159. {
  160.    unsigned char data Dis_Count;
  161.    
  162.    while(1)
  163.    {   ++num1;
  164.        for(Dis_Count=1;Dis_Count<=16;Dis_Count++)
  165.         {
  166.              WR_595(Dis_Tab[Dis_Count]);
  167.                  if(Dis_Count%2==0)         /*判斷若傳完兩個字節數據,則更新74HC595輸出數據,并延時*/
  168.                     {
  169.                            Out_595();
  170.                         //Delay1(1);
  171.                   
  172.                     }                                          
  173.         
  174.              }
  175.     }


  176.   }
  177. /****************************************************************/
  178.   main()
  179. {
  180.    //P0=0xff;
  181.    //P1=0xff;
  182.    Init_Mcu51();
  183.    Led_Drive();         //自身是個無限循環顯示的程序
  184.    
  185.    

  186. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区欧美 | 九色www| 黄视频网址| 日本天堂一区 | 亚洲精品久久久久久国产精华液 | 日韩高清av | 欧洲在线视频 | 国产精品久久久久久中文字 | 真人女人一级毛片免费播放 | 久久视频精品 | 伊人久久大香线 | 国产农村一级国产农村 | 在线a视频 | 国产精品国产三级国产a | 日本天堂一区 | 91精品午夜窝窝看片 | 日本激情视频网 | 国产乡下妇女做爰 | 成人国产精品免费观看 | 免费在线观看一区二区三区 | 国产免费又色又爽又黄在线观看 | 日本欧美大片 | 真人女人一级毛片免费播放 | 亚洲啊v在线 | 成人欧美一区二区三区色青冈 | 三级成人片 | 在线一区 | 日韩视频免费在线 | 久久极品| 视频一区二区在线观看 | 欧美精品一区二区在线观看 | 国产成人av在线播放 | 午夜一区二区三区在线观看 | 亚洲一区二区免费 | 欧美日韩在线精品 | 亚洲视频免费观看 | 成人在线视频观看 | 国产精品久久久久久久久久久免费看 | 久久91| 99精品久久久国产一区二区三 | 成人免费视频在线观看 |