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

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

QQ登錄

只需一步,快速開始

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

這一段單片機(jī)代碼什么意思?求大佬解釋

[復(fù)制鏈接]
ID:841280 發(fā)表于 2020-11-20 20:19 | 顯示全部樓層 |閱讀模式
100黑幣
  1. #include <reg52.h>

  2. sbit DULA = P2^6;
  3. sbit WELA = P2^7;

  4. unsigned char code DUTable[16] =
  5. {
  6.         0x3F,0x06,0x5B,0x4F,
  7.         0x66,0x6D,0x7D,0x07,
  8.         0x7F,0x6F,0x77,0x7C,
  9.         0x39,0x5E,0x79,0x71
  10. };

  11. unsigned char code WETable[8] =
  12. {
  13.         ~0x80,~0x40,~0x20,~0x10,
  14.         ~0x08,~0x04,~0x02,~0x01
  15. };

  16. unsigned char LedBuff[8] =
  17. {
  18.         0x3F,0x3F,0x00,0X00,
  19.         0X00,0X00,0X00,0X00
  20. };

  21. unsigned char T0RH,T0RL;
  22. bit flag1s = 0;

  23. void ConfigTimer0(unsigned char ms);
  24. void TransLED(void);

  25. void main(void)
  26. {
  27.         ConfigTimer0(1);
  28.         while(1)
  29.         {
  30.                 if(flag1s)
  31.                 {
  32.                         flag1s = 0;
  33.                         TransLED();
  34.                 }
  35.         }
  36. }

  37. void TransLED(void)
  38. {
  39.         static unsigned char num = 0;
  40.         static unsigned char led = 0;

  41.         if(0 == num)
  42.         {
  43.                 switch(led)
  44.                 {
  45.                         case 0 : led = 1; num = 9; P1 = ~0x04; break;
  46.                         case 1 : led = 2; num = 4; P1 = ~0x02; break;
  47.                         case 2 : led = 0; num = 9; P1 = ~0x01; break;
  48.                 }
  49.         }
  50.         else
  51.         {
  52.                 num--;
  53.         }

  54.         LedBuff[0] = DUTable[num/1%10];
  55.         LedBuff[1] = DUTable[num/10%10];
  56. }

  57. void ConfigTimer0(unsigned char ms)
  58. {
  59.         unsigned long tmp;

  60.         tmp = 11059200 / 12;
  61.         tmp = tmp * ms / 1000;
  62.         tmp = 65536 - tmp;
  63.         tmp += 12;

  64.         T0RH = (unsigned char)(tmp>>8);
  65.         T0RL = (unsigned char)tmp;

  66.         TH0 = T0RH;
  67.         TL0 = T0RL;
  68.         TMOD &= 0xF0;
  69.         TMOD |= 0x01;
  70.         EA = 1;
  71.         ET0 = 1;
  72.         TF0 = 0;
  73.         TR0 = 1;
  74. }

  75. void LedScan(void)
  76. {
  77.         static unsigned char i = 0;

  78.         P0 = 0x00;
  79.         DULA = 1;
  80.         DULA = 0;
  81.         P0 = WETable[i];
  82.         WELA = 1;
  83.         WELA = 0;
  84.         P0 = LedBuff[i];
  85.         DULA = 1;
  86.         DULA = 0;

  87.         i++;
  88.         if(i>=8)
  89.         {
  90.                 i = 0;
  91.         }
  92. }

  93. void InterruptTimer0(void) interrupt 1
  94. {
  95.         static unsigned int tmr1s = 0;

  96.         TH0 = T0RH;
  97.         TL0 = T0RL;

  98.         LedScan();

  99.         tmr1s++;
  100.         if(tmr1s>=1000)
  101.         {
  102.                 tmr1s = 0;
  103.                 flag1s = 1;
  104.         }
  105. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:451718 發(fā)表于 2020-11-21 10:00 | 顯示全部樓層
//------------------共陰數(shù)碼管段碼表----------------------
unsigned char code DUTable[16] =
{
        0x3F,0x06,0x5B,0x4F,
        0x66,0x6D,0x7D,0x07,
        0x7F,0x6F,0x77,0x7C,
        0x39,0x5E,0x79,0x71
};

//------------------------不顯示單個(gè)段碼表,配合上面那個(gè)共陰數(shù)碼管用的----------------
unsigned char code WETable[8] =
{
        ~0x80,~0x40,~0x20,~0x10,
        ~0x08,~0x04,~0x02,~0x01
};

//-----------------------數(shù)碼管真值表,從這個(gè)表來看,可以提供8位數(shù)碼管顯示的真值-----------------
//-----------------------其中最低兩位初值顯示為0,其他位無顯示
unsigned char LedBuff[8] =
{
        0x3F,0x3F,0x00,0X00,
        0X00,0X00,0X00,0X00
};

沒有電路圖,無法判斷
sbit DULA = P2^6;
sbit WELA = P2^7;
的實(shí)際用途,估計(jì)是給某個(gè)邏輯器件提供觸發(fā)脈沖用的。

總體從定時(shí)器的設(shè)置來看,應(yīng)該是一個(gè)帶點(diǎn)花樣顯示的秒表計(jì)時(shí)器
回復(fù)

使用道具 舉報(bào)

ID:841280 發(fā)表于 2020-11-21 10:30 | 顯示全部樓層
robinsonlin 發(fā)表于 2020-11-21 10:00
//------------------共陰數(shù)碼管段碼表----------------------
unsigned char code DUTable[16] =
{

大佬這是一個(gè)簡(jiǎn)易交通燈的代碼
哪里是定時(shí)器倒計(jì)時(shí)  那里是led燈顯示
回復(fù)

使用道具 舉報(bào)

ID:88256 發(fā)表于 2020-11-21 10:41 | 顯示全部樓層
robinsonlin 發(fā)表于 2020-11-21 10:00
//------------------共陰數(shù)碼管段碼表----------------------
unsigned char code DUTable[16] =
{

“沒有電路圖,無法判斷
sbit DULA = P2^6;
sbit WELA = P2^7;
的實(shí)際用途,估計(jì)是給某個(gè)邏輯器件提供觸發(fā)脈沖用的!

這個(gè)應(yīng)該是74HC573之類的鎖存控制腳,有可能是光匯科技的單片機(jī)學(xué)習(xí)板
回復(fù)

使用道具 舉報(bào)

ID:846847 發(fā)表于 2020-11-21 13:37 | 顯示全部樓層
前面是數(shù)碼管段碼,后面是顯示,應(yīng)該是一個(gè)計(jì)時(shí)器之類的顯示程序
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-11-21 15:07 | 顯示全部樓層
給你詳細(xì)注釋。
無標(biāo)題.jpg

  1. #include <reg52.h>

  2. sbit DULA = P2^6;//數(shù)碼管段鎖存端口
  3. sbit WELA = P2^7;//數(shù)碼管位鎖存端口

  4. unsigned char code DUTable[16] = //共陰數(shù)碼管段碼0~f數(shù)組
  5. {
  6.         0x3F,0x06,0x5B,0x4F,
  7.         0x66,0x6D,0x7D,0x07,
  8.         0x7F,0x6F,0x77,0x7C,
  9.         0x39,0x5E,0x79,0x71
  10. };

  11. unsigned char code WETable[8] = //8位共陽(yáng)數(shù)碼管位碼數(shù)組取反即是共陰
  12. {
  13.         ~0x80,~0x40,~0x20,~0x10,
  14.         ~0x08,~0x04,~0x02,~0x01
  15. };

  16. /*
  17. //等同下表
  18. unsigned char code WETable[8] = //8位共陰數(shù)碼管位碼數(shù)組
  19. {
  20.        0x7f,0xbf,0xdf,0xef
  21.        0xf7,0xfb,0xfd,0xfe,
  22. };*/

  23. unsigned char LedBuff[8] = //顯示緩存數(shù)組
  24. {
  25.         0x3F,0x3F,0x00,0X00,
  26.         0X00,0X00,0X00,0X00
  27. };

  28. unsigned char T0RH,T0RL;//中間變量
  29. bit flag1s = 0;//秒標(biāo)志

  30. void ConfigTimer0(/*unsigned char ms*/);//定時(shí)器初始化函數(shù)聲明
  31. void TransLED(void);//倒計(jì)數(shù)函數(shù)聲明

  32. void main(void)
  33. {
  34.         ConfigTimer0();//定時(shí)器初始化
  35.         while(1)
  36.         {
  37.                 if(flag1s)//如果flag1s為真
  38.                 {
  39.                         flag1s = 0;//清0復(fù)位
  40.                         TransLED();//倒計(jì)數(shù)
  41.                 }
  42.         }
  43. }
  44. //倒計(jì)數(shù)函數(shù)
  45. void TransLED(void)
  46. {
  47.         static unsigned char num = 0;//靜態(tài)局部變量
  48.         static unsigned char led = 0;//靜態(tài)局部變量
  49.         if(0 == num)//如果計(jì)數(shù)變量=0,則執(zhí)行下一輪倒計(jì)數(shù)
  50.         {
  51.                 switch(led)
  52.                 {
  53.                         case 0 : led = 1; num = 9; P1 = ~0x04; break;//第一輪倒計(jì)數(shù)num賦初值
  54.                         case 1 : led = 2; num = 4; P1 = ~0x02; break;//第二輪倒計(jì)數(shù)num賦初值
  55.                         case 2 : led = 0; num = 9; P1 = ~0x01; break;//第三輪倒計(jì)數(shù)num賦初值 建議num>10測(cè)試
  56.                 }
  57.         }
  58.         else//num大于0
  59.         {
  60.                 num--;//num自減1
  61.         }
  62.        
  63.         LedBuff[0] = DUTable[num/1%10];//分解num的個(gè)位并轉(zhuǎn)換為代碼字符保存在緩存
  64.         LedBuff[1] = DUTable[num/10%10];//分解num的十位并轉(zhuǎn)換為代碼字符保存在緩存,實(shí)際用不到,num最大是9
  65. }
  66. //定時(shí)器初始化函數(shù)
  67. void ConfigTimer0(/*unsigned char ms*/)
  68. {
  69.         //計(jì)算定時(shí)初值
  70. /*
  71.         unsigned long tmp;       
  72.         tmp = 11059200 / 12;
  73.         tmp = tmp * ms / 1000;
  74.         tmp = 65536 - tmp;
  75.         tmp += 12;
  76.        
  77.         T0RH = (unsigned char)(tmp>>8);
  78.         T0RL = (unsigned char)tmp;
  79.        
  80.         TH0 = T0RH;//設(shè)置定時(shí)高8位初值
  81.         TL0 = T0RL;//設(shè)置定時(shí)低8位初值
  82. */
  83. //        直接賦值等同于上述復(fù)雜計(jì)算
  84.         TH0 = 0xFC;                //設(shè)置定時(shí)初值1ms
  85.         TL0 = 0x66;                //設(shè)置定時(shí)初值1ms

  86.         TMOD &= 0xF0;        //TMOD寄存器低4位清0
  87.         TMOD |= 0x01;        //設(shè)置T0工作模式1
  88.         EA = 1;                        //開總中斷
  89.         ET0 = 1;                        //開T0中斷
  90.         TF0 = 0;                        //T0中斷請(qǐng)求標(biāo)志清0
  91.         TR0 = 1;                        //T0開始計(jì)時(shí)
  92. }
  93. //數(shù)碼管動(dòng)態(tài)顯示函數(shù)
  94. void LedScan(void)
  95. {
  96.         static unsigned char i = 0;//靜態(tài)局部變量
  97. //        P0分時(shí)復(fù)用,輸出段碼和位碼
  98.         P0 = 0x00;//輸出段清0碼,消除殘影
  99.         DULA = 1;//送段碼
  100.         DULA = 0;//段碼鎖存
  101.         P0 = WETable[i];//輸出位碼
  102.         WELA = 1;//送位碼
  103.         WELA = 0;//位碼鎖存
  104.         P0 = LedBuff[i];//輸出段碼
  105.         DULA = 1;//送段碼
  106.         DULA = 0;//段碼鎖存
  107.        
  108.         i++;
  109.         if(i>=8)//8位數(shù)碼管輪流顯示計(jì)數(shù)
  110.         {
  111.                 i = 0;//清0
  112.         }
  113. }

  114. void InterruptTimer0(void) interrupt 1
  115. {
  116.         static unsigned int tmr1s = 0;
  117.        
  118. //        TH0 = T0RH;
  119. //        TL0 = T0RL;

  120.         TH0 = 0xFC;                //重裝定時(shí)初值1ms
  121.         TL0 = 0x66;                //重裝定時(shí)初值1ms       
  122.         LedScan();                //運(yùn)行數(shù)碼管動(dòng)態(tài)顯示程序
  123.        
  124.         tmr1s++;                //中斷計(jì)數(shù)
  125.         if(tmr1s>=1000) //1秒
  126.         {
  127.                 tmr1s = 0;  //清0
  128.                 flag1s = 1; //1秒標(biāo)志置1
  129.         }
  130. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:553941 發(fā)表于 2020-11-21 16:02 | 顯示全部樓層
hhdsdy 發(fā)表于 2020-11-21 10:41
“沒有電路圖,無法判斷
sbit DULA = P2^6;
sbit WELA = P2^7;

對(duì),應(yīng)該是兩個(gè)573,一個(gè)段數(shù)據(jù),一個(gè)位數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

ID:841280 發(fā)表于 2020-11-24 16:58 來自手機(jī) | 顯示全部樓層
wulin 發(fā)表于 2020-11-21 15:07
給你詳細(xì)注釋。

怎么修改下代碼才能讓led閃爍
回復(fù)

使用道具 舉報(bào)

ID:841280 發(fā)表于 2020-11-24 17:17 來自手機(jī) | 顯示全部樓層
wulin 發(fā)表于 2020-11-21 15:07
給你詳細(xì)注釋。

大佬,如果我還想在用串口顯示文字怎么改代碼?
回復(fù)

使用道具 舉報(bào)

ID:311846 發(fā)表于 2020-11-25 16:26 | 顯示全部樓層
knight123. 發(fā)表于 2020-11-24 17:17
大佬,如果我還想在用串口顯示文字怎么改代碼?

%5SRO`WPO$%3HCY4Y[L4M1S.png
重定義printf函數(shù)到串口1,要先配置好串口1,同理可以換其他串口,然后調(diào)用printf函數(shù)就可以了。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人一区 | 97视频成人| 91久久久久 | 毛片网站在线观看 | aaa一区 | 精品国产乱码久久久久久丨区2区 | 亚洲欧美另类在线观看 | 国产欧美视频一区 | av福利网| 黄色免费在线观看网址 | 99爱在线免费观看 | 精品久久久久久久久久久久久久 | 久久99精品视频 | 亚洲精品乱码久久久久v最新版 | 91精品久久久久久久久 | 久久久久国产精品一区 | 免费成人av网站 | 精品欧美一区二区三区久久久 | 久草视频观看 | 欧美福利专区 | 免费黄色在线观看 | 欧美成人猛片aaaaaaa | 特黄视频 | 日韩欧美在线观看 | 亚洲午夜精品一区二区三区 | 久久综合一区二区三区 | 精品国产伦一区二区三区观看方式 | 久久99精品久久久久久青青日本 | 国产在线精品一区二区三区 | 伊人超碰在线 | heyzo在线 | 国产精品久久久久久亚洲调教 | 一区二区中文 | 日韩电影在线一区 | 1级毛片 | 国产一区二 | 久久精品在线免费视频 | 国产成人在线一区二区 | 日韩av在线不卡 | 香蕉视频在线播放 | 日韩欧美亚洲 |