|
本帖最后由 yinnan128 于 2021-5-18 20:06 編輯
壇子里參考別人的帖子,自己修改了些。現在的問題是ADC1.2這個引腳,無論上電前或上電后,懸空、短路GND,顯示的都是VCC的電壓。不知道程序哪里有問題
- u8 BT_V[2];
- u32 ADC_V;
- /*******************************************************************************
- * 功 能:初始化ADC
- * 描 述:
- *******************************************************************************/
- void ADC_init()
- {
- P1ASF=0X04;//把P1.2設置為模擬功能
- P1M1=0X04;//把P1.2引腳工作模式設為高阻抗
- P1M0=0X00;//把P1.2引腳工作模式設為高阻抗
- CLK_DIV |= 0x20; //00100000、ADRJ 為 1,ADC_RES 存放高兩位結果,ADC_RESL 存放低 8 位結果
- ADC_RES=0;//清除高位轉換結果寄存器
- ADC_RESL=0;//清除低位轉換結果寄存器
-
- }
- /*******************************************************************************
- * 功 能:讀取ADC
- * 描 述:
- *******************************************************************************/
- void ADC_duqu()
- {
- ADC_CONTR = 0x88;//啟動ADC電源和設置P1.2口為ADC輸入并且540個時鐘轉換一次
- delay_ms(1);
- while(!(ADC_CONTR&0X10)); //等待轉換完成
- ADC_V=ADC_RES*256+ADC_RESL; //獲取ADC結果
- ADC_CONTR&=~0x10;
- }
- /*******************************************************************************
- * 功 能:ADC電壓轉換
- * 描 述:
- *******************************************************************************/
- void ADC_zhuanhuan()
- {
- ADC_V=ADC_V*409/1024;//10位ADC,vcc4.09v
- BT_V[0]=ADC_V/100%10+0x30;
- BT_V[1]=ADC_V/10%10+0x30;
- BT_V[2]=ADC_V%10+0x30;
- }
- u32 ADC;
- /*******************************************************************************
- * 功 能:主函數
- * 描 述:
- *******************************************************************************/
- void main ()
- {
- MOS_OUT=0;
- ADC_init(); //初始化ADC
- lcd_init() ;//初始化LCD
- delay_ms(10);
- LCD1602_Custom();//顯示自定義字符
- HJ_CS();//顯示焊機參數
- write_com(0x02); //光標復位
- while (1)
- {
- ADC++;
- if(ADC==30000)
- {
- ADC=0;
- ADC_duqu();//讀取ADC結果
- ADC_zhuanhuan();//電壓轉換計算
- LCD_shuaxin();LCD顯示轉換電壓
- }
- KEY();
- MOS_A_Trigger();
- MOS_M_Trigger();
- }
- }
復制代碼
|
|