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();
}
}

posted @   Flying3080  Views(353)  Comments(0Edit  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示