找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1553|回复: 0
收起左侧

关于一个数码管的刷新程序,特别简单,大佬手下留情,还请看看有没有什么可以改进,

[复制链接]
ID:542523 发表于 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;        //位移时钟八个时钟移入一个字节
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;
        }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表