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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+LED點陣顯示字幕不全怎么解決?

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 大智慧152 于 2020-6-12 13:06 編輯

如圖兩個字模是相同的,主要參考https://blog.csdn.net/zh_j_wei/article/details/104192813所寫但是最終顯示字模不完全
附上源代碼
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define  GPIO_KEY P1  //獨立鍵盤用P1口

  4. //--重定義函數變量--//
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. #define ulong unsigned long

  8. unsigned char Key_Scan();
  9. void Delay10ms(uint z);
  10. void translation();
  11. void twinkle1();
  12. void twinkle2();
  13. uint k,i,j,ms;
  14. uchar keyNum;

  15. //--定義SPI要使用的 IO--//
  16. sbit MOSIO = P3^4;
  17. sbit R_CLK = P3^5;
  18. sbit S_CLK = P3^6;

  19. //通過74HC595發送四個字節的數據
  20. void HC595SendData(uchar BT3, uchar BT2,uchar BT1,uchar BT0)
  21. {  
  22.         uchar i;
  23.         
  24.         //--發送第一個字節--//
  25.         for(i=0;i<8;i++)
  26.         {
  27.                 MOSIO = BT3 >> 7;            //從高位到低位
  28.                 BT3 <<= 1;              //左移一位
  29.                 S_CLK = 0;                                
  30.                 S_CLK = 1;                                
  31.         }

  32.         //--發送第二個字節--//
  33.         for(i=0;i<8;i++)
  34.         {
  35.                 MOSIO = BT2 >> 7;                //從高位到低位
  36.                 BT2 <<= 1;
  37.                 S_CLK = 0;
  38.                 S_CLK = 1;        
  39.         }

  40.         //--發送第三個字節--//
  41.         for(i=0;i<8;i++)
  42.         {
  43.                 MOSIO = BT1 >> 7;                //從高位到低位
  44.                 BT1 <<= 1;
  45.                 S_CLK = 0;
  46.                 S_CLK = 1;        
  47.         }

  48.         //--發送第四個字節--//
  49.         for(i=0;i<8;i++)
  50.         {
  51.                 MOSIO = BT0 >> 7;                //從高位到低位
  52.                 BT0 <<= 1;
  53.                 S_CLK = 0;
  54.                 S_CLK = 1;
  55.         }

  56.         //--輸出--//
  57.         R_CLK = 0; //set dataline low
  58.         R_CLK = 1; //片選
  59.         R_CLK = 0; //set dataline low
  60. }

  61. //點陣顯示數組
  62. uchar code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
  63.                                          0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
  64.                                          0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
  65.                                          0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
  66. //--張--//
  67. uchar code tab1[] = {128,1,191,49,176,49,176,25,176,13,190,7,134,1,230,255,134,7,190,13,176,13,176,25,176,49,176,103,158,195,140,1};        
  68. //--李--//
  69. uchar code tab2[] = {128,0,128,0,254,63,160,2,144,4,136,8,6,48,240,3,0,1,128,0,254,63,128,0,128,0,224,0,0,0,0,0};                        
  70. //--王--//
  71. uchar code tab3[] = {0,0,252,31,128,0,128,0,128,0,128,0,128,0,248,15,128,0,128,0,128,0,128,0,128,0,254,63,0,0,0,0};
  72. //--任--//
  73. uchar code tab4[] = {16,0,16,28,208,3,8,2,8,2,12,2,10,2,232,63,8,2,8,2,8,2,8,2,8,2,200,31,0,0,0,0};
  74. //--徐-//
  75. uchar code tab5[] = {16,2,16,2,8,5,132,8,82,16,176,47,8,2,12,2,202,31,8,2,72,18,72,34,40,34,136,3,0,0,0,0};
  76. //--五角星--//
  77. uchar code char1[] = {128,1,128,1,192,3,192,3,192,3,96,6,127,254,6,96,28,56,48,12,48,12,152,27,248,30,56,28,12,48,0,0};
  78. //--圓--//
  79. uchar code char2[] = {0,0,224,7,120,30,28,56,28,56,14,112,14,112,14,112,14,112,14,112,28,56,28,56,120,30,224,7,0,0,0,0};
  80. //--三角--//
  81. uchar code char3[] = {0,0,128,1,128,1,192,3,192,3,96,6,96,6,48,12,48,12,24,24,24,24,12,48,12,48,254,127,0,0,0,0};
  82. //--菱形--//
  83. uchar code char4[] = {128,0,64,1,32,2,16,4,8,8,4,16,2,32,1,64,2,32,4,16,8,8,16,4,32,2,64,1,128,0,0,0};
  84. //--箭頭--//
  85. uchar code char5[] = {0,0,0,0,0,0,0,2,0,4,0,8,0,16,0,32,126,64,0,32,0,16,0,8,0,4,0,2,0,0,0,0};

  86. uchar *p[] = {tab1, tab2, tab3, tab4, tab5};        
  87. uchar *c[] = {char1, char2, char3, char4,char5};        


  88. void main(void)
  89. {
  90.    while(1)//死循環
  91.    {
  92.                  HC595SendData(0xff,0xff,0,0);        //清屏        
  93.                  keyNum=Key_Scan();                  //讀取鍵值
  94.                  switch (keyNum)         
  95.                 {
  96.                         case(0xFE) :          //返回按鍵K1的數據
  97.                                 translation();//文字從上到下平移
  98.                                 break;
  99.                         case(0xFD) :          //返回按鍵K2的數據
  100.                                 twinkle1();                //文字閃爍
  101.                                 break;
  102.                         case(0xFB) :          //返回按鍵K3的數據
  103.                                 twinkle2();                //符號閃爍
  104.                                 break;
  105.                         case(0x7F) :          //返回按鍵K0的數據
  106.                                 HC595SendData(0xff,0xff,0,0);                                //清屏
  107.                                 break;
  108.                         default:
  109.                                 break;
  110.                 }                        
  111.    }
  112. }

  113. unsigned char Key_Scan()
  114. {
  115.         unsigned char keyValue = 0 , i; //保存鍵值

  116.         //--檢測按鍵1--//
  117.         if (GPIO_KEY != 0xFF)                //檢測按鍵K1是否按下
  118.         {
  119.                 Delay10ms(5);        //消除抖動

  120.                 if (GPIO_KEY != 0xFF)        //再次檢測按鍵是否按下
  121.                 {
  122.                         keyValue = GPIO_KEY;
  123.                         i = 0;
  124.                         while ((i<50) && (GPIO_KEY != 0xFF))         //檢測按鍵是否松開
  125.                         {
  126.                                 Delay10ms(5);
  127.                                 i++;
  128.                         }
  129.                 }
  130.         }

  131.         return keyValue;   //將讀取到鍵值的值返回
  132. }

  133. //消除抖動(延時)
  134. void Delay10ms(uint z)
  135. {
  136.         uint j;
  137.         while(z--)
  138.         {
  139.                 j=5000;
  140.                 while(j--);
  141.         }
  142. }

  143. //文字由上而下平移
  144. void translation()
  145. {
  146.         j=0;
  147.         while(keyNum!=0x7F)
  148.         {
  149.                 for(ms = 10; ms > 0; ms--)        //移動定格時間設置
  150.                 {
  151.                         for(k = 0; k < 16; k++)        //顯示一個字
  152.                         {                                                         
  153.                                 HC595SendData(~(*(p[0] + 2*(k+j) + 1)),~(*(p[0] + 2*(k+j) )),
  154.                                 tab0[2*k],tab0[2*k + 1]);
  155.                                 //因為字模軟件取的數組是高電平有效,所以列要取反         
  156.                                 keyNum=Key_Scan();
  157.                                         if(keyNum==0x7F)
  158.                                                 break;
  159.                         }                        
  160.                         HC595SendData(0xff,0xff,0,0);                                                                                   //清屏        
  161.                         if(keyNum==0x7F)
  162.                                 break;                        
  163.                 }         
  164.                 j++;
  165.                 if(j == (10*15) )
  166.                 {
  167.                         j = 0;
  168.                 }
  169.         }
  170. }
  171. //文字閃爍
  172. void twinkle1()
  173. {
  174.         while(keyNum!=0x7F)
  175.         {
  176.                 for(i = 0; i < 5; i++)                //總共5個字
  177.                 {
  178.                         for(ms = 50; ms > 0; ms--)        //顯示50次,即肉眼可識別的停留時間
  179.                         {
  180.                                 for(k = 0; k < 16; k++)                        //顯示一個字
  181.                                 {                                                         
  182.                                         //--因為字模軟件取的數組是高電平有效,所以列要取反--//
  183.                                         HC595SendData(~(*(p[i] + 2*k + 1)),~(*(p[i] + 2*k )),
  184.                                                                                                  tab0[2*k],tab0[2*k + 1]);
  185.                                         keyNum=Key_Scan();
  186.                                         if(keyNum==0x7F)
  187.                                                 break;
  188.                                 }
  189.                                 HC595SendData(0xff,0xff,0,0);                                //清屏        
  190.                                 if(keyNum==0x7F)
  191.                                         break;                                
  192.                         }
  193.                         if(keyNum==0x7F)
  194.                                                 break;
  195.                 }
  196.         }
  197. }

  198. //符號閃爍
  199. void twinkle2()
  200. {
  201.         while(keyNum!=0x7F)
  202.         {
  203.                 for(i = 0; i <5; i++)                //總共5個符號
  204.                 {
  205.                         for(ms = 50; ms > 0; ms--)        //顯示50次,即肉眼可識別的停留時間
  206.                         {
  207.                                 for(k = 0; k < 16; k++)                        //顯示一個字
  208.                                 {                                                         
  209.                                         //--因為字模軟件取的數組是高電平有效,所以列要取反--//
  210.                                         HC595SendData(~(*(c[i] + 2*k + 1)),~(*(c[i] + 2*k )),
  211.                                                                                                  tab0[2*k],tab0[2*k + 1]);
  212.                                         keyNum=Key_Scan();
  213.                                         if(keyNum==0x7F)
  214.                                                 break;
  215.                                 }
  216.                                 HC595SendData(0xff,0xff,0,0);                                //清屏
  217.                                 if(keyNum==0x7F)
  218.                                                 break;
  219.                         }
  220.                         if(keyNum==0x7F)
  221.                                                 break;
  222.                 }
  223.         }
  224. }
