STC8H8K64U——点亮单个数码管

博客围绕51单片机展开,介绍了点亮单个数码管的内容,还给出3线 - 8线译码器真值表,其中提到G1为高电平,G2A、G2B为低电平。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点亮单个数码管

公共端由74H138 3线——8线译码器控制。
段码由74HC245三态输出的八组总线收发器驱动。

3线——8线译码器真值表

G1为高电平,G2A、G2B为低电平

A2A1A0Y0Y1Y2Y3Y4Y5Y6Y7
00001111111
00110111111
01011011111
01111101111
10011110111
10111111011
11011111101
11111111110
#include <STC8H.H>
#include "delay.h"

unsigned char code LED_7SEG_AN[10] = 
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};     //共阳极数码管0~9
unsigned char code LED_7SEG_CAT[10] = 
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //共阴极数码管0~9

/*74HC245
三态输出的八组总线收发器
OE低电平使能
DIR高电平由A到B输出
DIR低电平由B到A输出*/
#define OUT P0

/*3线——8线译码器*/
sbit A0 = P2^2;
sbit A1 = P2^3;
sbit A2 = P2^4;

void main(void)
{
/*准双向口模式*/
	P0M0 = 0x00;
	P0M1 = 0x00;
	P2M0 = 0x00;
	P2M1 = 0xe3;
	while(1)
	{
		unsigned char i;
		A2 = 0; A1 = 0; A0 = 0;
		for(i=0;i<10;i++)
		{
			OUT = LED_7SEG_CAT[i];	
			delay_ms(250);	
		}
	}	
}

实物图

### STC8H8K64U 单片机驱动共阴极数码管 STC8H8K64U 是一款高性能的 8单片机,广泛应用于嵌入式系统中。在驱动共阴极数码管时,通常需要配置 GPIO 引脚作为输出以控制段码和位选信号[^2]。以下是一个简单的示例代码,展示如何使用 STC8H8K64U 驱动共阴极数码管。 #### 示例代码:驱动共阴极数码管 ```c #include <reg52.h> // 包含头文件 sbit D0 = P1^0; // 定义段码引脚 sbit D1 = P1^1; sbit D2 = P1^2; sbit D3 = P1^3; sbit D4 = P1^4; sbit D5 = P1^5; sbit D6 = P1^6; sbit D7 = P1^7; sbit SEG_A = P2^0; // 定义位选引脚 sbit SEG_B = P2^1; sbit SEG_C = P2^2; sbit SEG_D = P2^3; sbit SEG_E = P2^4; sbit SEG_F = P2^5; sbit SEG_G = P2^6; unsigned char code seg_code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 数码管段码表 void delay_ms(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 123; j++); // 延时函数 } } void display_digit(unsigned char digit, unsigned char num) { unsigned char segment = seg_code[num]; // 获取段码 switch (digit) { case 0: SEG_A = 1; SEG_B = SEG_C = SEG_D = SEG_E = SEG_F = SEG_G = 0; // 选择第一个数码管 break; case 1: SEG_B = 1; SEG_A = SEG_C = SEG_D = SEG_E = SEG_F = SEG_G = 0; // 选择第二个数码管 break; } D0 = segment & 0x01; // 设置段码 D1 = segment & 0x02; D2 = segment & 0x04; D3 = segment & 0x08; D4 = segment & 0x10; D5 = segment & 0x20; D6 = segment & 0x40; D7 = segment & 0x80; } void main() { while (1) { display_digit(0, 5); // 显示数字5在第一个数码管上 delay_ms(500); display_digit(1, 9); // 显示数字9在第二个数码管上 delay_ms(500); } } ``` #### 接线图说明 - **共阴极数码管**:所有段(a-g)连接到单片机的 P1 口,位选信号连接到 P2 口。 - **单片机引脚分配**: - P1.0-P1.7 连接到数码管的 a-g 和小数点段。 - P2.0-P2.6 连接到数码管的位选信号。 #### 注意事项 - 在实际应用中,可能需要添加限流电阻以保护数码管单片机引脚[^3]。 - 如果需要驱动多位数码管,可以采用动态扫描技术来减少硬件资源占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往昔的恒纳兰那

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值