打印
[51单片机]

求一个共阳四位数码管滚动显示1234的程序

[复制链接]
3552|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
经历|  楼主 | 2018-10-7 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求一个共阳四位数码管滚动显示1234的程序,用51单片机的,哪怕讲讲原理是怎么实现的也行

相关帖子

沙发
xuyaqi| | 2018-10-8 08:57 | 只看该作者
一步步来,先解决数码管可以显示1,2,3,4,再解决滚动显示,不知你第一步实现了没有。

使用特权

评论回复
板凳
zhuls| | 2018-10-8 11:37 | 只看该作者
1234
2341
3412
4123
是这样的吗?

使用特权

评论回复
地板
dabing89| | 2018-10-11 16:00 | 只看该作者
/*******************************************************************************
* 文件名: 数码管
* 描  述:
* 功  能:数码管的使用
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
#include "stc15w.h"//头文件
#include "intrins.h"


/*******************************************************************************
* 文件名: 重定义
* 描  述:   
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
typedef unsigned char uint8;
typedef unsigned int  uint16;
typedef unsigned long uint32;

/*******************************************************************************
* 文件名:共阳数码管真值表
* 描  述:
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2015.03.03)
*******************************************************************************/
code uint8 LedChar[] = {
        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
uint8 counter = 0;

/*******************************************************************************
* 文件名:单独位定义
* 描  述:   
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
sbit LED0 = P1^0;//第1组LED
sbit LED1 = P1^1;//第2组LED
sbit LED2 = P1^2;//第3组LED                                 
sbit LED3 = P1^3;//第4组LED
sbit LED4 = P1^4;//第5组LED
sbit LED5 = P3^2;//第6组LED
sbit LED6 = P0^0;//第7组LED
sbit LED7 = P0^1;//第8组LED

sbit LEDS1 = P3^3;//数码管1
sbit LEDS2 = P3^4;//数码管2
sbit LEDS3 = P3^6;//数码管3
sbit LEDS4 = P3^7;//数码管4

/*******************************************************************************
* 文件名:函数前置声明
* 描  述:   
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void Mcu_Port_Init();
void LedScan();
void Delay500ms(); //24MHZ
void Time0_Init();//定时器0
/*******************************************************************************
* 文件名
* 描  述: 主函数  
* 功  能:入口
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void main(void)
{
        uint8 count = 0;

        Mcu_Port_Init();//IO上电初始化
        Time0_Init();
        LED0 = 0;//第1组LED,如果使能请置为1
        LED1 = 0;
        LED2 = 0;
        LED3 = 0;
        LED4 = 0;
        LED5 = 0;
        LED6 = 0;
        LED7 = 0;

        while(1);
}

/*******************************************************************************
* 文件名:void LedScan()
* 描  述: LED刷新
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void LedScan()
{
        static uint8 i = 0;

        P2 = 0Xff;
        switch(i)
        {
                case 0: LEDS4 = 0;LEDS1 = 1;P2 = LedChar[counter];i++;break;
                case 1: LEDS1 = 0;LEDS2 = 1;P2 = LedChar[counter];i++;break;
                case 2: LEDS2 = 0;LEDS3 = 1;P2 = LedChar[counter];i++;break;
                case 3: LEDS3 = 0;LEDS4 = 1;P2 = LedChar[counter];i = 0;break;

                default:break;
        }
}
/*******************************************************************************
* 文件名:void Time0_Init()
* 描  述: 定时器0初始化
* 功  能:1毫秒@11.0592MHz
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void Time0_Init(void)
{
        AUXR |= 0x80;        //定时器时钟1T模式
        TMOD &= 0xF0;        //设置定时器模式
        TL0 = 0xCD;                //设置定时初值
        TH0 = 0xD4;                //设置定时初值
        ET0 = 1;
        TR0 = 1;                //定时器0开始计时
        EA = 1;               
}

/*******************************************************************************
* 文件名:
* 描  述: 中断函数
* 功  能:1毫秒@11.0592MHz
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void ET0_IRQHandler() interrupt 1
{
        static uint16 tmr500ms = 0;
       
        TL0 = 0xCD;                //设置定时初值
        TH0 = 0xD4;                //设置定时初值

        LedScan();
        tmr500ms++;
        if(tmr500ms == 500)
        {
                tmr500ms = 0;
                //小灯间隔500ms亮灭
                counter++;
                if(counter > 9)
                {
                        counter = 0;       
                }       
        }               
}

/*******************************************************************************
* 文件名:void Mcu_Port_Init()
* 描  述: io初始化
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void Mcu_Port_Init()
{
        //将P0口低二位配置为推挽输出
        //234567位配置位高阻输入
        P0M1 = 0xFC;//1111 1100
        P0M0 = 0X03;//0000 0011
        //P0 = 0X01;//第6个
        //P0 = 0X02;//第7个
        //高3位配置高阻输入,用作模拟口
        //其他配置推挽输出,驱动LED
        P1M1 = 0xE0;//1110 0000
        P1M0 = 0X1F;//0001 1111
        //P2口配置准双向口
        P2M1 = 0X00;
        P2M0 = 0X00;
        P2 = 0Xff; //上电为1111 1111

//        //P54,P55口为推挽输出
        P5M1 = 0X00;
        P5M0 = 0X00;
        P5 = 0xFF;

        //P37,P36,3.2,P3.3 P3.4口为推挽输出
        P3M1 = 0X00;
        P3M0 = 0XFC;
        P3 = 0X23; //0010 0111//第5个LED端口       
}

/*******************************************************************************
* 文件名:void Delay500ms()                //@24.000MHz
* 描  述:Y5内核延时
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
void Delay500ms()                //@24.000MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 46;
        j = 153;
        k = 245;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

/*******************************************************************************
* 文件名:void Delay500ms()                //@24.000MHz
* 描  述:Y1内核延时
* 功  能:
* 作  者:大核桃
* 版本号:1.0.1(2017.05.23)
*******************************************************************************/
//void Delay500ms()                //@24.000MHz
//{
//        unsigned char i, j, k;
//
//        _nop_();
//        i = 8;
//        j = 154;
//        k = 122;
//        do
//        {
//                do
//                {
//                        while (--k);
//                } while (--j);
//        } while (--i);
//}



使用特权

评论回复
5
经历|  楼主 | 2018-10-12 08:28 | 只看该作者

使用特权

评论回复
6
经历|  楼主 | 2018-10-12 08:28 | 只看该作者
xuyaqi 发表于 2018-10-8 08:57
一步步来,先解决数码管可以显示1,2,3,4,再解决滚动显示,不知你第一步实现了没有。 ...

谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

31

帖子

2

粉丝