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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機6個數碼管動態顯示程序問題

[復制鏈接]
跳轉到指定樓層
樓主
利用動態掃描的方式在6個數碼管上顯示出穩定的654321;
但是如圖6個數碼管顯示出錯了;
單片機代碼如下,請問是哪里的問題
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit dula=P2^7;
sbit wela=P2^6;
uchar num,numwe,numdu;
void init();
void main()
{
        numwe=0xfe;
        numdu=8;
        init();//初始化子程序

        while(1)
        {
               
        }
}
void init()//設置定時器方式來達到動態顯示效果
{
        TMOD=0x01;
        TH0=(65336-500)/256;
        TL0=(65336-500)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void timer0() interrupt 1
{
        TH0=(65336-500)/256;
        TL0=(65336-500)%256;
        num++;
        if(num==1)
        {
                num=0;
                numdu--;
                if(numdu==0)
                numdu=8;
                dula=1;//送段選數據
                P0=table[numdu];//賦值6,5,4,3,2,1顯示
                dula=0;
                P0=0xff;//消影
                wela=1;//送位選數據
                P0=numwe;
                numwe=_crol_(numwe,1);//循環左移1位,使6個數碼管輪流顯示
                wela=0;
                if(numwe==0xbf)
                numwe=0xfe;
               
        }
}

51hei圖片_20221022154538.jpg (5.27 MB, 下載次數: 87)

51hei圖片_20221022154538.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1007932 發表于 2022-10-22 18:52 | 只看該作者
講真看不懂你的中斷程序,這個num有啥用?還有P0=table[numdu];中的numdu確定是在1-6之間循環?另外把驅動芯片型號發一下。
回復

使用道具 舉報

板凳
ID:1048353 發表于 2022-10-22 19:00 | 只看該作者
一事無成 發表于 2022-10-22 18:52
講真看不懂你的中斷程序,這個num有啥用?還有P0=table[numdu];中的numdu確定是在1-6之間循環?另外把驅動 ...

芯片是89C52RC;P0=table[numdu]這我就是想不明白哪里出錯了;中斷程序設置的是5ms,來達到數碼管動態顯示的目的;
這個是郭天祥10天入門單片機里的例題,這個出錯的是我的解法
回復

使用道具 舉報

地板
ID:1048353 發表于 2022-10-22 19:01 | 只看該作者
/*******************************************************************/
/* TX-1C單片機實驗板實驗例程                                                                   */
/*******************************************************************/
/*                                                         
利用動態掃描方法在六位數碼管上顯示出穩定的654321.
時鐘頻率為11.0592M
*/
/*********************************************************/
#include<reg52.h>  //52單片機頭文件
#include <intrins.h> //包含有左右循環移位子函數的庫
#define uint unsigned int    //宏定義
#define uchar unsigned char  //宏定義
sbit dula=P2^6;       //數碼管段選鎖存端
sbit wela=P2^7;       ////數碼管位選鎖存端
uchar code table[]={   //數碼管顯示編碼
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar,uchar,uchar,uchar,uchar,uchar); //函數聲明
void delay(uint);
void main()
{
        while(1)
        {
                display(6,5,4,3,2,1);         //始終顯示
        }
}

void display(uchar one,uchar two,uchar three,uchar four,uchar five,uchar six)
{
        dula=1;
                P0=table[one];   //送段數據
                dula=0;
                P0=0xff;                //送位數據前關閉所有顯示,防止打開位選鎖存后段選數據通過位選鎖存器
                wela=1;
                P0=0xfe;
                wela=0;
                delay(1);

                dula=1;
                P0=table[two];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
                delay(1);

                dula=1;
                P0=table[three];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfb;
                wela=0;
                delay(1);

                dula=1;
                P0=table[four];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xf7;
                wela=0;
                delay(1);

                dula=1;
                P0=table[five];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xef;
                wela=0;
                delay(1);

                dula=1;
                P0=table[six];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xdf;
                wela=0;
                delay(1);
}

void delay(uint z)       //延時子函數
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
回復

使用道具 舉報

5#
ID:1048353 發表于 2022-10-22 19:31 | 只看該作者
上面是郭天祥老師的解法
回復

使用道具 舉報

6#
ID:161164 發表于 2022-10-22 20:29 | 只看該作者
P0=0xFF;消影消了個寂
正確寫法該是
wela=1
P0=0xff
wela=0
dula=1
P0=table
dula=0
wela=1
P0=numwe
wela=0
回復

使用道具 舉報

7#
ID:1048353 發表于 2022-10-22 22:08 | 只看該作者
lkc8210 發表于 2022-10-22 20:29
P0=0xFF;消影消了個寂寞
正確寫法該是
wela=1

        num=0;
                numdu--;
                wela=1;
                P0=0xff;
                wela=0;
                if(numdu==0)
                numdu=8;
                dula=1;//送段選數據
                P0=table[numdu];//賦值6,5,4,3,2,1顯示
                dula=0;
                //P0=0xff;//消影
                wela=1;//送位選數據
                P0=numwe;
                numwe=_crol_(numwe,1);//循環左移1位,使6個數碼管輪流顯示
                wela=0;
                if(numwe==0xbf)
                numwe=0xfe;
回復

使用道具 舉報

8#
ID:1048353 發表于 2022-10-22 22:15 | 只看該作者

這樣消影?但是如圖的話,動態顯示654321還是不行啊

51hei圖片_20221022221232.jpg (255.82 KB, 下載次數: 90)

51hei圖片_20221022221232.jpg
回復

使用道具 舉報

9#
ID:213173 發表于 2022-10-23 08:22 | 只看該作者
86爆缸 發表于 2022-10-22 22:15
這樣消影?但是如圖的話,動態顯示654321還是不行啊

用位消隱和段消隱都一樣有效,樓主用500us周期掃描速度太快,削弱了消隱效果。通常掃描一輪不低于20ms不會看出閃爍。一般每個數碼管顯示1ms,6ms完成一輪掃描為宜。




代碼修改如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code table[]={
  6. 0x3f,0x06,0x5b,0x4f,
  7. 0x66,0x6d,0x7d,0x07,
  8. 0x7f,0x6f,0x77,0x7c,
  9. 0x39,0x5e,0x79,0x71};
  10. sbit dula=P2^6;
  11. sbit wela=P2^7;
  12. uchar num;//numwe,numdu;
  13. void init();
  14. void main()
  15. {
  16. //        numwe=0xfe;
  17. //        numdu=8;
  18.         init();//初始化子程序
  19.        
  20.         while(1)
  21.         {
  22.        
  23.         }
  24. }
  25. void init()//設置定時器方式來達到動態顯示效果
  26. {
  27.         TMOD=0x01;
  28.         TH0=(65536-1000)/256;
  29.         TL0=(65536-1000)%256;
  30.         EA=1;
  31.         ET0=1;
  32.         TR0=1;
  33. }
  34. void timer0() interrupt 1
  35. {
  36.         TH0=(65536-1000)/256;
  37.         TL0=(65536-1000)%256;

  38.         num++;
  39.         if(num==6)
  40.                 num=0;

  41.         dula=1;
  42.         P0=0x00;//消影
  43.         dula=0;

  44.         wela=1;
  45.         P0=~(0x01<<num);//送位碼
  46.         wela=0;

  47.         dula=1;
  48.         P0=table[6-num];//賦值6,5,4,3,2,1顯示
  49.         dula=0;
  50. }
復制代碼



回復

使用道具 舉報

10#
ID:121859 發表于 2022-10-23 09:06 | 只看該作者
定時器定時時間太短,將500改為2000到5000之間。另外顯示應該先位碼再段碼
回復

使用道具 舉報

11#
ID:1048353 發表于 2022-10-23 11:28 | 只看該作者
zhxiufan 發表于 2022-10-23 09:06
定時器定時時間太短,將500改為2000到5000之間。另外顯示應該先位碼再段碼

先位碼后段碼的話,段碼未賦初值,當dula=1的時候,P0還是位選的數據,會先出現亂碼吧,所以我才先段碼后位碼的
回復

使用道具 舉報

12#
ID:1048353 發表于 2022-10-23 12:03 | 只看該作者
wulin 發表于 2022-10-23 08:22
用位消隱和段消隱都一樣有效,樓主用500us周期掃描速度太快,削弱了消隱效果。通常掃描一輪不低于20ms不 ...

謝謝大佬,你的代碼寫的很漂亮,我定義的變量還是多了;
不過消影應該是P0=0xff,我這個是共陰極數碼管;
同時我試了下用不用消影的區別,數碼管顯示都正常,沒有亂碼
回復

使用道具 舉報

13#
ID:1048353 發表于 2022-10-23 12:10 | 只看該作者
wulin 發表于 2022-10-23 08:22
用位消隱和段消隱都一樣有效,樓主用500us周期掃描速度太快,削弱了消隱效果。通常掃描一輪不低于20ms不 ...

大佬你的代碼我能看懂沒問題,但我自己的代碼試了下延長掃描周期,但就是沒法顯示和你一樣的效果;
找不到我的代碼錯在哪里了
回復

使用道具 舉報

14#
ID:1048353 發表于 2022-10-23 12:15 | 只看該作者
wulin 發表于 2022-10-23 08:22
用位消隱和段消隱都一樣有效,樓主用500us周期掃描速度太快,削弱了消隱效果。通常掃描一輪不低于20ms不 ...

我找到我代碼的問題了,位選賦值那的if語句用錯了,輸出結果就是6個數碼管流水燈亮,然后同時每個數碼管都賦值6,5,4,3,2,1;難怪我這都是亂碼了
回復

使用道具 舉報

15#
ID:1048353 發表于 2022-10-23 12:26 | 只看該作者
86爆缸 發表于 2022-10-23 12:15
我找到我代碼的問題了,位選賦值那的if語句用錯了,輸出結果就是6個數碼管流水燈亮,然后同時每個數碼管 ...

試了下還是不行,我想我這個應該是定義的變量多了,掃描時間又短,段選位選多個變量造成的亂碼?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区在线发布 | 国产98色在线 | 日韩 | 伊人春色在线 | 欧美日本韩国一区二区三区 | 久久久免费 | 国产精品久久久久一区二区 | 日本不卡免费新一二三区 | 久久一区精品 | 国产色婷婷 | 日韩高清电影 | 国产精品永久 | 伊人网99 | 日韩高清中文字幕 | 久久久久亚洲精品 | 亚洲不卡一 | jlzzjlzz欧美大全 | 免费一级网站 | 日韩亚洲欧美一区 | 亚洲图片一区二区三区 | 91在线看| 一本大道久久a久久精二百 欧洲一区二区三区 | 成人福利网 | 在线日韩中文字幕 | 日韩欧美在 | 黑人巨大精品欧美一区二区免费 | 国产一区二区三区在线看 | 黑人成人网 | 特级毛片 | 亚洲精品一区中文字幕乱码 | 国产91在线视频 | 一级视频在线免费观看 | 男人天堂国产 | 国产伦精品一区二区三毛 | 一区二区三区欧美大片 | 国产一区二区三区在线免费 | 羞羞视频免费观看入口 | 欧美.com | 亚洲区一区二 | 亚洲人成网站777色婷婷 | 日本不卡高字幕在线2019 | 国产美女自拍视频 |