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

QQ登錄

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

搜索
查看: 2974|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

還是郭天祥的板子,想讓數(shù)碼管顯示187732從右到左流過(guò)去,但第一個(gè)數(shù)就可能出范圍問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:632567 發(fā)表于 2019-11-12 16:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
程序如下只需要大哥們分析一下第一個(gè)為什出了問(wèn)題即可。個(gè)人認(rèn)為是數(shù)字太大超過(guò)范圍不過(guò)usigned long在單片機(jī)中范圍是2的32次方!所以說(shuō)暫時(shí)找不出問(wèn)題所在。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long;
sbit wela=P2^7;
uchar num;
uint ge,shi,bai,qian,wan,sw;                 
sbit dula=P2^6;
ulong num2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
/*1111 1110=0xfe 1
1111 1101=0xfd 2
1111 1011=0xfb 3
1111 0111=0xf7 4
1110 1111=0xef 5
1101 1111=0xdf 6
1011 1111=0xbf 7
1100 1111=0xcf
1100 0111=0xc7
1100 0011=0xc3
1100 0001=0xc1
1100 0000=0xc0*/
void delay(uint z)
{
   uint x,y;
   for(x=110;x>0;x--);
   for(y=z;y>0;y--);
}
void display(uint ge,uint shi,uint bai,uint sw,uint qian,uint wan)
{
        ge=num2%100000;
        shi=num2%100000/10000;
        bai=num2%100000%10000/1000;
        qian=num2%100000%10000%1000/100;
        wan=num2/60000;
        sw=num2/90000;
        dula=1;
        P0=table[ge];
        dula=0;
        wela=1;
        P0=0xdf;
        wela=0;
        delay(65000);
}                                                                  

void main()
{          
  dula=0;
  wela=0;      
  num=0xfe;
  num2=187732;
  while(1)
  {
          display(ge,shi,bai,qian,wan,sw);
  }
}

現(xiàn)在只是顯第一個(gè)數(shù)字,拜托了。

TX-1C型單片機(jī)開(kāi)發(fā)板原理圖.pdf

1015.98 KB, 下載次數(shù): 7

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:524818 發(fā)表于 2019-11-13 08:15 | 只看該作者
貌似這一段語(yǔ)法不太對(duì):void display(uint ge,uint shi,uint bai,uint sw,uint qian,uint wan)
{
        ge=num2%100000;
        shi=num2%100000/10000;
        bai=num2%100000%10000/1000;
        qian=num2%100000%10000%1000/100;
        wan=num2/60000;
        sw=num2/90000;
回復(fù)

使用道具 舉報(bào)

板凳
ID:584814 發(fā)表于 2019-11-13 08:31 | 只看該作者
只是顯第一個(gè)數(shù)字,是因?yàn)槲焕瓀ula只在一位;
沒(méi)有流動(dòng)起來(lái),是因?yàn)槊總(gè)位定義的內(nèi)容不變化;
還有就是ge、shi.... 那些算式呵呵不會(huì)溢出么
回復(fù)

使用道具 舉報(bào)

地板
ID:632567 發(fā)表于 2019-11-13 10:16 | 只看該作者
cphnkj188 發(fā)表于 2019-11-13 08:15
貌似這一段語(yǔ)法不太對(duì):void display(uint ge,uint shi,uint bai,uint sw,uint qian,uint wan)
{
        ...

那里有問(wèn)題啊
回復(fù)

使用道具 舉報(bào)

5#
ID:632567 發(fā)表于 2019-11-13 10:17 | 只看該作者
man1234567 發(fā)表于 2019-11-13 08:31
只是顯第一個(gè)數(shù)字,是因?yàn)槲焕瓀ula只在一位;
沒(méi)有流動(dòng)起來(lái),是因?yàn)槊總(gè)位定義的內(nèi)容不變化;
還有就是ge ...

