02SEG(静态数码管)

一、数码管显示某一杠

打开第一个数码管初始化程序为:P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;

#include<stc15.h>

void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
	P0=0XFE;//1111 1110
	while(1);
}

二、数码管的8个段依次点亮,其他保持熄灭

#include<stc15.h>
void Delay_MS(unsigned int MS);
unsigned int SEG=0;
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
	while(1)
	{
		for(SEG=0;SEG<8;SEG++)
		{
			P0=~(0X01<<SEG);
			Delay_MS(500);
		}
	}
}
void Delay_MS(unsigned int MS)
{
	unsigned i,j;
	for(i=0;i<MS;i++)
	for(j=853;j>0;j--);
}

三、显示某个数值

#include<stc15.h>
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
	P0=0XF9;//1111 1001,即显示数字“1”,其他数字依次类推
	while(1);
}

四、

1、依次显示0—9、-、全部熄灭,每次显示间隔500ms

#include<stc15.h>
void Delay_MS(unsigned int MS);
unsigned int DT = 500;
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
	while(1)
	{
		P0=0XC0;Delay_MS(DT);
		P0=0XF9;Delay_MS(DT);
		P0=0XA4;Delay_MS(DT);
		P0=0XB0;Delay_MS(DT);
		P0=0X99;Delay_MS(DT);
		P0=0X92;Delay_MS(DT);
		P0=0X82;Delay_MS(DT);
		P0=0XF8;Delay_MS(DT);
		P0=0X80;Delay_MS(DT);
		P0=0X90;Delay_MS(DT);
		P0=0XBF;Delay_MS(DT);
		P0=0XFF;Delay_MS(DT);
		
	}
}
void Delay_MS(unsigned int MS)
{
	unsigned i,j;
	for(i=0;i<MS;i++)
	for(j=853;j>0;j--);
}

2、要求数码管值使用数组,功能函数使用for

#include<stc15.h>
//unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char code 
tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
void Delay_MS(unsigned int MS);
unsigned int DT = 500;
unsigned int SEG=0;
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;//打开第一个数码管
	while(1)
	{
		for(SEG=0;SEG<11;SEG++)
		{
			P0=tab[SEG];
		  Delay_MS(DT);
		}
		/*P0=tab[SEG];
		Delay_MS(DT);
		SEG++;
		if(SEG==11)SEG=0;*/
	}
}
void Delay_MS(unsigned int MS)
{
	unsigned i,j;
	for(i=0;i<MS;i++)
	for(j=853;j>0;j--);
}

3、8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F值,如此往复。

#include<stc15.h>
unsigned char code SMG_duanma[18]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,
                              0X82,0XF8,0X80,0X90,0X88,0X80,
                              0XC6,0XC0,0X86,0X8E,0XBF,0X7F};
void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}
void InitHC138(unsigned char n)
{
	switch(n)
	{
		case 4:
		  P2=(P2&0X1F)|0X80;
		break;
		case 5:
		  P2=(P2&0X1F)|0XA0;
		break;
		case 6:
		  P2=(P2&0X1F)|0XC0;
		break;
		case 7:
		  P2=(P2&0X1F)|0XE0;
		break;
	}
}
void ShowSMG_Bit(unsigned char dat,unsigned pos)
{
	InitHC138(6);//数码管的位置
	P0=0X01<<pos;
	InitHC138(7);//数码管的内容
	P0=dat;
}

void SMG_Static()
{
	unsigned char i,j;
	for(i=0;i<8;i++)
	{
		for(j=0;j<10;j++)
		{
		ShowSMG_Bit(SMG_duanma[j],i);
		Delay(60000);
		}
	}
	for(j=0;j<16;j++)
	{
		InitHC138(6);//数码管的位置
	  P0=0XFF;
		InitHC138(7);//数码管的内容
		P0=SMG_duanma[j];
		Delay(60000);
		Delay(60000);
	}
}

//void ShowSMG()
//{
//	InitHC138(6);
//	P0=0X10;
//	InitHC138(7);
//	P0=0X82;
//}

void main()
{
	
	while(1)
	{
	SMG_Static();
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的实现,使用4位7段静态数码管显示电机转速,按键控制电机转速增加或减少: ```C++ // 定义数码管引脚 #define SEG_A 2 #define SEG_B 3 #define SEG_C 4 #define SEG_D 5 #define SEG_E 6 #define SEG_F 7 #define SEG_G 8 // 定义按键引脚 #define KEY_UP 9 #define KEY_DOWN 10 // 定义电机引脚 #define MOTOR_PIN 11 // 定义电机速度变量 int motor_speed = 0; void setup() { // 设置数码管引脚为输出 pinMode(SEG_A, OUTPUT); pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); // 设置按键引脚为输入 pinMode(KEY_UP, INPUT_PULLUP); pinMode(KEY_DOWN, INPUT_PULLUP); // 设置电机引脚为输出 pinMode(MOTOR_PIN, OUTPUT); // 初始化数码管显示 displayNumber(motor_speed); } void loop() { // 检测按键状态 if(digitalRead(KEY_UP) == LOW) { // 按下增加速度按键 motor_speed++; if(motor_speed > 255) { motor_speed = 255; } displayNumber(motor_speed); } if(digitalRead(KEY_DOWN) == LOW) { // 按下减少速度按键 motor_speed--; if(motor_speed < 0) { motor_speed = 0; } displayNumber(motor_speed); } // 控制电机转速 analogWrite(MOTOR_PIN, motor_speed); } // 显示数字函数 void displayNumber(int number) { // 定义数码管数字编码 byte displayDigits[] = { B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B10111110, // 6 B11100000, // 7 B11111110, // 8 B11110110, // 9 }; // 分离数字的每一位并显示 digitalWrite(SEG_A, bitRead(displayDigits[number / 100], 0)); digitalWrite(SEG_B, bitRead(displayDigits[number / 100], 1)); digitalWrite(SEG_C, bitRead(displayDigits[number / 100], 2)); digitalWrite(SEG_D, bitRead(displayDigits[number / 100], 3)); digitalWrite(SEG_E, bitRead(displayDigits[number / 100], 4)); digitalWrite(SEG_F, bitRead(displayDigits[number / 100], 5)); digitalWrite(SEG_G, bitRead(displayDigits[number / 100], 6)); } ``` 在这个程序中,我们使用了一个变量 `motor_speed` 来存储电机速度,初始值为0。我们还定义了两个按键,一个用于增加速度,另一个用于减少速度。当按下按键时,我们会修改 `motor_speed` 的值,并使用 `displayNumber()` 函数更新数码管显示。在 `loop()` 函数中,我们使用 `analogWrite()` 函数来控制电机转速,其值等于 `motor_speed`。 `displayNumber()` 函数使用了一个字节数组 `displayDigits[]` 来存储数码管数字编码。我们将 `number` 参数分离成三个数字,分别显示在三个数码管上。 请注意,这只是一个简单的示例程序,没有使用任何电机控制电路保护措施,实际应用中需要根据具体情况进行改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值