微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于定时器动态扫描数码管

关于定时器动态扫描数码管

时间:10-02 整理:3721RD 点击:
对单片机的中断不太了解,研究了好久不知道怎么写,觉得应该是自己的程序有问题,但是自己看又看不出,想请教一下这样写对不对,只有显示和中断部分,不显示。

void display(uchar qian,uchar bai,uchar shi,uchar ge,uchar se)
{       
        qian=cl/10;
        bai=cl%10;
        shi=mu/10;
        ge=mu%10;
        switch(tt)
        {
                case 0:       
                                P0=tableqian01[qian];
                                dula1=1;
                                dula1=0;
                                P2=tableqian21[qian];
                                dula2=1;
                                dula2=0;
                                we1=1;
                                break;
                case 1:        we1=0;
                                P0=tableqian02[qian];
                                dula1=1;
                                dula1=0;
                                P2=tableqian22[qian];
                                dula2=1;
                                dula2=0;
                                we2=1;
                                break;
                case 2:        we2=0;
                                P0=tablebai01[bai];
                                dula1=1;
                                dula1=0;
                                P2=tablebai21[bai];
                                dula2=1;
                                dula2=0;
                                we1=1;
                                break;
                case 3:        we1=0;
                                P0=tablebai02[bai];
                                dula1=1;
                                dula1=0;
                                P2=tablebai22[bai];
                                dula2=1;
                                dula2=0;
                                we2=1;
                                break;
                case 4:        we2=0;
                                P0=tableshi01[shi];
                                dula1=1;
                                dula1=0;
                                P2=tableshi21[shi];
                                dula2=1;
                                dula2=0;
                                we1=1;
                                break;
                case 5:        we1=0;
                                P0=tableshi02[shi];
                                dula1=1;
                                dula1=0;
                                P2=tableshi22[shi];
                                dula2=1;
                                dula2=0;
                                we2=1;
                                break;
                case 6:        we2=0;
                                P0=tablege01[ge];
                                dula1=1;
                                dula1=0;
                                P2=tablege21[ge];
                                dula2=1;
                                dula2=0;
                                we1=1;
                                break;
                case 7:        we1=0;
                                P0=tablege02[ge];
                                dula1=1;
                                dula1=0;
                                P2=tablege22[ge];
                                dula2=1;
                                dula2=0;
                                we2=1;
                                break;
                case 8:        we2=0;
                                P0=0;
                                dula1=1;
                                dula1=0;
                                P2=0;
                                dula2=1;
                                dula2=0;
                                we1=1;
                                break;
                case 9:        we1=0;
                                P0=0;
                                dula1=1;
                                dula1=0;
                                P2=tablese22[se];
                                dula2=1;
                                dula2=0;
                                we2=1;
                                break;
                case 10:we2=0;
                                break;

        }
}
void main()
{
        write_ds(0x0A,0x2e);
        delay(10);
        write_ds(0x0B,0x0f);
        TMOD=0x11;
        TH0=0x1f;
        TL0=0xa3;
        TH1=0xff;
        TL1=0xa3;
        EA=1;
        ET0=1;
        ET1=1;
        TR1=0;
        TR0=1;
        while(1)
        {
                cl=read_ds(4);
                mu=read_ds(2);
                se=read_ds(0);
                display(qian,bai,shi,ge,se);
        }
}

void timer1() interrupt 3
{
        TH1=0xff;
        TL1=0xa3;
        tt++;
        if(tt==10)
        tt=0;
}

动态扫描利用的事眼睛的余晖效应,也就是视觉暂留
不知道你现在程序的效果是怎样的
利用定时器的话就要考虑定时多少的问题哈
动态扫描实现的是数码管的选通,然后数码管的显示一般没有什么问题吧

把void display()内的函数直接放到中断子函数里

段的开关太快了吧

中断没打开,谢谢帮我看了的人。

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

网站地图

Top