找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8223|回復: 4
收起左側(cè)

單片機電壓顯示器制作 學習蘿莉的課程設(shè)計作品 用于測試電壓

[復制鏈接]
ID:163392 發(fā)表于 2017-2-13 17:56 | 顯示全部樓層 |閱讀模式
學習蘿莉的教程制作的電壓顯示器,處于學習階段。用到的材料:STC15W408AS DIP28 單片機   數(shù)碼管 四位共陽   可調(diào)電阻 10K


效果: IMG_20170213_173256.jpg IMG_20170213_173314.jpg IMG_20170213_173403.jpg IMG_20170213_173431.jpg IMG_20170213_173455.jpg IMG_20170213_173526.jpg


代碼:
  1. //用于測試電壓的     用的單片機是 STC15F408AS
  2. #include <reg51.h>
  3. #include<intrins.h>
  4. void Display(unsigned int num);//用于數(shù)碼管顯示具體數(shù)字  顯示0到9直接用相應(yīng)的數(shù)字做參數(shù),顯示1到9 加個點 用1到9乘以10做參數(shù) 0加一個點用11做參數(shù)
  5. void Display_num(unsigned int num,unsigned char weizhi); // 用于確認那個數(shù)碼管顯示數(shù)字。  第一參數(shù)num是要顯示的數(shù)字, 第二個參數(shù)weizhi是要在哪個數(shù)碼管顯示(最左邊為1,最右邊為4)
  6. void Delay1ms();                //@12.000MHz
  7. void delay_n_ms(unsigned int n);//延時n毫秒函數(shù)
  8. void Delay1us();                //@12.000MHz
  9. void delay_n_us(unsigned int n);//延時微秒函數(shù)
  10. unsigned int a; //保存模數(shù)轉(zhuǎn)換后的數(shù)據(jù)

  11. sfr P2M0=0x96;     //聲明 P2引腳模式寄存器
  12. sfr P3M0=0xb2;     //聲明 P3引腳模式寄存器
  13. sfr P1ASF=0x9D;    //聲明 P1口模擬功能寄存器  p1.7開啟模擬功能
  14. sfr ADC_RES=0xBD;  //聲明 ADC轉(zhuǎn)換結(jié)果寄存器
  15. sfr ADC_CONTR=0xBC;//聲明 ADC控制寄存器

  16.                                        
  17. sbit DA=P2^4;                        //數(shù)碼管每個引腳
  18. sbit DB=P3^2;
  19. sbit DC=P3^6;
  20. sbit DD=P2^0;
  21. sbit DE=P2^1;
  22. sbit DF=P2^3;
  23. sbit DG=P3^5;
  24. sbit DP=P3^7;

  25. sbit B1=P2^5;                        //四個數(shù)碼管的引腳定義          用于控制哪個數(shù)碼管亮
  26. sbit B2=P2^2;
  27. sbit B3=P3^3;
  28. sbit B4=P3^4;

  29. void main()
  30. {
  31.    unsigned int i;//用于存儲臨時數(shù)據(jù)
  32.    P2M0=0x1B;                //需要高電平大電流的引腳 2.4、2.3、2.1、2.0,填入數(shù)值0001 1011
  33.    P3M0=0xE4;                //需要高電平大電流的引腳 3.7、3.6、3.5、3.2,填入數(shù)值1110 0100
  34.    B1=B2=B3=B4=0;

  35.    
  36.         
  37.   while(1)
  38.   {
  39.     delay_n_ms(2);
  40.     P1ASF=0x80;
  41.         ADC_CONTR=0X88+7;
  42.         a=ADC_RES;
  43.         a=a*100;
  44.         i=a/5100;
  45.         //顯示個位
  46.         if (i==0) //如果是零點幾伏就顯示 零點
  47.         {
  48.            Display_num(11,3);
  49.         }
  50.         else
  51.         {
  52.            Display_num(i*10,3);
  53.         }
  54.          delay_n_us(20);
  55.         //顯示十分位
  56.         i=a%5100/510;
  57.         Display_num(i,4);
  58.          delay_n_us(10);
  59.          
  60.   }
  61.   
  62. }
  63. void Display(unsigned int num) //顯示0到9直接用相應(yīng)的數(shù)字做參數(shù),顯示1到9 加個點 用1到9乘以10做參數(shù) 0加一個點用11做參數(shù)
  64. {
  65.    switch(num)
  66.         {
  67.                  case 0:
  68.                      {
  69.                          DA=0;  DB=0;   DC=0;          DD=0;   DE=0; DF=0; DG=1;      DP=1;         //顯示0        
  70.                          break;         
  71.                          }
  72.              case 1:
  73.                      {
  74.                          DA=1;  DB=0;   DC=0;          DD=1;  DE=1; DF=1;   DG=1;      DP=1;         //顯示1
  75.                          break;                  
  76.                          }
  77.                  case 2:
  78.                      {
  79.                          DA=0;  DB=0;   DC=1;          DD=0;   DE=0;  DF=1;          DG=0;     DP=1;         //顯示2                  
  80.                          break;
  81.                          }
  82.                  case 3:
  83.                      {
  84.                          DA=0;  DB=0;    DC=0;          DD=0;    DE=1; DF=1;         DG=0;     DP=1;         //顯示3                  
  85.                          break;
  86.                          }
  87.                  case 4:
  88.                      {
  89.                          DA=1;  DB=0;  DC=0;          DD=1;    DE=1;  DF=0;           DG=0;     DP=1;         //顯示4                  
  90.                          break;
  91.                          }
  92.                  case 5:
  93.                      {
  94.                          DA=0;  DB=1;     DC=0;          DD=0;   DE=1;   DF=0;           DG=0;   DP=1;         //顯示5                  
  95.                          break;
  96.                          }
  97.                  case 6:
  98.                      {
  99.                          DA=0;  DB=1;     DC=0;          DD=0;  DE=0;  DF=0;          DG=0;    DP=1;         //顯示6                  
  100.                          break;
  101.                          }
  102.                  case 7:
  103.                      {
  104.                          DA=0;  DB=0;   DC=0;          DD=1;   DE=1;  DF=1;          DG=1;     DP=1;         //顯示7                  
  105.                          break;
  106.                          }
  107.                  case 8:
  108.                      {
  109.                          DA=0;  DB=0;    DC=0;          DD=0;  DE=0;  DF=0;          DG=0;     DP=1;         //顯示8                  
  110.                          break;
  111.                          }
  112.                  case 9:
  113.                      {
  114.                          DA=0;  DB=0;  DC=0;          DD=0;   DE=1; DF=0;           DG=0;      DP=1;         //顯示9                  
  115.                          break;
  116.                          }
  117.                  
  118.              case 10:
  119.                      {
  120.                          DA=1;  DB=0;   DC=0;          DD=1;  DE=1; DF=1;   DG=1;      DP=0;         //顯示1加個點
  121.                          break;                  
  122.                          }
  123.                 case 11:
  124.                      {
  125.                          DA=0;  DB=0;   DC=0;          DD=0;   DE=0; DF=0; DG=1;      DP=0;         //顯示0        加個點
  126.                          break;         
  127.                          }
  128.                  case 20:
  129.                      {
  130.                          DA=0;  DB=0;   DC=1;          DD=0;   DE=0;  DF=1;          DG=0;     DP=0;         //顯示2        加個點         
  131.                          break;
  132.                          }
  133.                  case 30:
  134.                      {
  135.                          DA=0;  DB=0;    DC=0;          DD=0;    DE=1; DF=1;         DG=0;     DP=0;         //顯示3        加個點         
  136.                          break;
  137.                          }
  138.                  case 40:
  139.                      {
  140.                          DA=1;  DB=0;  DC=0;          DD=1;    DE=1;  DF=0;           DG=0;     DP=0;         //顯示4        加個點         
  141.                          break;
  142.                          }
  143.                  case 50:
  144.                      {
  145.                          DA=0;  DB=1;     DC=0;          DD=0;   DE=1;   DF=0;           DG=0;   DP=0;         //顯示5        加個點         
  146.                          break;
  147.                          }
  148.                  case 60:
  149.                      {
  150.                          DA=0;  DB=1;     DC=0;          DD=0;  DE=0;  DF=0;          DG=0;    DP=0;         //顯示6        加個點         
  151.                          break;
  152.                          }
  153.                  case 70:
  154.                      {
  155.                          DA=0;  DB=0;   DC=0;          DD=1;   DE=1;  DF=1;          DG=1;     DP=0;         //顯示7        加個點         
  156.                          break;
  157.                          }
  158.                  case 80:
  159.                      {
  160.                          DA=0;  DB=0;    DC=0;          DD=0;  DE=0;  DF=0;          DG=0;     DP=0;         //顯示8        加個點         
  161.                          break;
  162.                          }
  163.                  case 90:
  164.                      {
  165.                          DA=0;  DB=0;  DC=0;          DD=0;   DE=1; DF=0;           DG=0;      DP=1;         //顯示9        加個點         
  166.                          break;
  167.                          }
  168.                  default :
  169.                      {
  170.                           DA=1;  DB=1;   DC=1;          DD=1;   DE=1;  DF=1;          DG=1;     DP=1;         //全滅         
  171.                          break;
  172.                          }
  173.         }
  174. }

  175. void Display_num(unsigned int num,unsigned char weizhi)
  176. {
  177.    switch(weizhi)
  178.    {
  179.       case 1:
  180.                {
  181.                         B1=1; B4=B2=B3=0;
  182.                                   Display(num);
  183.                                 break;
  184.                         }
  185.            case 2:
  186.                {
  187.                         B2=1; B1=B3=B4=0;
  188.                                   Display(num);
  189.                                 break;
  190.                         }
  191.             case 3:
  192.                {
  193.                         B3=1; B1=B2=B4=0;
  194.                                   Display(num);
  195.                                 break;
  196.                         }
  197.                  case 4:
  198.                {
  199.                         B4=1; B1=B2=B3=0;
  200.                                   Display(num);
  201.                                 break;
  202.                         }


  203.     }  
  204. }
  205. void Delay1us()                //@12.000MHz
  206. {
  207.         _nop_();
  208.         _nop_();
  209.         _nop_();
  210.         _nop_();
  211. }
  212. void delay_n_us(unsigned int n) //延時n毫秒函數(shù)
  213. {
  214.         while(n)         
  215.         {
  216.                 Delay1ms();
  217.                 n=n-1;//每循環(huán)一次n減小1
  218.         }   
  219. }

  220. void Delay1ms()                //@12.000MHz
  221. {
  222.         unsigned char i, j;

  223.         i = 12;
  224.         j = 169;
  225.         do
  226.         {
  227.                 while (--j);
  228.         } while (--i);
  229. }

  230. void delay_n_ms(unsigned int n) //延時n毫秒函數(shù)
  231. {
  232.         while(n)         
  233.         {
  234.                 Delay1ms();
  235.                 n=n-1;//每循環(huán)一次n減小1
  236.         }   
  237. }
