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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機兩片595驅動共陰極數碼管的問題

[復制鏈接]
跳轉到指定樓層
樓主
代碼:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char


  4. uchar code Table[] =
  5. { // 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  6.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x86,0xFF,0xbf
  7. };
  8. //-----------------------------------------------------------------------------

  9. sbit SER = P1^0;        //串行數據輸入端
  10. sbit STCP = P1^1;        //時鐘脈沖信號——上升沿有效 存儲寄存器時鐘輸入端,并行輸出
  11. sbit SHCP = P1^2;        //輸入信號————上升沿有效 移位寄存器時鐘輸入端

  12. sbit key1 = P3^0;        //選擇鍵
  13. sbit key2 = P3^1;        //加鍵
  14. sbit key3 = P3^2;        //減鍵
  15. sbit key4 = P3^3;

  16. uchar shan,A,K,C,D,E,F;
  17. uchar knum;                //選擇鍵計數變量

  18. void TimerInit();
  19. void KeyScan();
  20. void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao);        // 數碼管顯示
  21. void SMG_Int(uchar Dat);                // 數碼管單字節串行移位函數

  22. //*****************************************************************************
  23. // 主程序
  24. void main ()
  25. {
  26.         unsigned int i;
  27.         TimerInit();
  28.         while(1)
  29.         {
  30.                 Display (A,K,C,D,E,F);
  31.                 KeyScan();
  32.                 //for(i=0;i<300;i++);
  33.         }
  34. }

  35. void KeyScan()
  36. {
  37.        
  38. }


  39. void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao)
  40. {
  41.         uchar i;

  42.         //顯示第1位        小時10位
  43.         i = Table[shi10];

  44.         SMG_Int(i);                       
  45.         SMG_Int(0x01);               

  46.         STCP = 0;         //數據并行輸出,(借助上升沿)
  47.         _nop_();
  48.         _nop_();
  49.         STCP = 1;

  50.         //顯示第2位        小時個位
  51.         i = Table[shi];

  52.         SMG_Int(i);               
  53.         SMG_Int(0x02);               

  54.         STCP = 0;
  55.         _nop_();
  56.         _nop_();
  57.         STCP = 1;

  58.         //顯示第3位        -
  59.         if(shan<10)         //"-" 閃爍
  60.         i = Table[16];
  61.         else
  62.         i = Table[15];
  63.         SMG_Int(i);                       
  64.         SMG_Int(0x04);       

  65.         STCP = 0;
  66.         _nop_();
  67.         _nop_();
  68.         STCP = 1;

  69.         //顯示第4位        分鐘10位
  70.         i = Table[fen10];

  71.         SMG_Int(i);                       
  72.         SMG_Int(0x08);               

  73.         STCP = 0;
  74.         _nop_();
  75.         _nop_();
  76.         STCP = 1;

  77.         //顯示第5位        分鐘個位
  78.         i = Table[fen];

  79.         SMG_Int(i);                       
  80.         SMG_Int(0x10);       

  81.         STCP = 0;
  82.         _nop_();
  83.         _nop_();
  84.         STCP = 1;

  85.         //顯示第6位        -
  86.         if(shan<10)           //"-" 閃爍
  87.         i = Table[16];
  88.         else
  89.         i = Table[15];

  90.         SMG_Int(i);                       
  91.         SMG_Int(0x20);       

  92.         STCP = 0;
  93.         _nop_();
  94.         _nop_();
  95.         STCP = 1;

  96.         //顯示第7位        秒10位
  97.         i = Table[miao10];

  98.         SMG_Int(i);                       
  99.         SMG_Int(0x40);       

  100.         STCP = 0;
  101.         _nop_();
  102.         _nop_();
  103.         STCP = 1;

  104.         //顯示第8位        秒個位
  105.         i = Table[miao];

  106.         SMG_Int(i);               
  107.         SMG_Int(0x80);       

  108.         STCP = 0;
  109.         _nop_();
  110.         _nop_();
  111.         STCP = 1;
  112. }

  113. void SMG_Int(uchar Dat)         //通過8次循環將8位數據移入74HC595
  114. {
  115.         uchar i;
  116.         for(i=8;i>=1;i--)
  117.         {
  118.                 if (Dat & 0x80)
  119.                 {
  120.                         SER = 1;
  121.                 }
  122.                
  123.                 else
  124.                 {
  125.                         SER = 0;
  126.                 }
  127.                 Dat <<= 1;
  128.                 SHCP = 0;
  129.                 _nop_();
  130.                 _nop_();
  131.                 SHCP = 1;
  132.         }
  133. }

  134. void TimerInit()         //定時器0初始化
  135. {
  136.         TMOD = 0x01;
  137.         TH0 = (65536-50000)/256;        //50ms初值
  138.         TL0 = (65536-50000)%256;
  139.         EA = 1;
  140.         ET0 = 1;
  141.         TR0 = 1;

  142. }

  143. void Timer0() interrupt 1
  144. {
  145.         static uchar cnt,shi=12,fen=59,miao=30;
  146.        
  147.         TH0 = (65536-50000)/256;
  148.         TL0 = (65536-50000)%256;
  149.        
  150.         shan++;
  151.         if(shan==20)
  152.                 shan=0;

  153.         cnt++;
  154.         if(cnt==20)
  155.         {
  156.                 cnt = 0;
  157.                 miao++;
  158.                 if(miao == 60)
  159.                 {
  160.                         miao = 0;
  161.                         fen++;
  162.                         if(fen==60)
  163.                         {
  164.                                 fen = 0;
  165.                                 shi++;
  166.                                 if(shi==24)
  167.                                 {
  168.                                         shi=0;
  169.                                 }
  170.                         }
  171.                 }
  172.         }

  173.         A=shi/10;
  174.         K=shi%10;
  175.         C=fen/10;
  176.         D=fen%10;
  177.         E=miao/10;
  178.         F=miao%10;
  179. }



