找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7073|回复: 4
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
学习萝莉的教程制作的电压显示器,处于学习阶段。用到的材料:STC15W408AS DIP28 单片机   数码管 四位共阳   可调电阻 10K


效果:


代码:
  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.                                        
  17. sbit DA=P2^4;                        //数码管每个引脚
  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;                        //四个数码管的引脚定义          用于控制哪个数码管亮
  26. sbit B2=P2^2;
  27. sbit B3=P3^3;
  28. sbit B4=P3^4;

  29. void main()
  30. {
  31.    unsigned int i;//用于存储临时数据
  32.    P2M0=0x1B;                //需要高电平大电流的引脚 2.4、2.3、2.1、2.0,填入数值0001 1011
  33.    P3M0=0xE4;                //需要高电平大电流的引脚 3.7、3.6、3.5、3.2,填入数值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直接用相应的数字做参数,显示1到9 加个点 用1到9乘以10做参数 0加一个点用11做参数
  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毫秒函数
  213. {
  214.         while(n)         
  215.         {
  216.                 Delay1ms();
  217.                 n=n-1;//每循环一次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毫秒函数
  231. {
  232.         while(n)         
  233.         {
  234.                 Delay1ms();
  235.                 n=n-1;//每循环一次n减小1
  236.         }   
  237. }
复制代码

资料.rar (1.61 KB, 下载次数: 31)

评分

参与人数 2黑币 +105 收起 理由
紫电1 + 5 很给力!萝丽的教程我也在关注,
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:146949 发表于 2017-2-14 00:11 | 只看该作者
我也研究过STC单片机的ADC,你这个是8位的ADC转换程序。我给你一个10位ADC转换程序吧,可以做1024级输出的,配分压电阻可做10.24V以内-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转换完成
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC
        return (ADC_RES*4+ADC_LOW2);//1024格换算
}
回复

使用道具 举报

板凳
ID:163392 发表于 2017-2-14 09:04 | 只看该作者
wosiyabo 发表于 2017-2-14 00:11
我也研究过STC单片机的ADC,你这个是8位的ADC转换程序。我给你一个10位ADC转换程序吧,可以做1024级输出的 ...

谢谢了,正是我需要的。
回复

使用道具 举报

地板
ID:127462 发表于 2017-8-20 08:15 | 只看该作者
学习一下,学习一下,谢谢
回复

使用道具 举报

5#
ID:185353 发表于 2017-12-17 13:37 | 只看该作者

学习一下,学习一下,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表