Example #1
0
/* 
 * 测试触摸屏,打印触点坐标
 */       
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;
}
Example #2
0
/*
 * 使用查询方式读取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);
}