微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 咱们的ADC0809电压表

咱们的ADC0809电压表

时间:11-28 来源:互联网 点击:

  • nt)*100);

    }

    ///////定时器初始化函数//////

    void timer_init()

    {

    IE = 0x8a;

    TMOD = 0x12;

    TH0 = 0x14;

    TL0 = 0x00;

    TR0 = 1;

    TH1 = -50000/256;

    TL1 = -50000%6;

    }

    ///////主函数//////

    int main ()

    {

    timer_init();//初始化定时器

    while(1)

    {

    keyscan();//矩阵键盘扫描赋值

    if (1 == keynum || 2 == keynum || 3== keynum) //当有键按下时,启动ADC转换

    ADC(P2);

    else //否则显示四个0

    {

    disp();

    disp_in(0);

    }

    }

    return 0;

    }

    ///////1S显示切换的定时中断函数(T1)//////

    void TIMER(void) interrupt 3

    {

    static uchar timer;

    timer++;

    if (20 == timer)

    {

    timer = 0;

    shift = !shift;//用于两位的1S显示切换

    }

    }

    ///////提供给ADC芯片CLOCK的定时函数(T0)//////

    void OTHER_CLOCK(void) interrupt 1

    {

    CLK = !CLK;

    }

    说说主要遇到的问题和学到的东西:一个是因为用了等待查询方式来读取ADC0809的AD转换结果,加上矩阵键盘和38译码器选址,导致两个问题:

    1.各个功能的逻辑关系混乱。虽然只有几个功能模块,但是也思考了一番才有了新的程序架构。还有就是始终没能适应自顶向下的编程思维,比如会习惯先编出ADC的START信号或者选址函数,再去想用在哪里。而不是先直接构造一个ADC处理的框架,再去想细节的实现。

    2.还有数码管动态显示不停闪烁。调试的时候,也老想着,应该就是这样了吧,改不了了吧,呵呵,可是解决之后再次觉得天无绝人之路啊,

    ADD_A = 1;

    ADD_B = 0; 这段语句起初P0 = numtable_DE[val_int];是放在首位的,结果想想是不是因为用38

    ADD_C = 0; 译码器控制位选扰乱了下一位的段选,移一下位就搞定了……真是奇妙

    P0 = numtable_DE[val_int];

    delay(1);

    团队合作的效率这次体现得很明显,特别是繁琐的画图,可是因为大家实践比较少,结果很不幸犯了很基础的错误,导致成品没有成功。不知道以后还有机会合作不

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top