沒(méi)聽(tīng)懂
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2019-11-13 13:15 | 只看該作者
#define ulong unsigned long; 這里多了“;”,1ms延時(shí)函數(shù)也寫(xiě)錯(cuò)。動(dòng)態(tài)數(shù)碼管顯示程序。



  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long

  5. sbit wela=P2^7;
  6. sbit dula=P2^6;
  7. //uchar num;
  8. uchar ge,shi,bai,qian,wan,sw;                 
  9. ulong num2;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71};
  15. /*1111 1110=0xfe 1
  16. 1111 1101=0xfd 2
  17. 1111 1011=0xfb 3
  18. 1111 0111=0xf7 4
  19. 1110 1111=0xef 5
  20. 1101 1111=0xdf 6
  21. 1011 1111=0xbf 7
  22. 1100 1111=0xcf
  23. 1100 0111=0xc7
  24. 1100 0011=0xc3
  25. 1100 0001=0xc1
  26. 1100 0000=0xc0*/
  27. void delay(uint z)
  28. {
  29.    uint x,y;
  30.    for(x=z;x>0;x--)
  31.           for(y=110;y>0;y--);
  32. }
  33. void display()
  34. {
  35.         P0=0xdf;
  36.         wela=1;
  37.         wela=0;

  38.         P0=table[ge];
  39.         dula=1;
  40.         dula=0;
  41.         delay(1);

  42.         P0=0xef;
  43.         wela=1;
  44.         wela=0;

  45.         P0=table[shi];
  46.         dula=1;
  47.         dula=0;
  48.         delay(1);

  49.         P0=0xf7;
  50.         wela=1;
  51.         wela=0;

  52.         P0=table[bai];
  53.         dula=1;
  54.         dula=0;
  55.         delay(1);

  56.         P0=0xfb;
  57.         wela=1;
  58.         wela=0;

  59.         P0=table[qian];
  60.         dula=1;
  61.         dula=0;
  62.         delay(1);

  63.         P0=0xfd;
  64.         wela=1;
  65.         wela=0;

  66.         P0=table[wan];
  67.         dula=1;
  68.         dula=0;
  69.         delay(1);

  70.         P0=0xfe;
  71.         wela=1;
  72.         wela=0;

  73.         P0=table[sw];
  74.         dula=1;
  75.         dula=0;
  76.         delay(1);
  77. }

  78. void main()
  79. {         
  80.         num2=187732;
  81.         ge  = num2%10;
  82.         shi = num2/10%10;
  83.         bai = num2/100%10;
  84.         qian= num2/1000%10;
  85.         wan = num2/10000%10;
  86.         sw  = num2/100000%10;
  87.         while(1)
  88.         {
  89.                 display();
  90.         }
  91. }
復(fù)制代碼






回復(fù)

使用道具 舉報(bào)

7#
ID:632567 發(fā)表于 2019-11-14 10:15 | 只看該作者
wulin 發(fā)表于 2019-11-13 13:15
#define ulong unsigned long; 這里多了“;”,1ms延時(shí)函數(shù)也寫(xiě)錯(cuò)。動(dòng)態(tài)數(shù)碼管顯示程序。

其實(shí)老哥我想讓他滾動(dòng)起來(lái),就像是寫(xiě)一個(gè)love you讓他在數(shù)碼管上滾動(dòng)一樣。但是想了很久都沒(méi)有想出解決方法。
最主要的是如何卡在讓他同時(shí)亮同時(shí)滅,比如18同時(shí)顯同時(shí)滅,然后187同時(shí)顯同時(shí)滅
望回答,感謝。
回復(fù)

使用道具 舉報(bào)

