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

2019-07-15 15:54发布

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


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;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zjbhello
1楼-- · 2019-07-15 16:21
动态扫描利用的事眼睛的余晖效应,也就是视觉暂留
不知道你现在程序的效果是怎样的
利用定时器的话就要考虑定时多少的问题哈
动态扫描实现的是数码管的选通,然后数码管的显示一般没有什么问题吧
晓涵
2楼-- · 2019-07-15 21:50
把void display()内的函数直接放到中断子函数里
569255044
3楼-- · 2019-07-16 00:16
 精彩回答 2  元偷偷看……
苏琪雁
4楼-- · 2019-07-16 06:11
中断没打开,谢谢帮我看了的人。

一周热门 更多>