標題: 關于一個數碼管的刷新程序,特別簡單,大佬手下留情,還請看看有沒有什么可以改進, [打印本頁]

作者: 凌鴆    時間: 2019-5-30 12:00
標題: 關于一個數碼管的刷新程序,特別簡單,大佬手下留情,還請看看有沒有什么可以改進,
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char

sbit seg_=P1^7;        //位選
sbit bit_=P1^6;        //段選

sbit sh=P1^2;        //位移時鐘八個時鐘移入一個字節(jié)
sbit st=P1^1;        //鎖存時鐘一個上升沿鎖存一次數據
sbit da=P1^0;        //數據輸入腳

void Timer0Init(void)
{
        TMOD=0x01;               //設置定時器
        TL0=0x00;                //設置初值,
        TH0=0xb8;                //二十毫秒
        EA=1;                                         //開總中斷
        ET0=1;                                         //開定時器中斷
        TR0=1;                                         //啟動定時器
}

void timer(void)
{
        TMOD=0x01;                                 //將定時器0設置為方式以1
        TH0=(65536-9216)/256;    //設初值
        TL0=(65536-9216)%256;         //設初值
        TR0=1;                   //定時器0運行
}


//void DelayMs(uchar ms)
//{
//        int i,j;
//        for(i=0;i<ms;i++)
//                for(j=0;j<50;j++);
//}
//
//void shuaxing(int shuru)
//{
//        int i;
//        sh=1;
//        for(i=0;i<8;i++)
//        {       
//                if(shuru&0x80)
//                {       
//                        da=1;          
//                }
//                else
//                {
//                        da=0;
//                }
//                DelayMs(2);
//                sh=0;
//                shuru=shuru<<1;
//                DelayMs(2);
//                sh=1;
//        }
//        st=0;
//        DelayMs(2);
//        st=1;
//}
//

void main(void)
{
         Timer0Init();
         while(1);

       
         int i;
         P2=0xff;
         timer();
         while(1)
         {
                 if(1==TF0)                                         //已經溢出,10ms到了
                {
                        TF0=0;
                        TH0=(65536-9216)/256;    //設初值
                        TL0=(65536-9216)%256;         //設初值
                        i++;
                }
                if(100==i)                                         //到了一秒
                {
                        i=0;
                        P2=~P2;
                }
         }
         

        int i;
           uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
           uchar duan[]={0x5b,0x3f,0x06,0x6f,0x3f,0x6d,0x5b,0x3f};
        uchar zong[]={0x00,0x7C,0x54,0x54,0xFF,0x55,0x55,0x7D};
        while(1)
        {
                   for(i=0;i<8;i++)
                {
                        seg_=1;
                        P0=0x00;
                        seg_=0;

                        bit_=1;
                        P0=wei[i];
                        bit_=0;
                        P0=0x00;
                        seg_=1;
                        P0=duan[i];
                        seg_=0;
                        P0=0xff;
                        DelayMs(1);               
                }
        seg_=1;
        P0=0x00;
        seg_=0;

        bit_=0;

        shuaxing(0x00);
        P0=0xfe;
        for(i=0;i<8;i++)
        {
                shuaxing(zong[i]);
                P0=P0<<1;
                DelayMs(1);
        }
        P0=0x00;


        }
}
void Timer0_ISR(void) interrupt 1
{
        unsigned char i;
        TL0=0x00;                //重設置初值,
        TH0=0xb8;                //二十毫秒
        i++;
        if(50==i)                                 //定時一秒
        {
                i=0;
                P2=~P2;
        }
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1