找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 7450|回復(fù): 26
收起左側(cè)

單片機(jī)初學(xué)者,為什么我寫(xiě)的數(shù)碼管顯示怎么就顯示一個(gè)0,求指教

  [復(fù)制鏈接]
ID:158886 發(fā)表于 2019-5-2 21:50 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit wea=P2^2;
  6. sbit web=P2^3;
  7. sbit wec=P2^4;



  8. uchar i;

  9. uchar code duanma[]={0x3f,0x06,0x5b,0x4f,
  10.                                         0x66,0x6d,0x7d,0x07,
  11.                                         0x7f,0x6f,0x77,0x7c,
  12.                                         0x39,0x5e,0x79,0x71};



  13. void dalay(uint z);
  14. void dalay(uint z)
  15. {
  16.   while(z--);


  17. }
  18.                                  
  19. void main()
  20. {                 wea=1;
  21.                  web=1;
  22.                  wec=0;
  23.                         
  24.         
  25.                   
  26.     while(1)
  27.     {
  28.            P0=duanma[i];
  29.            for(i=0;i<15;i++);
  30.             delay();
  31.         
  32.          


  33.         
  34.         }

  35. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-5-3 08:31 | 顯示全部樓層
本帖最后由 wulin 于 2019-5-3 10:54 編輯

樓主的本意是想寫(xiě)3位數(shù)碼管動(dòng)態(tài)顯示0~F,實(shí)際沒(méi)有動(dòng)起來(lái)。要想動(dòng)起來(lái)位碼需要隨時(shí)間變化,顯示的數(shù)字也要隨時(shí)間變化。給你改成了不同數(shù)字的動(dòng)態(tài)顯示,你試試。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit wea=P2^2;
  6. sbit web=P2^3;
  7. sbit wec=P2^4;
  8. uchar i;
  9. uint  j;
  10. uchar code duanma[]={
  11.         0x3f,0x06,0x5b,0x4f,
  12.         0x66,0x6d,0x7d,0x07,
  13.         0x7f,0x6f,0x77,0x7c,
  14.         0x39,0x5e,0x79,0x71};

  15. void dalay(uint z);

  16. void dalay(uint z)
  17. {
  18.   while(--z);
  19. }
  20.                                  
  21. void main()
  22. {
  23. //        wea=1;
  24. //        web=1;
  25. //        wec=0;
  26.         i=0;
  27.         j=0;
  28.         while(1)
  29.         {
  30.                 P0=0x00;//消除鬼影
  31.                 wea=1;
  32.                 web=1;
  33.                 wec=0;
  34.                 P0=duanma[i];
  35.                 dalay(500);

  36.                 P0=0x00;
  37.                 wea=1;
  38.                 web=0;
  39.                 wec=1;
  40.                 P0=duanma[i+1];
  41.                 dalay(500);

  42.                 P0=0x00;
  43.                 wea=0;
  44.                 web=1;
  45.                 wec=1;
  46.                 P0=duanma[i+2];
  47.                 dalay(500);

  48.                 j++;
  49.                 if(j>=100)//控制i的增量速度
  50.                 {
  51.                         j=0;
  52.                         i++;
  53.                         if(i>=14)
  54.                                 i=0;
  55.                 }
  56.         }
  57. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:365802 發(fā)表于 2019-5-3 08:33 | 顯示全部樓層
1) 把對(duì)應(yīng)的電路圖也貼上來(lái)方便吧友幫你分析. 2) 我覺(jué)得可能你的Delay時(shí)間太少了.
回復(fù)

使用道具 舉報(bào)

ID:496604 發(fā)表于 2019-5-3 12:44 | 顯示全部樓層
我也覺(jué)得delay太少了,改為50000比較合適,for循環(huán)也有毛病
主循環(huán)可改為
for(i=o;i<=15;i++)
{
    P0=duanma[i];
     delay(50000);
}
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-3 13:07 | 顯示全部樓層
wulin 發(fā)表于 2019-5-3 08:31
樓主的本意是想寫(xiě)3位數(shù)碼管動(dòng)態(tài)顯示0~F,實(shí)際沒(méi)有動(dòng)起來(lái)。要想動(dòng)起來(lái)位碼需要隨時(shí)間變化,顯示的數(shù)字也要隨 ...

