欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4107|回復: 3
收起左側

STC15W408AS單片機怎么顯示ADC電壓?我修改的51hei的程序有問題

[復制鏈接]
ID:608872 發表于 2021-5-18 16:37 | 顯示全部樓層 |閱讀模式
本帖最后由 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
1621325834(1).png
1621326381(1).png
fc2e1ba8e2555e508b6efdcbbb6172e.jpg
回復

使用道具 舉報

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 單片機教程網

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