找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1425|回復(fù): 13
收起左側(cè)

哪位解釋一下這個單片機數(shù)碼管顯示代碼詳細工作來龍去脈

[復(fù)制鏈接]
ID:705846 發(fā)表于 2024-11-24 18:40 | 顯示全部樓層 |閱讀模式
哪位解釋一下這個代碼詳細工作來龍去脈。謝謝。

//數(shù)碼管顯示緩存區(qū)
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};

//數(shù)碼管段碼表
unsigned char NixieTable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
                                                        0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e,0xFF,
};
               

回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-11-24 19:01 | 顯示全部樓層
14字節(jié)緩沖,32個段碼,不懂
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2024-11-24 20:57 | 顯示全部樓層
unsigned char NixieTable[] = {
    0xc0, // 0  -> NixieTable[0]
    0xf9, // 1  -> NixieTable[1]
    0xa4, // 2  -> NixieTable[2]
    0xb0, // 3  -> NixieTable[3]
    0x99, // 4  -> NixieTable[4]
    0x92, // 5  -> NixieTable[5]
    0x82, // 6  -> NixieTable[6]
    0xf8, // 7  -> NixieTable[7]
    0x80, // 8  -> NixieTable[8]
    0x90, // 9  -> NixieTable[9]
    0x88, // A  -> NixieTable[10]
    0x83, // b  -> NixieTable[11]
    0xc6, // C  -> NixieTable[12]
    0xa1, // d  -> NixieTable[13]
    0x86, // E  -> NixieTable[14]
    0x8e, // F  -> NixieTable[15]
    0x40, // G  -> NixieTable[16]
    0x79, // H  -> NixieTable[17]
    0x24, // I  -> NixieTable[18]
    0x30, // J  -> NixieTable[19]
    0x19, // K  -> NixieTable[20]
    0x12, // L  -> NixieTable[21]
    0x02, // M  -> NixieTable[22]
    0x78, // N  -> NixieTable[23]
    0x00, // O  -> NixieTable[24]
    0x10, // P  -> NixieTable[25]
    0x08, // Q  -> NixieTable[26]
    0x03, // R  -> NixieTable[27]
    0x46, // S  -> NixieTable[28]
    0x21, // T  -> NixieTable[29]
    0x06, // U  -> NixieTable[30]
    0x0e, // V  -> NixieTable[31]
    0xFF  // 關(guān)閉顯示 -> NixieTable[32]
};
回復(fù)

使用道具 舉報

ID:69038 發(fā)表于 2024-11-24 22:44 | 顯示全部樓層
就是典型的一維數(shù)組,沒什么好講的;
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
表示這個數(shù)組的數(shù)據(jù)格式是 unsigned char 類型的;
這個數(shù)組名字叫  Nixie_Buf ,下標從0開始到13,共有14個成員,
分別就是{0,0,1,2,3,4,5,6,7,8,9,10,11,32},按順序排列。
如果要取第一個數(shù),就 Nixie_Buf[0]=0;第二個是 Nixie_Buf[1]=0;余下類推,直到Nixie_Buf[13]=32
這樣數(shù)組常用于一大堆毫無規(guī)律,卻又反復(fù)調(diào)用的數(shù)據(jù),基本上就是以空間換效率?
當(dāng)然,在你這里因為數(shù)據(jù)量不大,效率并不差太多。
不用數(shù)組的話,可能你要用一個switch分支來賦值:
u8 Nixie_Buf;
u8 index;
switch (index)
{
case 0: Nixie_Buf=0; break;
case 1: Nixie_Buf=0; break;
case 2: Nixie_Buf=1; break;
case 3: Nixie_Buf=2; break;
.
.
case 13: Nixie_Buf=32; break;
default: break;
}
或用 if 來分支:
if (index==0) Nixie_Buf=0;
else if  (index==1) Nixie_Buf=0;
else if  (index==2) Nixie_Buf=1;
else if  (index==3) Nixie_Buf=2;
.
.
.
else if  (index==13) Nixie_Buf=32;

