欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

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

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

51單片機(jī)數(shù)碼管實(shí)驗(yàn)程序(動(dòng)態(tài)、靜態(tài)顯示)注釋很詳細(xì)

[復(fù)制鏈接]
ID:1028257 發(fā)表于 2022-5-20 17:59 | 顯示全部樓層 |閱讀模式
基于AT89C52單片機(jī)的數(shù)碼管類實(shí)驗(yàn)
電路原理圖如下
1.png

單片機(jī)源程序如下:
  1. /***************************************************************************
  2. 標(biāo)題:        數(shù)碼管的顯示
  3. 效果:        顯示00-99,動(dòng)態(tài)顯示+變化顯示
  4. ******************************************************************************/
  5. //頭文件:
  6. #include "reg51.h"

  7. //變量定義:
  8. unsigned char table[]=
  9.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  10.                                         //表:共陽(yáng)數(shù)碼管 0-9
  11. //引腳定義:               
  12. sbit SMG_q = P1^0;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(千位)
  13. sbit SMG_b = P1^1;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(百位)
  14. sbit SMG_s = P1^2;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(十位)
  15. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)

  16. //函數(shù)聲明:
  17. void display(unsigned char da);//定義顯示函數(shù),參數(shù)為顯示內(nèi)容,只顯示兩位數(shù)
  18. void delay(void);

  19. //主函數(shù),C語(yǔ)言的入口函數(shù):                        
  20. void main(void)  
  21. {
  22.         unsigned char i=0;                //作為查表的索引號(hào)
  23.         unsigned char ldata;        //變量用作0~99計(jì)數(shù)
  24.         unsigned int j;                        //此變量作為計(jì)數(shù)跳變刷新時(shí)間
  25.         while(1)
  26.         {        
  27.                 j=5000;                        
  28.                 while(j--){               
  29.                         display(ldata);        //刷新5000次,約1秒,注:在C語(yǔ)言里是沒(méi)有周期可計(jì)算的哦~~~
  30.                 }                                                
  31.                 if(ldata<99)
  32.                         ldata++;                //刷新完成約1秒,變量做加計(jì)數(shù)
  33.                 else
  34.                         ldata=0;
  35.         }
  36. }

  37. //顯示函數(shù),參數(shù)為顯示內(nèi)容,只顯示兩位數(shù)
  38. void display(unsigned char da)
  39. {
  40.         SMG_q=0;                        //選擇十位數(shù)碼管
  41.         P0=table[da/10];        //獲取十位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
  42.         delay();                        //延時(shí)
  43.         P0=0XFF;                        //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  44.         SMG_q=1;                        //關(guān)閉十位數(shù)碼管

  45.         SMG_b=0;                        //選擇個(gè)位數(shù)碼管
  46.         P0=table[da%10];        //獲取個(gè)位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
  47.         delay();                        //延時(shí)
  48.         P0=0XFF;                        //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  49.         SMG_b=1;                        //關(guān)閉個(gè)位數(shù)碼管
  50. }

  51. //延時(shí)子函數(shù),短暫延時(shí)
  52. void delay(void){               
  53.         unsigned char i=10;
  54.         while(i--);
  55. }
