51单片机:单个数码管动态显示
作者:互联网
单个数码管动态显示
仿真电路(软件为Proteus)
所用元件目录
1、AT89C51RC2:单片机
2、BUTTON:按键
3、CAP:电容
4、CRYSTAL:晶振
5、RES:电阻
6、7SEG-MPX1-CC(红色,共阴极数码管)
注:
1.在Proteus里数码管名称后CC表示共阴极,CA表示共阳极,在选择的时候需要注意跟你写的程序是否匹配。
步骤
对Proteus软件操作步骤:
- 新建工程;
- 添加元件;
- 添加电源:(正:POWER;负:GROUND);
- 放置元件,按电路图连接(因单个数码管引脚较近,连接时需得注意,如果不行可换个一端连接);
插入电路图
上图就是用仿真软件制作的线路原理图,此时是仿真状态截的图。
插入一段漂亮的代码片(软件为Keil)
下面展示高亮的 代码片
.
#include"reg51.h"
unsigned char m[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//硬件图上我们是正极连接单片机,所以输出1才能点亮数码管
//0,1,2,3,4,5,6,7,8,9,这是共阴极数码管0-9的段码
void delay1ms(unsigned char c) //c=1时,大约为1ms
{
unsigned char a,b;
for(c ;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main()
{
unsigned char i; //设定两个变量
P2=0x00; //在开始点亮前,初始化;
delay1ms(100); //大约延时100ms
while(1)
{
for(i=0;i<10;i++) //把0移到最右边需要10次
{
P2=m[i]; //P2口的8个引脚输出轮流输出m数组中的段码
delay1ms(100000); //延时函数有最大值,因此我设置了三个,
delay1ms(100000); //这样可以明显看到数码管的数值在滚动显示
delay1ms(100000); //如果要精确的按秒显示,还是得用单片机内的定时器,这个后续会写
}
}
}
段码
显示0~9的值
共阴极数码管
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
共阳极数码管
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
标签:动态显示,数码管,unsigned,delay1ms,char,单片机,Proteus 来源: https://blog.csdn.net/void_much/article/details/119082579