欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2360|回復: 8
收起左側

請教74HC595數碼管顯示程序的問題

[復制鏈接]
ID:891876 發表于 2023-11-30 20:31 | 顯示全部樓層 |閱讀模式
從壇上復制的74HC595程序仿真不顯示?請幫我看看,謝謝!

595a.JPG

單片機源程序如下:
#include <reg52.h>                           
#define uint unsigned int
#define uchar unsigned char

sbit  ds_595    =P2^0;      //串行數據輸入
sbit  b_cp_595   =P2^2;      //輸出鎖存器控制脈沖 st_cp_595
sbit  a_cp_595   =P2^1;      //串行移位時鐘脈沖  sh_cp_595
extern uchar  datas[6];                         //存放6個數碼管的顯示數字
uchar  ledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
                                                                       // 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
void delay(uint z)
{
        uint t1,y;
        for(t1=z;t1>0;t1--)
                for(y=110;y>0;y--);
}

void led_display(void)
{  
   uchar i,j;
   bit testb;
   uchar movebit[6];
   uchar test;
   for(i=0;i<6;i++)  //選中數碼管
   movebit[ i]=ledcode[datas[ i]];
   delay(1);
   for(i=0;i<6;i++)           //數據移位
   {
      test=movebit[ i];
     for(j=0;j<8;j++)
      {
        testb=test&0x80;
        test=test<<1;
      if(testb)
        {
                ds_595=1;
        }
      else
       {
               ds_595=0;
       }
              a_cp_595=1;
              a_cp_595=0;
     }                                //數據移位  
   }
           b_cp_595=0;
           b_cp_595=1;
           b_cp_595=0;
}
void main()
{
        
    led_display();
          while (1);

}
回復

使用道具 舉報

ID:69038 發表于 2023-11-30 22:21 | 顯示全部樓層
ds被你吃了?
回復

使用道具 舉報

ID:213173 發表于 2023-11-30 22:28 | 顯示全部樓層
無標題.jpg

  1. #include <reg52.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit HC595_DIO   = P2^0;
  5. sbit HC595_SCLK  = P2^1;
  6. sbit HC595_RCLK  = P2^2;

  7. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共陰數碼管段碼0~f
  8.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  9. uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共陰數碼管位碼

  10. /******************1ms延時子程序(12MHz)*******************/
  11. void delayms(uint k)
  12. {
  13.         uint i,j;
  14.         for(i=k;i>0;i--)
  15.                 for(j=125;j>0;j--);
  16. }
  17. /**************** 向HC595發送一個字節函數 ******************/
  18. void Send_595(uchar dat)
  19. {               
  20.         uchar i;
  21.         for(i=0;i<8;i++)
  22.         {
  23.                 HC595_DIO=(dat&0x80)>>7;//由高位到低位賦值數據輸出端
  24.                 HC595_SCLK = 1;        //移位時鐘
  25.                 HC595_SCLK = 0;
  26.                 dat <<= 1;                        //dat左移一位
  27.         }
  28. }
  29. /**************** 數碼管顯示函數 ******************/
  30. void DisplayScan()
  31. {       
  32.         static uchar i=0;
  33.         Send_595(dis_buf[i]);//向HC595發送位碼(共陰數碼管)
  34.         Send_595(table[i]);        //向HC595發送段碼(共陰數碼管)
  35. //        Send_595(~dis_buf[i]);//向HC595發送位碼(共陽數碼管)
  36. //        Send_595(~table[i]);        //向HC595發送段碼(共陽數碼管)
  37.         HC595_RCLK = 1;                //鎖存輸出數據
  38.         HC595_RCLK = 0;
  39.         i++;
  40.         i%=6;
  41. }

  42. void main()
  43. {
  44.         while(1)
  45.         {
  46.                 DisplayScan();        //數碼管顯示函數
  47.                 delayms(1);                //延時1ms
  48.         }
  49. }
復制代碼




回復

使用道具 舉報

ID:57657 發表于 2023-11-30 22:40 | 顯示全部樓層
74HC系列芯片不用的輸入腳不能懸空,否則會干擾亂碼甚至靜電擊穿。
回復