復制代碼

資料.rar (1.61 KB, 下載次數(shù): 36)

評分

參與人數(shù) 2黑幣 +105 收起 理由
紫電1 + 5 很給力!蘿麗的教程我也在關(guān)注,
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:146949 發(fā)表于 2017-2-14 00:11 | 顯示全部樓層
我也研究過STC單片機的ADC,你這個是8位的ADC轉(zhuǎn)換程序。我給你一個10位ADC轉(zhuǎn)換程序吧,可以做1024級輸出的,配分壓電阻可做10.24V以內(nèi)-1%精度。
uint GetADCResult(uchar ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //等待4個NOP
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC
        return (ADC_RES*4+ADC_LOW2);//1024格換算
}
回復

使用道具 舉報

ID:163392 發(fā)表于 2017-2-14 09:04 | 顯示全部樓層
wosiyabo 發(fā)表于 2017-2-14 00:11
我也研究過STC單片機的ADC,你這個是8位的ADC轉(zhuǎn)換程序。我給你一個10位ADC轉(zhuǎn)換程序吧,可以做1024級輸出的 ...

謝謝了,正是我需要的。
回復

使用道具 舉報

ID:127462 發(fā)表于 2017-8-20 08:15 | 顯示全部樓層
學習一下,學習一下,謝謝
回復

使用道具 舉報

ID:185353 發(fā)表于 2017-12-17 13:37 | 顯示全部樓層

學習一下,學習一下,謝謝
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表