復制代碼

仿真結果


共陽極好使,共陰極不對。
請問高手,哪里不對?謝謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1109793 發表于 2024-11-22 15:26 | 只看該作者
共陽極改共陰極,位選和段數據都加個~不久行了?
還有這樣每一位的時間太短了吧。
都不如直接上1638這樣的芯片了。不過好像仿真不好搞
回復

使用道具 舉報

板凳
ID:1133081 發表于 2024-11-22 21:41 | 只看該作者


  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit P_HC595_SER   = P1^0;
  5. sbit P_HC595_RCLK  = P1^1;
  6. sbit P_HC595_SRCLK = P1^2;

  7. uchar code table[]={
  8.         0x3f,0x06,0x5b,0x4f,
  9.         0x66,0x6d,0x7d,0x07,
  10.         0x7f,0x6f,0x77,0x7c,
  11.         0x39,0x5e,0x79,0x71,0x40};
  12. uchar data dis_buf[8];
  13. uchar shi=12,fen=59,miao=30;
  14. uint  cnt;
  15. bit   flag;
  16. /**************** 向HC595發送一個字節函數 ******************/
  17. void Send_595(uchar dat)
  18. {               
  19.         uchar i;
  20.         for(i=0;i<8;i++)
  21.         {
  22.                 dat <<= 1;
  23.                 P_HC595_SER  = CY; //溢出位賦值數據輸出端
  24.                 P_HC595_SRCLK = 1; //移位時鐘
  25.                 P_HC595_SRCLK = 0;
  26.         }
  27. }
  28. /**************** 向HC595發送2個字節驅動碼 ******************/
  29. void DisplayScan()
  30. {       
  31.         static uchar i;
  32.         Send_595(~(0x01<<i));//向HC595發送位碼
  33.         Send_595(table[dis_buf[i]]);//向HC595發送段碼
  34.         P_HC595_RCLK = 1;//鎖存輸出數據
  35.         P_HC595_RCLK = 0;
  36.         i++;
  37.         i%=8;
  38. }

  39. void TimerInit()         //定時器0初始化
  40. {
  41.         TMOD = 0x01;
  42.         TH0 = (65536-2000)/256;        //2ms初值
  43.         TL0 = (65536-2000)%256;
  44.         EA = 1;
  45.         ET0 = 1;
  46.         TR0 = 1;
  47. }

  48. void main()
  49. {
  50.         P_HC595_SRCLK = 0;//初始化移位時鐘端
  51.         P_HC595_RCLK  = 0;//初始化鎖存輸出端
  52.         dis_buf[0]=shi/10;//初始化顯示緩存
  53.         dis_buf[1]=shi%10;
  54.         dis_buf[2]=16;
  55.         dis_buf[3]=fen/10;
  56.         dis_buf[4]=fen%10;
  57.         dis_buf[5]=16;
  58.         dis_buf[6]=miao/10;
  59.         dis_buf[7]=miao%10;
  60.         TimerInit();
  61.         while(1)
  62.         {
  63.                 if(flag)
  64.                 {
  65.                         flag=0;
  66.                         dis_buf[0]=shi/10;
  67.                         dis_buf[1]=shi%10;
  68.                         dis_buf[3]=fen/10;
  69.                         dis_buf[4]=fen%10;
  70.                         dis_buf[6]=miao/10;
  71.                         dis_buf[7]=miao%10;
  72.                         DisplayScan();
  73.                 }
  74.         }
  75. }


  76. void Timer0() interrupt 1
  77. {      
  78.         TH0 = (65536-2000)/256;
  79.         TL0 = (65536-2000)%256;
  80.         cnt++;
  81.         if(cnt>=500)
  82.         {
  83.                 cnt = 0;
  84.                 miao++;
  85.                 if(miao == 60)
  86.                 {
  87.                         miao = 0;
  88.                         fen++;
  89.                         if(fen==60)
  90.                         {
  91.                                 fen = 0;
  92.                                 shi++;
  93.                                 if(shi==24)
  94.                                 {
  95.                                         shi=0;
  96.                                 }
  97.                         }
  98.                 }
  99.         }
  100.         flag=1;
  101. }


復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品av | 久久婷婷国产麻豆91 | 亚洲欧美另类在线 | 日韩精品av一区二区三区 | 久草在线 | 亚洲一区二区在线免费观看 | 国产亚洲一区二区三区在线观看 | 免费性视频| 国产精品中文字幕一区二区三区 | 亚洲成人免费视频 | 视频一区二区中文字幕日韩 | 国产成人精品一区二区三区在线 | 亚洲综合大片69999 | 中文字幕第二区 | 久热久热 | 91精品一区二区三区久久久久久 | 麻豆国产一区二区三区四区 | 日韩视频在线一区二区 | 日本一区二区高清不卡 | 欧美一区二区三区视频 | 午夜视频一区 | 久久精品男人的天堂 | 欧美日韩精品中文字幕 | 91精品国产高清久久久久久久久 | 成人av在线播放 | 黄色毛片一级 | 亚洲国产精品视频 | 中文字幕久久精品 | 99成人在线视频 | 日本综合在线观看 | 一区二区三区在线免费观看 | 亚洲精品久久视频 | 午夜免费观看体验区 | 色一情一乱一伦一区二区三区 | 亚洲成人免费观看 | 一本色道精品久久一区二区三区 | 久久小视频| 国产xxxx在线 | 欧美亚洲在线 | 国产精品99久久久久久久久久久久 | 56pao在线 |