ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

51单片机:数码管动态显示

2020-06-02 11:08:13  阅读:366  来源: 互联网

标签:count 动态显示 P0 单片机 void 51 数码管 uint 10


要求

51单片机,用三个7段共阴极数码管动态显示0~99,每隔0.5s刷新一次数字。用keil与Proteus联合仿真。

硬件设计

以AT89C51单片机为核心,包括74HC573锁存器,三个7段共阴极数码管。
1.74HC573锁存器:
74HC573锁存器
功能:用来控制数码管的位选端和段选端。
原理:LE为高电平时,输出随输入而改变,LE为低电平时,输出不随输入而改变。
2.7段共阴极数码管:
八段共阴极数码管
位选端:低电平时,选中此数码管;段选端:高电平时相应发光二极管亮起。
共阴极七段数码数据表格:

组合 显示数字
0x3f 0
0x06 1
0x5b 2
0x4f 3
0x66 4
0x6d 5
0x7d 6
0x07 7
0x7f 8
0x6f 9
0x77 a
0x7c b
0x39 c
0x5e d
0x79 e
0x71 f

3.RESPACK-8排阻
由于P0口没有上拉电阻,不能输出高电平,所以需要外接上拉电阻。
4.Proteus仿真图
Proteus仿真图

程序

1.初始设置

#include<reg51.h>
#define unsigned char unchar;
#define unsigned int uint;
void delayms(uint);     //延时函数
void show(uint);        //数码管显示函数
unchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
sbit P2^6=a;
sbit P2^7=b;
uint sec=0;
uint count=0;

2.延时程序

void delayms(uint rms)
{
	uint i,j;
	for(i=0;i<rms;i++)
		for(j=0;j<110;j++);
}

3.数码管动态显示程序

void show(uint s)
{
	a=0;b=1;            //启动控制位选端的锁存器
	P0=0xfb;            //选中第三个数码管
	a=1;b=0;            //启动控制段选端的锁存器
	P0=table[s%10];     //使第三个数码管显示此时计时器数字的个位数
	delayms(5);

	a=0;b=1;
	P0=0xfd;
	a=1;b=0;
	P0=table[s/10%10];
	delayms(5);

	a=0;b=1;
	P0=oxfe;
	a=1;b=0;
	P0=table[s/10/10%10];
	delayms(5)
}

4.中断部分

void jishu() interrupt 1 using 2
{
	TH0=0x3c;           //T0定时50ms,算出TH0和TL0的值
	TL0=0xb0;
	count++;            //T0溢出即每过50ms时,count加1
	if(count=10)     //当count加到20,即刚好经过0.5m,将count清零,sec+1
	{
		count=0;
		sec++;
	}
}

5.主函数

void main()
{
	TMOD=0x01;       //设置T0工作方式1:16位计数器
	EA=1; //CPU中断开放:此时每个中断源的中断允许与否由各自中断允许位决定
	ET0=1;           //允许T0中断
	TR0=1;           //开启定时器T0
	while(1)
	{
		show(sec);
	}
}

结果

最后结果

标签:count,动态显示,P0,单片机,void,51,数码管,uint,10
来源: https://blog.csdn.net/qq_43377642/article/details/106475075

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有