/* * 测试触摸屏,打印触点坐标 */ void Test_Ts(void) { isr_handle_array[ISR_ADC_OFT] = AdcTsIntHandle; // 设置ADC中断服务程序 INTMSK &= ~BIT_ADC; // 开启ADC总中断 INTSUBMSK &= ~(BIT_SUB_TC); // 开启INT_TC中断,即触摸屏被按下或松开时产生中断 INTSUBMSK &= ~(BIT_SUB_ADC); // 开启INT_ADC中断,即A/D转换结束时产生中断 // 使能预分频功能,设置A/D转换器的时钟 = PCLK/(49+1) ADCCON = PRESCALE_EN | PRSCVL(49); /* 采样延时时间 = (1/3.6864M)*50000 = 13.56ms * 即按下触摸屏后,再过13.56ms才采样 */ ADCDLY = 50000; wait_down_int(); /* 进入"等待中断模式",等待触摸屏被按下 */ printf("Touch the screem to test, press any key to exit\n\r"); getc(); // 屏蔽ADC中断 INTSUBMSK |= BIT_SUB_TC; INTSUBMSK |= BIT_SUB_ADC; INTMSK |= BIT_ADC; }
/* * 使用查询方式读取A/D转换值 * 输入参数: * ch: 模拟信号通道,取值为0~7 */ static int ReadAdc(int ch) { // 选择模拟通道,使能预分频功能,设置A/D转换器的时钟 = PCLK/(49+1) ADCCON = PRESCALE_EN | PRSCVL(49) | ADC_INPUT(ch); // 清除位[2],设为普通转换模式 ADCTSC &= ~(1<<2); // 设置位[0]为1,启动A/D转换 ADCCON |= ADC_START; // 当A/D转换真正开始时,位[0]会自动清0 while (ADCCON & ADC_START); // 检测位[15],当它为1时表示转换结束 while (!(ADCCON & ADC_ENDCVT)); // 读取数据 return (ADCDAT0 & 0x3ff); }