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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:705846 發表于 2024-11-24 18:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
哪位解釋一下這個代碼詳細工作來龍去脈。謝謝。

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

//數碼管段碼表
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,
};
               

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

使用道具 舉報

沙發
ID:1109793 發表于 2024-11-24 19:01 | 只看該作者
14字節緩沖,32個段碼,不懂
回復

使用道具 舉報

板凳
ID:161164 發表于 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  // 關閉顯示 -> NixieTable[32]
};
回復

使用道具 舉報

地板
ID:69038 發表于 2024-11-24 22:44 | 只看該作者
就是典型的一維數組,沒什么好講的;
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
表示這個數組的數據格式是 unsigned char 類型的;
這個數組名字叫  Nixie_Buf ,下標從0開始到13,共有14個成員,
分別就是{0,0,1,2,3,4,5,6,7,8,9,10,11,32},按順序排列。
如果要取第一個數,就 Nixie_Buf[0]=0;第二個是 Nixie_Buf[1]=0;余下類推,直到Nixie_Buf[13]=32
這樣數組常用于一大堆毫無規律,卻又反復調用的數據,基本上就是以空間換效率?
當然,在你這里因為數據量不大,效率并不差太多。
不用數組的話,可能你要用一個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,
當然這也不是強推的,依個人喜好,并沒有太大的優劣區別。
~~個人觀點,僅供參考~~
回復

使用道具 舉報

5#
ID:1109793 發表于 2024-11-25 07:55 | 只看該作者
lkc8210 發表于 2024-11-24 20:57
unsigned char NixieTable[] = {
    0xc0, // 0  -> NixieTable[0]
    0xf9, // 1  -> NixieTable[1]

一個7段數碼管,花樣還整這么多
回復

使用道具 舉報

6#
ID:705846 發表于 2024-11-25 11:22 | 只看該作者
xiaobendan001 發表于 2024-11-25 07:55
一個7段數碼管,花樣還整這么多

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

使用道具 舉報

7#
ID:1109793 發表于 2024-11-25 12:29 | 只看該作者
samxon 發表于 2024-11-25 11:22
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
花括號內的數字是什么意思。

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

使用道具 舉報

8#
ID:624769 發表于 2024-11-25 16:00 | 只看該作者
samxon 發表于 2024-11-25 11:22
unsigned char Nixie_Buf[14]={0,0,1,2,3,4,5,6,7,8,9,10,11,32};
花括號內的數字是什么意思。

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

使用道具 舉報

9#
ID:1109793 發表于 2024-11-25 17:27 | 只看該作者
188610329 發表于 2024-11-25 16:00
意思就是:
unsigned char  Nixie_Tran(unsigned char temp)
{

不懂啊,給解釋一下唄
回復

使用道具 舉報

10#
ID:705846 發表于 2024-11-25 21:35 | 只看該作者
xiaobendan001 發表于 2024-11-25 12:29
顯示緩沖區,一般都是直接定義一個比如unsigned char Nixie_Buf[14];
花括號里面的是寫代碼時預填的內容 ...

也就是說花括號內的數字可以隨便寫嗎
回復

使用道具 舉報

11#
ID:1133081 發表于 2024-11-25 21:50 | 只看該作者
unsigned char NixieTable[]是共陽數碼管段碼表對應字符0~9、A~Z(部分字母不能顯示)和清屏0xFF。如果代碼Px=NixieTable[Nixie_Buf[11]],則顯示“A”。
回復

使用道具 舉報

12#
ID:705846 發表于 2024-11-25 22:14 | 只看該作者
WL0123 發表于 2024-11-25 21:50
unsigned char NixieTable[]是共陽數碼管段碼表對應字符0~9、A~Z(部分字母不能顯示)和清屏0xFF。如果代碼 ...

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

使用道具 舉報

13#
ID:1133081 發表于 2024-11-26 06:49 | 只看該作者
samxon 發表于 2024-11-25 22:14
為什么要用Px=NixieTable[Nixie_buf[11]],而不用NexieTable[11]來顯示A呢。

數碼管段碼NixieTable[]的成員是常量,數碼管顯示緩存Nixie_Buf[]的成員通常是變量,比如存儲的是年月日時分秒。當你編程水平達到一定高度,就能感受到用此方法編寫數碼管驅動函數會簡單高效。這是一段用于TX-1C學習板的數碼管動態顯示函數部分的示例。
  1. #define uint unsigned int                         //宏定義整型
  2. #define uchar unsigned char                 //宏定義字符型
  3. sbit dula=P2^6;                        //段
  4. sbit wela1=P2^7;                        //位
  5. uchar code table[]={                                        //數碼管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};//數碼管位碼
  9. uchar data dis_buf[6];                                //6位數據緩存
  10. uint  Cntus=0;                                                        //2500us
  11. uchar Cnt1s=0,Cnt1min=0,hour=12;        //秒、分、時

  12. /***********分解數據位程序*************/
  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位數碼管動態顯示程序**********/
  23. void display()
  24. {
  25.         static uchar i=0;                        //靜態變量
  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. }
復制代碼



回復

使用道具 舉報

14#
ID:1109793 發表于 2024-11-26 08:09 | 只看該作者
samxon 發表于 2024-11-25 22:14
為什么要用Px=NixieTable[Nixie_buf[11]],而不用NexieTable[11]來顯示A呢。

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区a | 亚洲国产精品一区在线观看 | 国产a级黄色录像 | 成人h动漫精品一区二区器材 | 99精品观看 | 亚洲人a | 成人欧美日韩一区二区三区 | 日韩在线视频一区 | 亚洲精品免费观看 | 欧美日韩亚洲在线 | 精品一区二区三区在线观看国产 | 国产精品综合色区在线观看 | 久久精品免费一区二区三 | 亚洲精品乱码8久久久久久日本 | 日本不卡一区二区三区在线观看 | 国产色在线 | 精品一区二区在线观看 | 欧美自拍视频 | 日韩中文字幕一区二区 | 成人av片在线观看 | 亚洲狠狠 | 男人天堂999 | 久久精品国产亚洲 | 日韩精品视频在线观看一区二区三区 | 亚洲成人日韩 | 亚洲国产欧美一区二区三区久久 | 国产欧美一区二区精品久导航 | 四虎永久免费在线 | 亚洲一区二区中文字幕 | 天天草狠狠干 | 天天拍夜夜爽 | 欧美a在线看 | 91麻豆精品国产91久久久久久 | 亚洲毛片在线观看 | 免费人成在线观看网站 | 黄网免费 | 伊人网91 | 中文字幕在线一区 | 国产精品18hdxxxⅹ在线 | 成人国产在线视频 | 国产精品久久久久久久午夜 |