if..else if 超過5個,建議用switch,
當(dāng)然這也不是強推的,依個人喜好,并沒有太大的優(yōu)劣區(qū)別。
~~個人觀點,僅供參考~~
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-11-25 07:55 | 顯示全部樓層
lkc8210 發(fā)表于 2024-11-24 20:57
unsigned char NixieTable[] = {
    0xc0, // 0  -> NixieTable[0]
    0xf9, // 1  -> NixieTable[1]

一個7段數(shù)碼管,花樣還整這么多
回復(fù)

使用道具 舉報

ID:705846 發(fā)表于 2024-11-25 11:22 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-11-25 07:55
一個7段數(shù)碼管,花樣還整這么多

unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
花括號內(nèi)的數(shù)字是什么意思。
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-11-25 12:29 | 顯示全部樓層
samxon 發(fā)表于 2024-11-25 11:22
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
花括號內(nèi)的數(shù)字是什么意思。

顯示緩沖區(qū),一般都是直接定義一個比如unsigned char Nixie_Buf[14];
花括號里面的是寫代碼時預(yù)填的內(nèi)容,實際使用時這些內(nèi)容往往是隨時變化的。大概會在上電瞬間即被沖掉。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2024-11-25 16:00 | 顯示全部樓層
samxon 發(fā)表于 2024-11-25 11:22
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
花括號內(nèi)的數(shù)字是什么意思。

意思就是:
unsigned char  Nixie_Tran(unsigned char temp)
{
   if(temp != 0)
   {
         if(temp <13)    temp--;
         else temp = 32;
   }
   return temp;
}
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-11-25 17:27 | 顯示全部樓層
188610329 發(fā)表于 2024-11-25 16:00
意思就是:
unsigned char  Nixie_Tran(unsigned char temp)
{

不懂啊,給解釋一下唄
回復(fù)

使用道具 舉報

ID:705846 發(fā)表于 2024-11-25 21:35 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-11-25 12:29
顯示緩沖區(qū),一般都是直接定義一個比如unsigned char Nixie_Buf[14];
花括號里面的是寫代碼時預(yù)填的內(nèi)容 ...

也就是說花括號內(nèi)的數(shù)字可以隨便寫嗎
回復(fù)

使用道具 舉報

ID:1133081 發(fā)表于 2024-11-25 21:50 | 顯示全部樓層
unsigned char NixieTable[]是共陽數(shù)碼管段碼表對應(yīng)字符0~9、A~Z(部分字母不能顯示)和清屏0xFF。如果代碼Px=NixieTable[Nixie_Buf[11]],則顯示“A”。
回復(fù)

使用道具 舉報

ID:705846 發(fā)表于 2024-11-25 22:14 | 顯示全部樓層
WL0123 發(fā)表于 2024-11-25 21:50
unsigned char NixieTable[]是共陽數(shù)碼管段碼表對應(yīng)字符0~9、A~Z(部分字母不能顯示)和清屏0xFF。如果代碼 ...

為什么要用Px=NixieTable[Nixie_buf[11]],而不用NexieTable[11]來顯示A呢。
回復(fù)

使用道具 舉報

ID:1133081 發(fā)表于 2024-11-26 06:49 | 顯示全部樓層
samxon 發(fā)表于 2024-11-25 22:14
為什么要用Px=NixieTable[Nixie_buf[11]],而不用NexieTable[11]來顯示A呢。

數(shù)碼管段碼NixieTable[]的成員是常量,數(shù)碼管顯示緩存Nixie_Buf[]的成員通常是變量,比如存儲的是年月日時分秒。當(dāng)你編程水平達到一定高度,就能感受到用此方法編寫數(shù)碼管驅(qū)動函數(shù)會簡單高效。這是一段用于TX-1C學(xué)習(xí)板的數(shù)碼管動態(tài)顯示函數(shù)部分的示例。
  1. #define uint unsigned int                         //宏定義整型
  2. #define uchar unsigned char                 //宏定義字符型
  3. sbit dula=P2^6;                        //段
  4. sbit wela1=P2^7;                        //位
  5. uchar code table[]={                                        //數(shù)碼管0~f段碼
  6. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  7. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  8. uchar code wela[]={0x7e,0x7d,0x7b,0x77,0xef,0xdf};//數(shù)碼管位碼
  9. uchar data dis_buf[6];                                //6位數(shù)據(jù)緩存
  10. uint  Cntus=0;                                                        //2500us
  11. uchar Cnt1s=0,Cnt1min=0,hour=12;        //秒、分、時

  12. /***********分解數(shù)據(jù)位程序*************/
  13. void Separate()
  14. {
  15.         dis_buf[0]= hour/10;                        // 時十位
  16.         dis_buf[1]= hour%10;                        // 時個位
  17.         dis_buf[2]= Cnt1min/10;                        // 分十位
  18.         dis_buf[3]= Cnt1min%10;                        // 分個位
  19.         dis_buf[4]= Cnt1s/10;                        // 秒十位
  20.         dis_buf[5]= Cnt1s%10;                        // 秒個位
  21. }
  22. /**********6位數(shù)碼管動態(tài)顯示程序**********/
  23. void display()
  24. {
  25.         static uchar i=0;                        //靜態(tài)變量
  26.         P0=0x00;                                                //消隱
  27.         dula=1;                                                //鎖存
  28.         dula=0;

  29.         P0=wela[i];                                        //送位碼
  30.         wela1=1;                                                //鎖存
  31.         wela1=0;

  32.         if((i==1)||(i==3))                                //如果顯示第2、4位
  33.                 P0=table[dis_buf[i]]|0x80;  //送段碼+點
  34.         else P0=table[dis_buf[i]];                //送段碼
  35.         dula=1;                                                //鎖存
  36.         dula=0;
  37.         i++;
  38.         if(i>=6)
  39.                 i=0;
  40. }
復(fù)制代碼



回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-11-26 08:09 | 顯示全部樓層
samxon 發(fā)表于 2024-11-25 22:14
為什么要用Px=NixieTable[Nixie_buf[11]],而不用NexieTable[11]來顯示A呢。

NexieTable[11]顯示的是段碼的第12個元素大概是B,NixieTable[Nixie_buf[11]],緩沖區(qū)第12個元素的值是10,就等于NexieTable[10],是A,其他地方的代碼可以通過改變Nixie_buf里面的值,改變顯示內(nèi)容
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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