8#
ID:245004 發(fā)表于 2019-11-15 12:00 | 只看該作者
按照6樓朋友的圖修改如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long

  6. sbit PinLE_Data = P2 ^ 6;
  7. sbit PinLE_Comm = P2 ^ 7;
  8. uchar code ucTabNumber[16] = {
  9.   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  10.   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
  11. };

  12. // @12.000MHz
  13. void Delay2ms(void) {
  14.   uchar i, j;

  15.   i = 4;
  16.   j = 225;
  17.   do
  18.   {
  19.     while (--j);
  20.   } while (--i);
  21. }

  22. #define DISPALY_SPEED    60   // 決定顯示速度
  23. #define SEG_LENGTH        6   // 數(shù)碼管位數(shù)
  24. #define SET_74HC573(data, le)   {P0 = data; le = 1; _nop_(); le = 0;}
  25. void Display(uchar *p_ucArr) {
  26.   uchar i;
  27.   uchar ucTemp;
  28.   static uchar s_ucPosition;    // [0,11] 定位
  29.   static uint s_uiCount;        // 計(jì)數(shù)

  30.   for (i = 0; i < SEG_LENGTH; i++) {
  31.     if ((s_ucPosition + i) < (SEG_LENGTH - 1)) {
  32.       ucTemp = 0x00;
  33.     } else if ((s_ucPosition + i) > ((SEG_LENGTH << 1) - 2)) {
  34.       ucTemp = 0x00;
  35.     } else {
  36.       // 有效內(nèi)容
  37.       ucTemp = ucTabNumber[*(p_ucArr + ((s_ucPosition + i) - (SEG_LENGTH - 1)))], PinLE_Data;
  38.     }
  39.     SET_74HC573(0xff, PinLE_Comm);            // 先關(guān)閉公共端
  40.     SET_74HC573(ucTemp, PinLE_Data);            // 賦值
  41.     SET_74HC573(~(0x01 << i), PinLE_Comm);        // 打開(kāi)公共端
  42.     Delay2ms();   // 顯示
  43.   }
  44.   // 計(jì)數(shù)控制速度
  45.   s_uiCount++;
  46.   if(s_uiCount >= DISPALY_SPEED) {
  47.     s_uiCount = 0;
  48.     // 控制有效定位
  49.     s_ucPosition++;
  50.     if(s_ucPosition >= ((SEG_LENGTH << 1) - 1)) {
  51.       s_ucPosition = 0;
  52.     }
  53.   }

  54. }

  55. /*
  56. * 將數(shù)字按位轉(zhuǎn)換成數(shù)組
  57. * ulNumber:原數(shù)字
  58. * *p_ucArr:數(shù)組地址
  59. */
  60. void Transformation(ulong ulNumber, uchar *p_ucArr) {
  61.   *p_ucArr = ulNumber / 100000;
  62.   p_ucArr++;
  63.   *p_ucArr = ulNumber % 100000 / 10000;
  64.   p_ucArr++;
  65.   *p_ucArr = ulNumber % 10000 / 1000;
  66.   p_ucArr++;
  67.   *p_ucArr = ulNumber % 1000 / 100;
  68.   p_ucArr++;
  69.   *p_ucArr = ulNumber % 100 / 10;
  70.   p_ucArr++;
  71.   *p_ucArr = ulNumber % 10;
  72. }

  73. void main(void) {
  74.   uchar ucArr[6] = {0};
  75.   ulong ulNumber = 187732;
  76.   // 初始化數(shù)碼管-關(guān)閉顯示
  77.   SET_74HC573(0xff, PinLE_Comm);
  78.   SET_74HC573(0x00, PinLE_Data);
  79.   // 將數(shù)字按位轉(zhuǎn)換成數(shù)組
  80.   Transformation(ulNumber, ucArr);
  81.   while (1) {
  82.     // 顯示數(shù)組中的數(shù)字
  83.     Display(ucArr);
  84.   }
  85. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

9#
ID:632567 發(fā)表于 2019-11-20 11:31 | 只看該作者
bh2030693 發(fā)表于 2019-11-15 12:00
按照6樓朋友的圖修改如下:

老哥我能力有限還看不懂你這個(gè)程序
回復(fù)

使用道具 舉報(bào)

10#
ID:584814 發(fā)表于 2019-11-22 19:10 | 只看該作者
單片機(jī)在想peach 發(fā)表于 2019-11-20 11:31
老哥我能力有限還看不懂你這個(gè)程序

重寫(xiě)一遍罷。提示:各個(gè)位的算法要調(diào)整精確,這個(gè)不是關(guān)鍵;關(guān)鍵的是共陰或共陽(yáng)的數(shù)碼管沒(méi)可能一次亮幾位不同的數(shù),要一個(gè)一個(gè)地點(diǎn)亮,只是時(shí)間很短可達(dá)微秒級(jí)所以視覺(jué)上感覺(jué)是一次全亮的而已,你的程序里并沒(méi)有這個(gè)只是點(diǎn)亮ge位了。
回復(fù)

使用道具 舉報(bào)

11#
ID:245004 發(fā)表于 2019-11-22 22:33 | 只看該作者
man1234567 發(fā)表于 2019-11-22 19:10
重寫(xiě)一遍罷。提示:各個(gè)位的算法要調(diào)整精確,這個(gè)不是關(guān)鍵;關(guān)鍵的是共陰或共陽(yáng)的數(shù)碼管沒(méi)可能一次亮幾位 ...

沒(méi)明白你的意思,你不給個(gè)圖,我只能按照上面朋友的圖寫(xiě)代碼了。你的意思可能是不用573,動(dòng)態(tài)數(shù)碼管?
回復(fù)

使用道具 舉報(bào)

12#
ID:245004 發(fā)表于 2019-11-22 22:50 | 只看該作者
剛剛看到你的pdf文件,下載看了也是用的573,你可以把我的程序用keil5或4編譯一下,然后把代碼試一試,再然后有什么問(wèn)題再提出來(lái),我們共師兄習(xí)。
我還是傳個(gè)hex吧: munber.zip (1.35 KB, 下載次數(shù): 4)
另外論壇回帖沒(méi)見(jiàn)到提示,所以可能不一定能及時(shí)看到你的回帖。

回復(fù)

使用道具 舉報(bào)

13#
ID:245004 發(fā)表于 2019-11-22 22:57 | 只看該作者
man1234567 發(fā)表于 2019-11-22 19:10
重寫(xiě)一遍罷。提示:各個(gè)位的算法要調(diào)整精確,這個(gè)不是關(guān)鍵;關(guān)鍵的是共陰或共陽(yáng)的數(shù)碼管沒(méi)可能一次亮幾位 ...

我的程序就如你說(shuō)的一次點(diǎn)亮一位,是ms級(jí)的延時(shí),視覺(jué)上就是點(diǎn)亮了6位,從”000001“”000018“”000187“...”187732“”877320“”773200“...這樣,看起來(lái)就是從右向左滾動(dòng)。而不是只點(diǎn)亮了個(gè)位。你的意思是這樣嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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