20141016 【Arduino + C51单片机】 八段数码管--数字循环显示

10 篇文章 0 订阅
7 篇文章 0 订阅

作为 物联网工程系 的学生,

硬件是必须要会的。。。


今天写了个循环显示(0~9)的八段数码管


就不应该按说明书来,卡了老半天。

而且又长又臭。。。


型号:LED5011



为了方便接线并检错。

我按顺序数码管(a~g,还有点dp)接在3~9号数字端。

【不好贴图,就不上图片了】

对每个数字的显示状态压缩。。。


代码如下:


int nn[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

const int dTime = 1000;

void number(int no){
	int t = nn[no];
	for(int i=0; i<=7; i++){
		boolean light = t&(1<<i);
		digitalWrite(i+2, light);
	}
}

void setup()
{
	for(int i=0; i<=7; i++)
		pinMode(i+2, OUTPUT);
}

void loop()
{
	for(int i=0; i<=9; i++){
		number(i);
		delay( dTime );
	}
}




C51单片机的代码【单片机型号:STC89C52RC (板子为HC6800-ES V2.0)】

#include <reg52.h>
const unsigned int num[11] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x80};
unsigned int i;

void delay(int dt){
	unsigned int i, j;
	for(i=0; i<1000; i++)
		for(j=0; j<dt; j++);
}

void main(){
	while( 1 ){
		for(i=0; i<10; i++){
			P0 = num[i];
			delay( 100 );
		}
	}
}





以下,所谓标程:

//设置控制各段的数字IO 脚
int a=7;//定义数字接口7 连接a 段数码管
int b=6;// 定义数字接口6 连接b 段数码管
int c=5;// 定义数字接口5 连接c 段数码管
int d=11;// 定义数字接口11 连接d 段数码管
int e=10;// 定义数字接口10 连接e 段数码管
int f=8;// 定义数字接口8 连接f 段数码管
int g=9;// 定义数字接口9 连接g 段数码管
int dp=4;// 定义数字接口4 连接dp 段数码管
void digital_1(void) //显示数字1
{
	unsigned char j;
	digitalWrite(c,HIGH);//给数字接口5 引脚高电平,点亮c 段
	digitalWrite(b,HIGH);//点亮b 段
	for(j=7;j<=11;j++)//熄灭其余段
		digitalWrite(j,LOW);
	digitalWrite(dp,LOW);//熄灭小数点DP 段
}
void digital_2(void) //显示数字2
{
	unsigned char j;
	digitalWrite(b,HIGH);
	digitalWrite(a,HIGH);
	for(j=9;j<=11;j++)
		digitalWrite(j,HIGH);
	digitalWrite(dp,LOW);
	digitalWrite(c,LOW);
	digitalWrite(f,LOW);
}
void digital_3(void) //显示数字3
{
	unsigned char j;
	digitalWrite(g,HIGH);
	digitalWrite(d,HIGH);
	for(j=5;j<=7;j++)
		digitalWrite(j,HIGH);
	digitalWrite(dp,LOW);
	digitalWrite(f,LOW);
	digitalWrite(e,LOW);
}
void digital_4(void) //显示数字4
{
	digitalWrite(c,HIGH);
	digitalWrite(b,HIGH);
	digitalWrite(f,HIGH);
	digitalWrite(g,HIGH);
	digitalWrite(dp,LOW);
	digitalWrite(a,LOW);
	digitalWrite(e,LOW);
	digitalWrite(d,LOW);
}
void digital_5(void) //显示数字5
{
	unsigned char j;
	for(j=7;j<=9;j++)
		digitalWrite(j,HIGH);
	digitalWrite(c,HIGH);
	digitalWrite(d,HIGH);
	digitalWrite(dp,LOW);
	digitalWrite(b,LOW);
	digitalWrite(e,LOW);
}
void digital_6(void) //显示数字6
{
	unsigned char j;
	for(j=7;j<=11;j++)
		digitalWrite(j,HIGH);
	digitalWrite(c,HIGH);
	digitalWrite(dp,LOW);
	digitalWrite(b,LOW);
}
void digital_7(void) //显示数字7
{
	unsigned char j;
	for(j=5;j<=7;j++)
		digitalWrite(j,HIGH);
	digitalWrite(dp,LOW);
	for(j=8;j<=11;j++)
		digitalWrite(j,LOW);	
}
void digital_8(void) //显示数字8
{
	unsigned char j;
	for(j=5;j<=11;j++)
		digitalWrite(j,HIGH);
	digitalWrite(dp,LOW);
}
void setup()
{
	int i;//定义变量
	for(i=4;i<=11;i++)
		pinMode(i,OUTPUT);//设置4~11 引脚为输出模式
}
void loop()
{
	while(1)
	{
		digital_1();//显示数字1
		delay(2000);//延时2s
		digital_2();//显示数字2
		delay(1000); //延时1s
		digital_3();//显示数字3
		delay(1000); //延时1s
		digital_4();//显示数字4
		delay(1000); //延时1s
		digital_5();//显示数字5
		delay(1000); //延时1s
		digital_6();//显示数字6
		delay(1000); //延时1s
		digital_7();//显示数字7
		delay(1000); //延时1s
		digital_8();//显示数字8
		delay(1000); //延时1s
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值