使用道具 舉報

ID:829223 發表于 2023-12-1 10:37 | 顯示全部樓層
很明顯圖畫錯了
回復

使用道具 舉報

ID:277550 發表于 2023-12-1 11:10 | 顯示全部樓層
  1. #include <reg52.H>
  2. #define uint  unsigned int
  3. #define uchar unsigned char
  4. sbit HC595_DIO   = P2^0;
  5. sbit HC595_SCLK  = P2^1;
  6. sbit HC595_RCLK  = P2^2;

  7. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共陰數碼管段碼0~f
  8.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  9. uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共陰數碼管位碼
  10. uint secs = 0;
  11. uchar disp[6]= {0};

  12. /******************1ms延時子程序(12MHz)*******************/
  13. void delayms(uint k){
  14.         uint i,j;
  15.         for(i=k;i>0;i--)
  16.                 for(j=125;j>0;j--);
  17. }
  18. /**************** 向HC595發送一個字節函數 ******************/
  19. void Send_595(uchar dat){               
  20.         uchar i;
  21.         for(i=0; i<8; i++){
  22.                 HC595_DIO=(dat&0x80)>>7;        //由高位到低位賦值數據輸出端
  23.                 HC595_SCLK = 1;                                //移位時鐘
  24.                 HC595_SCLK = 0;
  25.                 dat <<= 1;                                        //dat左移一位
  26.         }
  27. }
  28. /**************** 數碼管顯示函數 ******************/
  29. void DisplayScan(){      
  30.         static uchar i=0;
  31.         Send_595(dis_buf[i]);                //向HC595發送位碼(共陰數碼管)
  32.         Send_595(table[disp[i]]);        //向HC595發送段碼(共陰數碼管)
  33. //        Send_595(~dis_buf[i]);                //向HC595發送位碼(共陽數碼管)
  34. //        Send_595(~table[i]);                //向HC595發送段碼(共陽數碼管)
  35.         HC595_RCLK = 1;                                //鎖存輸出數據
  36.         HC595_RCLK = 0;
  37.         i++;
  38.         i%=6;
  39. }

  40. void main(){
  41.         uchar x=0;
  42.         delayms(50);
  43.         while(1){
  44.                 DisplayScan();                //數碼管顯示函數
  45.                 delayms(1);                        //延時1ms
  46.                 x++;
  47.                 if(x==100){
  48.                         x=0;
  49.                         secs++;
  50.                         secs%=65535;
  51.                         disp[0]=0;
  52.                         disp[1]=secs/10000%10;
  53.                         disp[2]=secs/1000%10;
  54.                         disp[3]=secs/100%10;
  55.                         disp[4]=secs/10%10;
  56.                         disp[5]=secs%10;
  57.                 }
  58.         }
  59. }

復制代碼

路過,將樓上的代碼,改成“活”的,演示一下 —— 硬件連線和樓上相同的。

回復

使用道具 舉報

ID:891876 發表于 2023-12-1 12:03 | 顯示全部樓層

謝謝指導,但不明白25段碼&0x80后為什么向右移7位呢?
回復

使用道具 舉報

ID:213173 發表于 2023-12-1 19:08 | 顯示全部樓層
芙蓉焊料 發表于 2023-12-1 12:03
謝謝指導,但不明白25段碼&0x80后為什么向右移7位呢?

串行數據只能逐位傳輸,可能由高位到低位亦可能低位到高位,這由器件制造商確定。(dat&0x80)>>7就是取最高位右移7后賦值DIO,傳輸一位數據,然后dat <<= 1; 如此運行8次,完成由高位到低位將一個字節數據發出。
回復

使用道具 舉報

ID:639666 發表于 2023-12-19 22:08 | 顯示全部樓層
wulin 發表于 2023-12-1 19:08
串行數據只能逐位傳輸,可能由高位到低位亦可能低位到高位,這由器件制造商確定。(dat&0x80)>>7就是取最 ...

現在成功了嗎?有沒有用實物試過?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表