51单片机实验三:数码管动态显示
目录
一、实验环境与实验器材
二、实验内容及实验步骤
1. 数码管动态扫描0-5
2. 利用余辉效应使单片机数码管“同时显示”0-5。
3. B站小仿真(动态原理显示hello)
一、实验环境与实验器材
环境:Keli,STC-ISP烧写软件,Proteus.
器材:TX-1C单片机(STC89C52RC)、电脑。
图1.1 工具
二、实验内容及实验步骤
1. 数码管动态扫描0-5
#include <reg52.h>
sbit dula=P2^6; //段选信号的锁存器控制
sbit wela=P2^7; //位选信号的锁存器控制unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//数码管各位的码表
unsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};//0-5的码表
void delay(unsigned int i)
{unsigned int m,n;for(m=i;m>0;m--)for(n=90;n>0;n--);
}void main()
{unsigned char num;while(1){for(num=0;num<6;num++){P0=wei[num]; wela=1;wela=0;P0=duan[num]; dula=1;dula=0;delay(1000); }}
}
STC烧写至单片机
图 2.1.1 烧写
图2.1.2 硬件效果
Proteus 仿真(将延时加长)
仿真反应反应更快
视频:(降速处理)
数码管动态扫描0-5
2. 利用余辉效应使单片机数码管“同时显示”0-5。
其实就是时间间隔短,这是关键(所谓的同时显示,只是间隔较短而已,利用人眼的余辉效应,觉得每个数码管都一直在亮
#include <reg52.h>sbit dula=P2^6; //段选信号的锁存器控制
sbit wela=P2^7; //位选信号的锁存器控制unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//数码管各位的码表
unsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};//0-5的码表
void delay(unsigned int i)
{unsigned int m,n;for(m=i;m>0;m--)for(n=90;n>0;n--);
}void main()
{unsigned char num;while(1){for(num=0;num<6;num++){P0=wei[num]; wela=1;wela=0;P0=duan[num]; dula=1;dula=0;delay(2); //时间间隔短,这是关键(所谓的同时显示,只是间隔较短而已,利用人眼的余辉效应,觉得每个数码管都一直在亮)。}}
}
图2 .2.1 烧写
图2.2.2 硬件效果
proteus仿真效果:
图2.2.3 画法1
图2.2.3 画法2
3. B站小仿真(动态原理显示hello)
Proteus仿真图
图2.3.1 Proteus仿真图
代码:
也是利用短延时,使得hello字样看起来同时显示
#include "reg52.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴0-9
unsigned char str[]={0x76,0x79,0x38,0x38,0x3F}; //HELLO
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};void delay(unsigned int n)
{unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}void seg()
{int i=0;for(i=0;i<5;i++){P3=~wei[i];P2=str[i]; //0011 1111delay(5);}
}void main()
{while(1){seg();}}
简单电路:
图3.3.1 proteus 电路图显示hello字样