復(fù)制代碼
  1. /***************************************************************************
  2. 標(biāo)題:        數(shù)碼管的顯示
  3. 效果:        顯示1234,從這個(gè)例子可以學(xué)習(xí)多位數(shù)碼管的動(dòng)態(tài)顯示技術(shù)
  4. ******************************************************************************/
  5. //頭文件:
  6. #include "reg51.h"

  7. //變量定義:
  8. unsigned char table[]=
  9.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  10.                                         //表:共陽(yáng)數(shù)碼管 0-9
  11. //引腳定義:               
  12. sbit SMG_q = P1^0;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(千位)
  13. sbit SMG_b = P1^1;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(百位)
  14. sbit SMG_s = P1^2;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(十位)
  15. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)

  16. //函數(shù)聲明:
  17. void delay(void); //延時(shí)子函時(shí)

  18. //主函數(shù),C語(yǔ)言的入口函數(shù):               
  19. void main(void)  
  20. {
  21.         unsigned char i=0;        //作為查表的索引號(hào)
  22.         while(1)                        //不停的循環(huán)掃描,不掃描則不顯示或顯示不正確,即為動(dòng)態(tài)顯示,
  23.         {        //數(shù)碼管顯示 1234,可自行修改
  24.                 SMG_q=0;                //選擇千位數(shù)碼管
  25.                 P0=table[1];        //查找"1"定義好的數(shù)碼管段值與P0口輸出,顯示相應(yīng)的1
  26.                 delay();                //加入短暫延時(shí)
  27.                 P0=0XFF;                //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  28.                 SMG_q=1;                //關(guān)閉千位數(shù)碼管

  29.                 SMG_b=0;                //選擇百位數(shù)碼管
  30.                 P0=table[2];        //查找"2"定義好的數(shù)碼管段值與P0口輸出,顯示相應(yīng)的2
  31.                 delay();                //加入短暫延時(shí)
  32.                 P0=0XFF;                //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  33.                 SMG_b=1;                //關(guān)閉百位數(shù)碼管
  34.                
  35.                 SMG_s=0;                //選擇十位數(shù)碼管
  36.                 P0=table[3];        //查找"2"定義好的數(shù)碼管段值與P0口輸出,顯示相應(yīng)的2
  37.                 delay();                //加入短暫延時(shí)
  38.                 P0=0XFF;                //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  39.                 SMG_s=1;                //關(guān)閉十位數(shù)碼管

  40.                 SMG_g=0;                //選擇個(gè)位數(shù)碼管
  41.                 P0=table[4];        //查找"2"定義好的數(shù)碼管段值與P0口輸出,顯示相應(yīng)的2
  42.                 delay();                //加入短暫延時(shí)
  43.                 P0=0XFF;                //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  44.                 SMG_g=1;                //關(guān)閉個(gè)位數(shù)碼管
  45.         }
  46. }

  47. //延時(shí)子函數(shù),短暫延時(shí)
  48. void delay(void){               
  49.         unsigned char i=10;
  50.         while(i--);
  51. }
復(fù)制代碼
  1. /***************************************************************************
  2. 標(biāo)題:        數(shù)碼管的顯示
  3. 效果:        靜態(tài)顯示一位數(shù)碼管,顯示0-9
  4. ******************************************************************************/
  5. //頭文件:
  6. #include "reg51.h"

  7. //變量定義:
  8. unsigned char table[]=
  9.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  10.                                         //表:共陽(yáng)數(shù)碼管 0-9
  11. //引腳定義:               
  12. sbit SMG_q = P1^0;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(千位)
  13. sbit SMG_b = P1^1;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(百位)
  14. sbit SMG_s = P1^2;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(十位)
  15. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)

  16. //函數(shù)聲明:
  17. void delay(unsigned int d_time); //延時(shí)子函時(shí),

  18. //主函數(shù),C語(yǔ)言的入口函數(shù):               
  19. void main(void)  
  20. {
  21.         unsigned char i;                //定義循環(huán)變量
  22.         while(1)
  23.         {
  24.                 SMG_q=0;                        //選擇千位數(shù)碼管,這是靜態(tài)顯示,P0口輸出顯示,不需要刷新,也可選擇百位、十位或個(gè)位;
  25.                                                         //也可兩位或全部同時(shí)輸出顯示
  26.                 for(i=0;i<10;i++)        //循環(huán)顯示0-9
  27.                 {               
  28.                         P0=table[i];        //查表輸出數(shù)碼管段值給P0口,顯示相應(yīng)的0-9
  29.                         delay(500);                //延時(shí)
  30.                 }
  31.         }
  32. }

  33. //延時(shí)子函數(shù),參數(shù)范圍 0-65536
  34. void delay(unsigned int tmp)
  35. {
  36.         unsigned char j;
  37.         while(tmp--){               
  38.                 j=255;
  39.                 while(j--);                     
  40.         }
  41. }
