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

標題: 單片機+點陣顯示漢字程序問題 為什么會整個點陣都亮了?而且閃爍的沒有規律 [打印本頁]

作者: 小小彩姬    時間: 2022-3-11 13:11
標題: 單片機+點陣顯示漢字程序問題 為什么會整個點陣都亮了?而且閃爍的沒有規律
想問一下為什么動態掃描點陣顯示漢字的時候,為什么會整個點陣都亮了?而且閃爍的沒有規律

單片機源程序如下:
  1. #include <reg51.h>
  2. #include "intrins.h"

  3. typedef unsigned int uint;
  4. typedef unsigned char uchar;

  5. sbit SRCLK = P3^6;  // 移位寄存器時鐘
  6. sbit RCLK = P3^5;  //        控制存儲寄存器的時鐘
  7. sbit SER = P3^4; //串行數據輸入

  8. uchar code ledduan[] = {
  9. /*--  文字:  普  --*/
  10. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  11. 0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,                          //從左往右從上往下依次掃描
  12. 0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,
  13. };

  14. uchar code ledwei[] = {
  15. 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
  17. };


  18. void delay(uint z){
  19.         while (z--);
  20. }

  21. void hc595SendByte(uchar dat1,uchar dat2,uchar dat3,uchar dat4){
  22.         uint i;
  23.         SRCLK = 1;
  24.         RCLK = 1;
  25.         for (i = 0; i < 8; i++){
  26.                 SER = dat1 >> 7;
  27.                 dat1 <<= 1;

  28.                 SRCLK = 0;
  29.                 _nop_();                  
  30.         //        _nop_();
  31.                 SRCLK = 1;
  32.         }
  33.         for (i = 0; i < 8; i++){
  34.                 SER = dat2 >> 7;
  35.                 dat2 <<= 1;

  36.                 SRCLK = 0;
  37.                 _nop_();                  
  38.         //        _nop_();
  39.                 SRCLK = 1;
  40.         }
  41.         for (i = 0; i < 8; i++){
  42.                 SER = dat3 >> 7;
  43.                 dat3 <<= 1;

  44.                 SRCLK = 0;
  45.                 _nop_();                  
  46.         //        _nop_();
  47.                 SRCLK = 1;
  48.         }
  49.         for (i = 0; i < 8; i++){
  50.                 SER = dat4 >> 7;
  51.                 dat4 <<= 1;

  52.                 SRCLK = 0;
  53.                 _nop_();                  
  54.         //        _nop_();
  55.                 SRCLK = 1;
  56.         }
  57.         RCLK = 0;
  58.         _nop_();
  59.         //_nop_();
  60.         RCLK = 1;
  61. }

  62. void main() {
  63.         uchar i;
  64.         while(1){
  65.                 for (i = 0; i < 16; i++){
  66.                         hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan[i + 16],ledduan[i]);         //前兩個控制列 后兩個控制行         從右下角的點往左往上讀           行連接了三極管的入口 列連接了三極管的出口
  67.                         delay(100);                                                              //例i=0;表示選中第一列,通過ledduan來選擇哪幾行亮
  68.                 }
  69.         }
  70. }
復制代碼


作者: 名字不是重點    時間: 2022-3-11 13:39
595的控制接口,除了SER/SCK/RCK 外,還有一個OE。。沒看到你的代碼中有控制OE的地方。
作者: 小小彩姬    時間: 2022-3-11 15:40
名字不是重點 發表于 2022-3-11 13:39
595的控制接口,除了SER/SCK/RCK 外,還有一個OE。。沒看到你的代碼中有控制OE的地方。

OE這里好像是默認低電平
作者: 名字不是重點    時間: 2022-3-11 15:56
小小彩姬 發表于 2022-3-11 15:40
OE這里好像是默認低電平

默認低電平也可以,但你的代碼要做消隱。
作者: 188610329    時間: 2022-3-11 16:03
這樣改看看

void hc595SendByte(char dat1,char dat2,char dat3,char dat4){
        char i;
        for (i = 0; i < 8; i++)       {
                dat1 <<= 1;
                SER  = CY;
                SRCLK = 1;
                _nop_();                  
                SRCLK = 0;
        }


        for (i = 0; i < 8; i++)       {
                dat2 <<= 1;
                SER  = CY;
                SRCLK = 1;
                _nop_();                  
                SRCLK = 0;
        }

        for (i = 0; i < 8; i++)       {
                dat3 <<= 1;
                SER  = CY;
                SRCLK = 1;
                _nop_();                  
                SRCLK = 0;
        }

        for (i = 0; i < 8; i++)       {
                dat4 <<= 1;
                SER  = CY;
                SRCLK = 1;
                _nop_();                  
                SRCLK = 0;
        }

        RCLK = 1;
        RCLK = 0;
}

作者: 小小彩姬    時間: 2022-3-11 16:39
188610329 發表于 2022-3-11 16:03
這樣改看看

void hc595SendByte(char dat1,char dat2,char dat3,char dat4){

還是閃的厲害,雖然能看出高光的字,但其他地方全都在閃
作者: 188610329    時間: 2022-3-11 17:27
小小彩姬 發表于 2022-3-11 16:39
還是閃的厲害,雖然能看出高光的字,但其他地方全都在閃

delay 改2000看看
作者: 小小彩姬    時間: 2022-3-11 17:30
188610329 發表于 2022-3-11 17:27
delay 改2000看看

沒用。。幾乎所有數字都試了一下
作者: 小小彩姬    時間: 2022-3-11 17:31
小小彩姬 發表于 2022-3-11 17:30
沒用。。幾乎所有數字都試了一下

是不是這板子上的這個模塊壞了。。
作者: 188610329    時間: 2022-3-11 18:47
小小彩姬 發表于 2022-3-11 17:31
是不是這板子上的這個模塊壞了。。

可能的話,上原理圖吧,程序基本沒有其他問題了,
然,HC595, 截至目前用了200多片,沒有一片是壞的,也沒有遇到過HC595比 屏幕先壞的。

從你說的現象分析,可能是2方面,
1)HC595 沒有給100uf電容,而未選也沒有用三極管驅動。
2)不知道你單片機具體型號,可能控制SRCLK, RLCK 這兩個引腳的 IO驅動不夠(畢竟要同時拉高4個芯片的電平),可能需要上拉或者用推挽輸出。

看了原理圖再說吧。
作者: xianfajushi    時間: 2022-3-11 19:00
看我帖子有荔枝
作者: 小小彩姬    時間: 2022-3-12 18:05
xianfajushi 發表于 2022-3-11 19:00
看我帖子有荔枝

但是我這個是16×16的,我不知道是不是我點陣的問題




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1