復制代碼


proteus和https://blog.csdn.net/zh_j_wei/article/details/104192813上的圖是一致的

2.png (13.42 KB, 下載次數: 72)

完整字模圖

完整字模圖

1.png (10.36 KB, 下載次數: 70)

缺陷字模圖

缺陷字模圖

3.png (261.23 KB, 下載次數: 73)

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

使用道具 舉報

沙發
ID:739545 發表于 2020-6-12 10:59 | 只看該作者
整體是對的,應該是某個連線有問題或者缺失
回復

使用道具 舉報

板凳
ID:774521 發表于 2020-6-12 13:06 | 只看該作者
lovezjf234 發表于 2020-6-12 10:59
整體是對的,應該是某個連線有問題或者缺失

我把連線也發出來了 可以幫我看看哪里連錯了嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品av| 91亚洲精| 嫩草黄色影院 | 又爽又黄axxx片免费观看 | 91视频免费在观看 | 日韩欧美三区 | 99精品久久久久久 | 噜久寡妇噜噜久久寡妇 | 国产精品久久久久一区二区 | 精品毛片在线观看 | 亚洲欧洲精品成人久久奇米网 | 日日夜夜精品视频 | 精品无码久久久久久久动漫 | 欧美国产日韩一区 | 亚洲欧美视频 | 久久久久国产精品一区二区 | 69av片| 亚洲综合久久久 | 精品亚洲一区二区三区 | 亚洲综合二区 | 欧美8一10sex性hd | 色伊人网| 丝袜 亚洲 欧美 日韩 综合 | 99福利 | 欧美一区视频 | 国产伊人精品 | 香蕉av免费 | 亚洲一区二区三区视频免费观看 | 国产日韩欧美 | 免费视频久久久久 | 欧美男人亚洲天堂 | 日韩一区二区三区在线看 | 久久视频免费看 | 国产精品视频播放 | 国产黄色精品 | 欧美日韩一区二区三区四区 | 日日夜夜天天久久 | 欧美日韩成人一区二区 | 伊人伊成久久人综合网站 | 精品九九| 欧美日韩中文在线 |