復(fù)制代碼
  1. /***************************************************************************
  2. 標(biāo)題:        數(shù)碼管的顯示
  3. 效果:        靜態(tài)顯示一位數(shù)碼管,顯示一個(gè)"5"
  4. ******************************************************************************/
  5. //頭文件:
  6. #include "reg51.h"

  7. //引腳定義:               
  8. sbit SMG_q = P1^0;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(千位)
  9. sbit SMG_b = P1^1;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(百位)
  10. sbit SMG_s = P1^2;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(十位)
  11. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)

  12. //主函數(shù),C語(yǔ)言的入口函數(shù):               
  13. void main(void)  
  14. {
  15.         SMG_q=0;                //打開(kāi)千位數(shù)碼管,這是靜態(tài)顯示,P0口輸出顯示,不需要刷新,也可選擇百位、十位或個(gè)位;
  16.                                         //也可兩位或全部同時(shí)輸出顯示               
  17.         P0=0x92;                //輸出數(shù)碼管段值給P0口,顯示相應(yīng)的5,
  18.                                         //0-9的段值分別是(共陽(yáng)):0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

  19.         while(1);                //程序停止
  20.                
  21. }
復(fù)制代碼
  1. /***************************************************************************
  2. 標(biāo)題:        數(shù)碼管的顯示
  3. 效果:        顯示1234,緩沖顯示
  4. ******************************************************************************/
  5. //頭文件:
  6. #include "reg51.h"

  7. //變量定義:
  8. code unsigned char table[]=
  9.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  10.                                         //表:共陽(yáng)數(shù)碼管 0-9
  11. unsigned char l_disbuff[4]={1,2,3,4,};//顯示緩沖
  12. unsigned char l_posit=0;        //顯示位置

  13. //引腳定義:               
  14. sbit SMG_q = P1^0;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(千位)
  15. sbit SMG_b = P1^1;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(百位)
  16. sbit SMG_s = P1^2;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(十位)
  17. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)

  18. //函數(shù)聲明:
  19. void delay(unsigned int timer); //延時(shí)子函時(shí)
  20. void display();                //顯示

  21. //主函數(shù),C語(yǔ)言的入口函數(shù):               
  22. void main(void)  
  23. {
  24.         unsigned int i=10000,j=1000;
  25.         while(1)                        //不停的循環(huán)掃描,不掃描則不顯示或顯示不正確,即為動(dòng)態(tài)顯示,
  26.         {
  27.                 display();                //調(diào)用顯示緩沖內(nèi)容
  28.                 delay(10);
  29.         }
  30. }

  31. //延時(shí)子函數(shù),短暫延時(shí)
  32. void delay(unsigned int timer){               
  33.         while(timer--);
  34. }

  35. //顯示函數(shù),參數(shù)為顯示內(nèi)容
  36. void display()
  37. {
  38.         P0=0XFF;                        //
  39.         switch(l_posit){
  40.         case 0:                //選擇千位數(shù)碼管,關(guān)閉其它位
  41.                 SMG_q=0;
  42.                 SMG_b=1;        
  43.                 SMG_s=1;               
  44.                 SMG_g=1;
  45.                 P0=table[l_disbuff[0]];        //輸出顯示內(nèi)容
  46.                 break;
  47.         case 1:                //選擇百位數(shù)碼管,關(guān)閉其它位
  48.                 SMG_q=1;
  49.                 SMG_b=0;        
  50.                 SMG_s=1;               
  51.                 SMG_g=1;
  52.                 P0=table[l_disbuff[1]];
  53.                 break;
  54.         case 2:                //選擇十位數(shù)碼管,關(guān)閉其它位
  55.                 SMG_q=1;
  56.                 SMG_b=1;        
  57.                 SMG_s=0;               
  58.                 SMG_g=1;
  59.                 P0=table[l_disbuff[2]];
  60.                 break;
  61.         case 3:                //選擇個(gè)位數(shù)碼管,關(guān)閉其它位
  62.                 SMG_q=1;
  63.                 SMG_b=1;        
  64.                 SMG_s=1;               
  65.                 SMG_g=0;
  66.                 P0=table[l_disbuff[3]];
  67.                 break;
  68.         }
  69.         l_posit++;                //每調(diào)用一次將輪流顯示一位
  70.         if(l_posit>3)
  71.                 l_posit=0;        
  72. }
復(fù)制代碼

以上Keil代碼下載:
純代碼.7z (16.66 KB, 下載次數(shù): 14)

評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:262 發(fā)表于 2022-5-23 03:36 | 顯示全部樓層
注釋夠詳細(xì) 對(duì)初學(xué)者有參考價(jià)值
回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

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