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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)