找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12C5A60S2单片机使用ADC读取IO电压用OLED显示程序

[复制链接]
跳转到指定楼层
楼主
ID:1013548 发表于 2023-5-1 18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STC12C5A60S2读取IO口0~5V的电压使用0~255范围表示电压范围
P0^6   SCLP0^7  
SDAP1.0  
ADC 通道0P1.1   ADC 通道1
单片机源程序如下:
  1. //P0^6   SCL
  2. //P0^7   SDA
  3. //P1.0   ADC 通道0
  4. //P1.1   ADC 通道1



  5. #include <STC12C5A60S2.H>
  6. #include <intrins.h>
  7. #include <oled.h>


  8. #define  uchar unsigned char
  9. #define  uint unsigned int
  10.        
  11. /*声明ADC相关寄存器 */
  12. //sfr ADC_CONTR   =   0xBC;           //ADC 控制寄存器
  13. //sfr ADC_RES     =   0xBD;           //ADC 高8位结果寄存器
  14. //sfr ADC_LOW2    =   0xBE;           //ADC 低2位结果寄存器
  15. //sfr P1ASF       =   0x9D;           //P1 辅助控制寄存器

  16. /*ADC操作的一些宏定义*/
  17. #define ADC_POWER   0x80            //ADC power control bit
  18. #define ADC_FLAG    0x10            //ADC complete flag
  19. #define ADC_START   0x08            //ADC start control bit
  20. #define ADC_SPEEDLL 0x00            //420 clocks
  21. #define ADC_SPEEDL  0x20            //280 clocks
  22. #define ADC_SPEEDH  0x40            //140 clocks
  23. #define ADC_SPEEDHH 0x60            //70 clocks



  24. void DelayUs2x(unsigned char t)
  25. {   
  26. while(--t);
  27. }


  28. void DelayMs(unsigned char t)
  29. {
  30.      
  31. while(t--)
  32. {
  33.      //大致延时1mS
  34.      DelayUs2x(245);
  35.      DelayUs2x(245);
  36. }
  37. }



  38. /**********************************************
  39. *函数名称:InitADC()
  40. *函数功能:初始化ADC
  41. *输入:无
  42. *返回:无
  43. **********************************************/
  44. void InitADC()
  45. {
  46.     P1ASF = 0xf0;                   //开启8路ADC功能 1111 0000
  47.     ADC_RES = 0;                    //清楚之前的结果
  48.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  49.     DelayMs(2);                       //ADC上电和延时
  50. }


  51. /**************************************
  52. 函数名称:GetADCResult(unsigned int ch)
  53. 功能描述:读取AD
  54. 入口参数:unsigned int ch    输入0-7分别读取AD0-AD7值
  55. 返回值:无
  56. ***************************************/
  57. unsigned char GetADCResult(unsigned char ch)
  58. {
  59.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  60.                 _nop_();                                                //查询前必须等待
  61.     _nop_();
  62.     _nop_();
  63.     _nop_();
  64.         while (!(ADC_CONTR & ADC_FLAG));//等待完成标志
  65.         ADC_CONTR &= ~ADC_FLAG;         //关闭 ADC
  66.         return ADC_RES;                 //返回ADC结果
  67. }


  68. void main()
  69. {
  70.         unsigned char temp , T ;
  71.         unsigned        int        a ,b ,c, d;                                                                                                                                                                                       
  72.         InitADC();//ADC初始化
  73.         OLED_Init();//初始化OLED  
  74.         OLED_ColorTurn(0);//0正常显示,1 反色显示
  75.   OLED_DisplayTurn(1);//0正常显示 1 屏幕翻转显示

  76.         while(1)
  77.         {
  78.                 temp = GetADCResult(0);
  79.                 T = GetADCResult(1);

  80.                 a = (temp / 1000  );//打印千位
  81.                 b = (temp % 1000 / 100  );//打印百位
  82.                 c = (temp % 100 / 10  );//打印十位
  83.                 d = (temp % 10  );//打印个位
  84.                 DelayMs(100);               
  85.                
  86.                 OLED_ShowString(53,2,"temp:",8);
  87.                 OLED_ShowNum(86,2,temp,3,8);

  88.                 OLED_ShowString(53,1,"T:",8);
  89.                 OLED_ShowNum(86,1,T,3,8);
  90.        
  91.                
  92.                
  93. //                OLED_ShowString(53,0,"a:",8);
  94. //                OLED_ShowNum(86,0,a,3,8);
  95. //               
  96. //                OLED_ShowString(53,1,"b:",8);
  97. //                OLED_ShowNum(86,1,b,3,8);
  98. //               
  99. //                OLED_ShowString(53,2,"c:",8);
  100. //                OLED_ShowNum(86,2,c,3,8);
  101.                
  102.         }
  103. }
复制代码

Keil代码下载: 试验.rar (61.67 KB, 下载次数: 45)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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