找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2732|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机数码管显示计数器程序

[复制链接]
跳转到指定楼层
楼主
ID:1031277 发表于 2022-6-1 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

#define dula P0                //段选
#define wela P2                //位选

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x76,0x38};        //共阴极

void Timer0Init();        //定时器初始化
void display(uint first,uint second,uint third,uint forth);        //显示函数
void delay_ms(unsigned int timer);        //延时函数 ms

unsigned int count =0;        //计数值
void main()        //主函数
{

        Timer0Init();        //定时器初始化
        while(1)
        {
                display(count/1000,(count%1000)/100,(count%100)/10,count%10);        //显示函数
        }
}
/********************
*函数:数码管显示函数
*参数:das
*返回:无
*********************/
void display(uint first,uint second,uint third,uint forth)        //显示
{
        wela = 0xfe;
        dula = table[first];        //显示第一个
        delay_ms(5);
        dula = 0x00;        //一定要加,否则不稳定
        wela = 0xfd;
        dula = table[second];        //显示第二个
        delay_ms(5);
        dula = 0x00;        //一定要加,否则不稳定
        wela = 0xfb;
        dula = table[third];        //显示第三个
        delay_ms(5);
        dula = 0x00;        //一定要加,否则不稳定
        wela = 0xf7;
        dula = table[forth];        //显示第四个
        delay_ms(5);
        dula = 0x00;        //一定要加,否则不稳定
}


/*****************
*函数:延时_ms函数
*参数:timer
*返回:无
******************/
void delay_ms(uint timer)
{
        uint i,j;
        for(i=0;i<timer;i++)
                for(j=0;j<110;j++);
}

/****************
*函数名:Timer0Init
*函数功能:定时器0初始化
*输        入:无
*输        出:无
*******************/
void Timer0Init()
{
        TMOD|=0x01;        //选择为定时器0模式,工作方式1,仅用TR0打开启动
        TH0=0XFC;        //给定时器赋初值,定时1ms
        TL0=0X18;
        ET0=1;        //打开定时器0中断允许
        EA=1;        //打开总中断
        TR0=1;        //打开定时器
}
/**********************************
*函数名:void time0() interrupt 1
*函数功能:定时器0中断函数
*输        入:无
*输        出:无
************************************/
void time0() interrupt 1
{
        static unsigned int i=0;
        TH0=0XFC;        //给定时器赋初值,定时1ms
        TL0=0X18;
        i++;
        if(i==1000)        //1s
        {
                i=0;
                if(count<9999)        //小于9999
                {
                        count++;        //加一
                }
                else
                {
                        count=0;        //清零
                }
        }
}


评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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