|
本帖最后由 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();
- }
- }
复制代码
|
|