老師,我的意思是讓一位數(shù)碼管顯示0~F,但是我寫(xiě)的,就是顯示0運(yùn)行不了,我不知道錯(cuò)在哪,剛學(xué)。
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-3 13:09 | 顯示全部樓層
這是開(kāi)發(fā)板的數(shù)碼管電路圖
數(shù)碼管.png
回復(fù)

使用道具 舉報(bào)

ID:293387 發(fā)表于 2019-5-3 13:23 | 顯示全部樓層
for循環(huán)有毛病
for(i=o;i<=15;i++);
每次執(zhí)行后i的值不會(huì)變。
應(yīng)該把P0=duanma[i];delay();
放在for循環(huán)里面
并且添加合適的延時(shí)時(shí)間。
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-3 13:25 | 顯示全部樓層
ping264888 發(fā)表于 2019-5-3 08:33
1) 把對(duì)應(yīng)的電路圖也貼上來(lái)方便吧友幫你分析. 2) 我覺(jué)得可能你的Delay時(shí)間太少了.

我在while里面的delay括號(hào)中加數(shù)值會(huì)報(bào)錯(cuò)。
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-3 13:27 | 顯示全部樓層
堂堂 發(fā)表于 2019-5-3 12:44
我也覺(jué)得delay太少了,改為50000比較合適,for循環(huán)也有毛病
主循環(huán)可改為
for(i=o;i

在delay里加數(shù)會(huì)報(bào)錯(cuò),這也是問(wèn)題之一
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-3 13:30 | 顯示全部樓層
靜態(tài)顯示.C(114): warning C206: 'delay': missing function-prototype
靜態(tài)顯示.C(114): error C267: 'delay': requires ANSI-style prototype
Target not created

提示這個(gè)錯(cuò)誤,
回復(fù)

使用道具 舉報(bào)

ID:526392 發(fā)表于 2019-5-3 13:40 | 顯示全部樓層
P0=duanma[i]應(yīng)該放在for(i=0;i<15;i++)循環(huán)語(yǔ)句里面,另外要保持足夠長(zhǎng)的延時(shí)
回復(fù)

使用道具 舉報(bào)

ID:526392 發(fā)表于 2019-5-3 13:50 | 顯示全部樓層
while(1)后面改為for(i=0;i<=15;i++) {     P0=duanma[i];      delay(1000); }
回復(fù)

使用道具 舉報(bào)

ID:395068 發(fā)表于 2019-5-3 17:04 | 顯示全部樓層
P0=duanma[i];這一段代碼寫(xiě)在for語(yǔ)句里試試
回復(fù)

使用道具 舉報(bào)

ID:395068 發(fā)表于 2019-5-3 17:05 | 顯示全部樓層
還有你主循環(huán)根本就沒(méi)用到延時(shí),delay括號(hào)里面是空的,就算在顯示也看不出來(lái)啊,
回復(fù)

使用道具 舉報(bào)

ID:526540 發(fā)表于 2019-5-3 17:21 | 顯示全部樓層
低電平還是高電平?
回復(fù)

使用道具 舉報(bào)

ID:525872 發(fā)表于 2019-5-3 17:29 | 顯示全部樓層
延時(shí)不是空,明明定義delay(int Z),調(diào)用的時(shí)候你直接delay();
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-5-3 17:37 | 顯示全部樓層
江西奉新 發(fā)表于 2019-5-3 13:07
老師,我的意思是讓一位數(shù)碼管顯示0~F,但是我寫(xiě)的,就是顯示0運(yùn)行不了,我不知道錯(cuò)在哪,剛學(xué)。

按你的意思這樣寫(xiě)就可以了,但必須把跳線帽J21插在LE與VCC上,如果插在P10與LE上就可能須加一句P10=1;
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit wea=P2^2;
  6. sbit web=P2^3;
  7. sbit wec=P2^4;
  8. uchar i;
  9. uchar code duanma[]={
  10.                 0x3f,0x06,0x5b,0x4f,
  11.                 0x66,0x6d,0x7d,0x07,
  12.                 0x7f,0x6f,0x77,0x7c,
  13.                 0x39,0x5e,0x79,0x71};

  14. void dalay(uint z);

  15. void dalay(uint z)
  16. {
  17.         while(--z);
  18. }
  19.                                  
  20. void main()
  21. {
  22.         wea=0;
  23.         web=0;
  24.         wec=0;
  25.         i=0;
  26.         while(1)
  27.         {
  28.                 P0=duanma[i];
  29.                 dalay(65530);
  30.                 i++;
  31.                 if(i>=16)
  32.                         i=0;
  33.         }
  34. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:462827 發(fā)表于 2019-5-3 18:08 | 顯示全部樓層
樓主這個(gè)應(yīng)該是普中的單片機(jī)吧
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2019-5-3 18:09 | 顯示全部樓層
看看人家正確的案例吧!
回復(fù)

使用道具 舉報(bào)

ID:150234 發(fā)表于 2019-5-3 19:18 | 顯示全部樓層
LE應(yīng)該為高電平
回復(fù)

使用道具 舉報(bào)

ID:526392 發(fā)表于 2019-5-3 20:12 | 顯示全部樓層
51go 發(fā)表于 2019-5-3 13:50
while(1)后面改為for(i=0;i

測(cè)試了一下,還是delay(50000)這個(gè)時(shí)長(zhǎng)比較合適
回復(fù)

使用道具 舉報(bào)

ID:525068 發(fā)表于 2019-5-6 10:41 | 顯示全部樓層
for循環(huán)那里有問(wèn)題,思路是對(duì)的
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-7 15:50 | 顯示全部樓層
謝謝個(gè)各位老師,我找到問(wèn)題了,第一個(gè)是你們說(shuō)的FOR循環(huán)有問(wèn)題,第二個(gè)是delay,這個(gè)寫(xiě)錯(cuò)了,才報(bào)錯(cuò),等會(huì)晚一點(diǎn)把我寫(xiě)的,再發(fā)出來(lái)看看,
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-7 15:53 | 顯示全部樓層
hantu 發(fā)表于 2019-5-3 18:08
樓主這個(gè)應(yīng)該是普中的單片機(jī)吧

是普中的,普中的視頻我看不懂,因?yàn)槲覍W(xué)歷不高,以前學(xué)習(xí)又不太好,他們講的我看不懂!我在網(wǎng)上看的電路都是不一樣的!
回復(fù)

使用道具 舉報(bào)

ID:158886 發(fā)表于 2019-5-7 20:20 | 顯示全部樓層
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit wea=P2^2;
sbit web=P2^3;
sbit wec=P2^4;
uchar i;
uchar code duanma[]={0x3f,0x06,0x5b,0x4f,
                                        0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,
                                        0x39,0x5e,0x79,0x71};



void delay(uint z);
void delay(uint z)
{
  while(z--);


}
                                 
void main()
{                 
                        
        
                  
    while(1)
    {       
                           P0=0xff;
                         wea=0;
                 web=0;
                 wec=0;
           
           for(i=0;i<=15;i++)
                  
                           {
                            P0=duanma[i];
                           delay(40000);
                  
            }
        
         


        
        }

} 這是我修正過(guò)的,現(xiàn)在可以正常一位數(shù)碼管,0~F循環(huán)顯示,時(shí)間delay,里面的可以寫(xiě)數(shù)值,謝謝大家指點(diǎn)!       
回復(fù)

使用道具 舉報(bào)

ID:529961 發(fā)表于 2019-5-7 20:37 | 顯示全部樓層
因?yàn)槟愕难h(huán)里面沒(méi)有寫(xiě)延時(shí)呀,你直接跳過(guò)去了括號(hào)里面應(yīng)該定義
回復(fù)

使用道具 舉報(bào)

ID:531695 發(fā)表于 2019-5-9 16:51 | 顯示全部樓層
你這樣P0完全不能讀到i的值
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表