#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}; /******************************************************************************* * 函 数 名 : delay_10us * 函数功能 : 延时函数,ten_us=1 时,大约延时 10us * 输 入 : ten_us * 输 出 : 无 145 *******************************************************************************/ void delay_10us(u16 ten_us) { while(ten_us--); } /******************************************************************************* * 函 数 名 : smg_display * 函数功能 : 动态数码管显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void smg_display(void) { u8 i=0; for(i=0;i<8;i++) { switch(i)//位选 { case 0: LSC=1;LSB=1;LSA=1;break; case 1: LSC=1;LSB=1;LSA=0;break; case 2: LSC=1;LSB=0;LSA=1;break; case 3: LSC=1;LSB=0;LSA=0;break; case 4: LSC=0;LSB=1;LSA=1;break; case 5: LSC=0;LSB=1;LSA=0;break; case 6: LSC=0;LSB=0;LSA=1;break; case 7: LSC=0;LSB=0;LSA=0;break; } SMG_A_DP_PORT=gsmg_code[i];//传送段选数据 delay_10us(100);//延时一段时间,等待显示稳定 SMG_A_DP_PORT=0x00;//消音 } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { smg_display(); } }
时间: 2023-08-06 07:06:17 浏览: 154
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码使用51单片机控制共阴极数码管动态显示0~F的数字。它使用了宏定义来定义数码管段码口和位选信号控脚,并定义了一个包含0~F的段码数据的数组。代码中的`delay_10us`函数用于延时,`smg_display`函数用于动态显示数码管。
在`main`函数中,通过不断调用`smg_display`函数来实现数码管的动态显示。
请注意,具体的引脚连接和延时时间需要根据你的硬件设计进行适配。
阅读全文