51单片机001:利用动态扫描方法在三位数码管上显示出稳定的321
思路解析:
1、首先要知道数码管静态扫描和动态扫描的区别:
静态扫描:只能点亮一个数码管,点亮固定的段位。
动态扫描:本质还是静态扫描,只是利用人眼的视觉暂留效应,以一定的频率依次点亮多个数码管的段位,只要频率足够大,人眼无法识别出,就会形成多个数码管同时亮的现象,可以控制多个数码管的显示。
2、位选:选择三位数码管
通过对P2^2,P2^3,P2^4赋值来选择对应的数码管
3、段选:让选择的三位数码管分别显示321
通过对P0口进行赋值使数码管显示对应的数字
完整代码:
#include "reg52.h"
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//延时函数
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void smg_display(void)
{
LSC = 1; LSB = 1; LSA = 1;
SMG_A_DP_PORT = gsmg_code[3]; // 百位数码管显示
delay_10us(100);
LSC = 1; LSB = 1; LSA = 0;
SMG_A_DP_PORT = gsmg_code[2]; // 十位数码管显示
delay_10us(100);
LSC = 1; LSB = 0; LSA = 1;
SMG_A_DP_PORT = gsmg_code[1]; // 个位数码管显示
delay_10us(100);
}
void main()
{
while(1)
{
smg_display();
}
}