分享

单片机电压显示器制作 学习萝莉的课程设计作品 用于测试电压

 共同成长888 2019-12-30
学习萝莉的教程制作的电压显示器,处于学习阶段。用到的材料:STC15W408AS DIP28 单片机   数码管 四位共阳   可调电阻 10K


效果:IMG_20170213_173256.jpgIMG_20170213_173314.jpgIMG_20170213_173403.jpgIMG_20170213_173431.jpgIMG_20170213_173455.jpgIMG_20170213_173526.jpg


代码:
  1. //用于测试电压的     用的单片机是 STC15F408AS

  2. #include <reg51.h>

  3. #include<intrins.h>

  4. void Display(unsigned int num);//用于数码管显示具体数字  显示0到9直接用相应的数字做参数,显示1到9 加个点 用1到9乘以10做参数 0加一个点用11做参数

  5. void Display_num(unsigned int num,unsigned char weizhi); // 用于确认那个数码管显示数字。  第一参数num是要显示的数字, 第二个参数weizhi是要在哪个数码管显示(最左边为1,最右边为4)

  6. void Delay1ms();                //@12.000MHz

  7. void delay_n_ms(unsigned int n);//延时n毫秒函数

  8. void Delay1us();                //@12.000MHz

  9. void delay_n_us(unsigned int n);//延时微秒函数

  10. unsigned int a; //保存模数转换后的数据

  11. sfr P2M0=0x96;     //声明 P2引脚模式寄存器

  12. sfr P3M0=0xb2;     //声明 P3引脚模式寄存器

  13. sfr P1ASF=0x9D;    //声明 P1口模拟功能寄存器  p1.7开启模拟功能

  14. sfr ADC_RES=0xBD;  //声明 ADC转换结果寄存器

  15. sfr ADC_CONTR=0xBC;//声明 ADC控制寄存器

  16. sbit DA=P2^4;                        //数码管每个引脚

  17. sbit DB=P3^2;

  18. sbit DC=P3^6;

  19. sbit DD=P2^0;

  20. sbit DE=P2^1;

  21. sbit DF=P2^3;

  22. sbit DG=P3^5;

  23. sbit DP=P3^7;

  24. sbit B1=P2^5;                        //四个数码管的引脚定义          用于控制哪个数码管亮

  25. sbit B2=P2^2;

  26. sbit B3=P3^3;

  27. sbit B4=P3^4;

  28. void main()

  29. {

  30.    unsigned int i;//用于存储临时数据

  31.    P2M0=0x1B;                //需要高电平大电流的引脚 2.4、2.3、2.1、2.0,填入数值0001 1011

  32.    P3M0=0xE4;                //需要高电平大电流的引脚 3.7、3.6、3.5、3.2,填入数值1110 0100

  33.    B1=B2=B3=B4=0;

  34.   while(1)

  35.   {

  36.     delay_n_ms(2);

  37.     P1ASF=0x80;

  38.         ADC_CONTR=0X88+7;

  39.         a=ADC_RES;

  40.         a=a*100;

  41.         i=a/5100;

  42.         //显示个位

  43.         if (i==0) //如果是零点几伏就显示 零点

  44.         {

  45.            Display_num(11,3);

  46.         }

  47.         else

  48.         {

  49.            Display_num(i*10,3);

  50.         }

  51.          delay_n_us(20);

  52.         //显示十分位

  53.         i=a%5100/510;

  54.         Display_num(i,4);

  55.          delay_n_us(10);

  56.   }

  57. }

  58. void Display(unsigned int num) //显示0到9直接用相应的数字做参数,显示1到9 加个点 用1到9乘以10做参数 0加一个点用11做参数

  59. {

  60.    switch(num)

  61.         {

  62.                  case 0:

  63.                      {

  64.                          DA=0;  DB=0;   DC=0;          DD=0;   DE=0; DF=0; DG=1;      DP=1;         //显示0        

  65.                          break;         

  66.                          }

  67.              case 1:

  68.                      {

  69.                          DA=1;  DB=0;   DC=0;          DD=1;  DE=1; DF=1;   DG=1;      DP=1;         //显示1

  70.                          break;                  

  71.                          }

  72.                  case 2:

  73.                      {

  74.                          DA=0;  DB=0;   DC=1;          DD=0;   DE=0;  DF=1;          DG=0;     DP=1;         //显示2                  

  75.                          break;

  76.                          }

  77.                  case 3:

  78.                      {

  79.                          DA=0;  DB=0;    DC=0;          DD=0;    DE=1; DF=1;         DG=0;     DP=1;         //显示3                  

  80.                          break;

  81.                          }

  82.                  case 4:

  83.                      {

  84.                          DA=1;  DB=0;  DC=0;          DD=1;    DE=1;  DF=0;           DG=0;     DP=1;         //显示4                  

  85.                          break;

  86.                          }

  87.                  case 5:

  88.                      {

  89.                          DA=0;  DB=1;     DC=0;          DD=0;   DE=1;   DF=0;           DG=0;   DP=1;         //显示5                  

  90.                          break;

  91.                          }

  92.                  case 6:

  93.                      {

  94.                          DA=0;  DB=1;     DC=0;          DD=0;  DE=0;  DF=0;          DG=0;    DP=1;         //显示6                  

  95.                          break;

  96.                          }

  97.                  case 7:

  98.                      {

  99.                          DA=0;  DB=0;   DC=0;          DD=1;   DE=1;  DF=1;          DG=1;     DP=1;         //显示7                  

  100.                          break;

  101.                          }

  102.                  case 8:

  103.                      {

  104.                          DA=0;  DB=0;    DC=0;          DD=0;  DE=0;  DF=0;          DG=0;     DP=1;         //显示8                  

  105.                          break;

  106.                          }

  107.                  case 9:

  108.                      {

  109.                          DA=0;  DB=0;  DC=0;          DD=0;   DE=1; DF=0;           DG=0;      DP=1;         //显示9                  

  110.                          break;

  111.                          }

  112.              case 10:

  113.                      {

  114.                          DA=1;  DB=0;   DC=0;          DD=1;  DE=1; DF=1;   DG=1;      DP=0;         //显示1加个点

  115.                          break;                  

  116.                          }

  117.                 case 11:

  118.                      {

  119.                          DA=0;  DB=0;   DC=0;          DD=0;   DE=0; DF=0; DG=1;      DP=0;         //显示0        加个点

  120.                          break;         

  121.                          }

  122.                  case 20:

  123.                      {

  124.                          DA=0;  DB=0;   DC=1;          DD=0;   DE=0;  DF=1;          DG=0;     DP=0;         //显示2        加个点         

  125.                          break;

  126.                          }

  127.                  case 30:

  128.                      {

  129.                          DA=0;  DB=0;    DC=0;          DD=0;    DE=1; DF=1;         DG=0;     DP=0;         //显示3        加个点         

  130.                          break;

  131.                          }

  132.                  case 40:

  133.                      {

  134.                          DA=1;  DB=0;  DC=0;          DD=1;    DE=1;  DF=0;           DG=0;     DP=0;         //显示4        加个点         

  135.                          break;

  136.                          }

  137.                  case 50:

  138.                      {

  139.                          DA=0;  DB=1;     DC=0;          DD=0;   DE=1;   DF=0;           DG=0;   DP=0;         //显示5        加个点         

  140.                          break;

  141.                          }

  142.                  case 60:

  143.                      {

  144.                          DA=0;  DB=1;     DC=0;          DD=0;  DE=0;  DF=0;          DG=0;    DP=0;         //显示6        加个点         

  145.                          break;

  146.                          }

  147.                  case 70:

  148.                      {

  149.                          DA=0;  DB=0;   DC=0;          DD=1;   DE=1;  DF=1;          DG=1;     DP=0;         //显示7        加个点         

  150.                          break;

  151.                          }

  152.                  case 80:

  153.                      {

  154.                          DA=0;  DB=0;    DC=0;          DD=0;  DE=0;  DF=0;          DG=0;     DP=0;         //显示8        加个点         

  155.                          break;

  156.                          }

  157.                  case 90:

  158.                      {

  159.                          DA=0;  DB=0;  DC=0;          DD=0;   DE=1; DF=0;           DG=0;      DP=1;         //显示9        加个点         

  160.                          break;

  161.                          }

  162.                  default :

  163.                      {

  164.                           DA=1;  DB=1;   DC=1;          DD=1;   DE=1;  DF=1;          DG=1;     DP=1;         //全灭         

  165.                          break;

  166.                          }

  167.         }

  168. }

  169. void Display_num(unsigned int num,unsigned char weizhi)

  170. {

  171.    switch(weizhi)

  172.    {

  173.       case 1:

  174.                {

  175.                         B1=1; B4=B2=B3=0;

  176.                                   Display(num);

  177.                                 break;

  178.                         }

  179.            case 2:

  180.                {

  181.                         B2=1; B1=B3=B4=0;

  182.                                   Display(num);

  183.                                 break;

  184.                         }

  185.             case 3:

  186.                {

  187.                         B3=1; B1=B2=B4=0;

  188.                                   Display(num);

  189.                                 break;

  190.                         }

  191.                  case 4:

  192.                {

  193.                         B4=1; B1=B2=B3=0;

  194.                                   Display(num);

  195.                                 break;

  196.                         }

  197.     }  

  198. }

  199. void Delay1us()                //@12.000MHz

  200. {

  201.         _nop_();

  202.         _nop_();

  203.         _nop_();

  204.         _nop_();

  205. }

  206. void delay_n_us(unsigned int n) //延时n毫秒函数

  207. {

  208.         while(n)         

  209.         {

  210.                 Delay1ms();

  211.                 n=n-1;//每循环一次n减小1

  212.         }   

  213. }

  214. void Delay1ms()                //@12.000MHz

  215. {

  216.         unsigned char i, j;

  217.         i = 12;

  218.         j = 169;

  219.         do

  220.         {

  221.                 while (--j);

  222.         } while (--i);

  223. }

  224. void delay_n_ms(unsigned int n) //延时n毫秒函数

  225. {

  226.         while(n)         

  227.         {

  228.                 Delay1ms();

  229.                 n=n-1;//每循环一次n减小1

  230.         }   

  231. }复制代码




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多