找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15W408AS单片机怎么显示ADC电压?我修改的51hei的程序有问题

[复制链接]
跳转到指定楼层
楼主
本帖最后由 yinnan128 于 2021-5-18 20:06 编辑

坛子里参考别人的帖子,自己修改了些。现在的问题是ADC1.2这个引脚,无论上电前或上电后,悬空、短路GND,显示的都是VCC的电压。不知道程序哪里有问题
  1. u8  BT_V[2];
  2. u32 ADC_V;

  3. /*******************************************************************************
  4. * 功  能:初始化ADC
  5. * 描  述:   
  6. *******************************************************************************/
  7. void ADC_init()               
  8. {
  9. P1ASF=0X04;//把P1.2设置为模拟功能
  10. P1M1=0X04;//把P1.2引脚工作模式设为高阻抗
  11. P1M0=0X00;//把P1.2引脚工作模式设为高阻抗
  12. CLK_DIV |= 0x20; //00100000、ADRJ 为 1,ADC_RES 存放高两位结果,ADC_RESL 存放低 8 位结果
  13. ADC_RES=0;//清除高位转换结果寄存器
  14. ADC_RESL=0;//清除低位转换结果寄存器
  15.         
  16. }

  17. /*******************************************************************************
  18. * 功  能:读取ADC
  19. * 描  述:   
  20. *******************************************************************************/
  21. void ADC_duqu()
  22. {
  23. ADC_CONTR = 0x88;//启动ADC电源和设置P1.2口为ADC输入并且540个时钟转换一次
  24. delay_ms(1);
  25. while(!(ADC_CONTR&0X10));        //等待转换完成
  26. ADC_V=ADC_RES*256+ADC_RESL;     //获取ADC结果
  27. ADC_CONTR&=~0x10;
  28. }
  29. /*******************************************************************************
  30. * 功  能:ADC电压转换
  31. * 描  述:   
  32. *******************************************************************************/
  33. void ADC_zhuanhuan()
  34. {
  35. ADC_V=ADC_V*409/1024;//10位ADC,vcc4.09v
  36. BT_V[0]=ADC_V/100%10+0x30;
  37. BT_V[1]=ADC_V/10%10+0x30;
  38. BT_V[2]=ADC_V%10+0x30;
  39. }
  40. u32 ADC;
  41. /*******************************************************************************
  42. * 功  能:主函数
  43. * 描  述:   
  44. *******************************************************************************/
  45. void main ()
  46. {  
  47.           MOS_OUT=0;
  48.           ADC_init(); //初始化ADC
  49.            lcd_init() ;//初始化LCD  
  50.     delay_ms(10);        
  51.           LCD1602_Custom();//显示自定义字符
  52.     HJ_CS();//显示焊机参数
  53.           write_com(0x02);  //光标复位
  54.     while (1)
  55.                 {
  56.                         ADC++;
  57.                         if(ADC==30000)
  58.                         {
  59.                          ADC=0;
  60.                          ADC_duqu();//读取ADC结果
  61.                          ADC_zhuanhuan();//电压转换计算
  62.                          LCD_shuaxin();LCD显示转换电压
  63.                         }
  64.                         KEY();
  65.                         MOS_A_Trigger();
  66.                         MOS_M_Trigger();
  67.                 }
  68. }
复制代码



1621325610(1).png (346.09 KB, 下载次数: 107)

1621325610(1).png

1621325834(1).png (358.29 KB, 下载次数: 104)

1621325834(1).png

1621326381(1).png (96.66 KB, 下载次数: 100)

1621326381(1).png

fc2e1ba8e2555e508b6efdcbbb6172e.jpg (93.4 KB, 下载次数: 94)

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

使用道具 举报

沙发
ID:47286 发表于 2021-5-18 19:52 | 只看该作者
大概扫了一眼 感觉你获取RES的方法不对 10位不是高8位+低2位 高位移位后再+低位 如果不移位 就一直是8位的值 而且结果不对 还要看一下是左对齐还是右对齐 这个具体怎么设置你看手册就好 我自己写的时候也是先查手册 反正一个是高位左移8位+低位 一个是高位左移2位+低位 这点手册上写的挺清除的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:213173 发表于 2021-5-19 06:30 | 只看该作者
转换时没有指定P1.2口,默认P1.0,P1.0如悬空当然是高电平,所以始终显示VCC。
ADC_CONTR = 0x8a;//开启ADC电源0x80,540个时钟转换0x00,启动转换0x08,设置P1.2为ADC输入口0x02
回复

使用道具 举报

地板
ID:608872 发表于 2021-5-19 14:48 | 只看该作者
wulin 发表于 2021-5-19 06:30
转换时没有指定P1.2口,默认P1.0,P1.0如悬空当然是高电平,所以始终显示VCC。
ADC_CONTR = 0x8a;//开启AD ...

谢谢,是端口搞错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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