学习学习啊
各位高手讲的太详细了,才自学不久努力中,多谢各位,,,,,,,还要输入验证码,发帖太麻烦了:Q
/*
数码管显示
数码管连续循环显示0~9
*/
byte DIGITAL_DISPLAY = { //设置0-9数字所对应数组
{ 0,0,0,0,0,1,0,0 }, // = 0
{ 0,0,0,1,1,1,1,1 }, // = 1
{ 0,1,0,0,1,0,0,0 }, // = 2
{ 0,0,0,0,1,0,1,0 }, // = 3
{ 0,0,0,1,0,0,1,1 }, // = 4
{ 0,0,1,0,0,0,1,0 }, // = 5
{ 0,0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,0,0,0,1,0 } // = 9
};
byte DIGITAL = { //设置0-9数字所对应数组
{ 1,1,1,1,1,1,1,1 }, // = 0
{ 1,1,1,1,1,1,1,1 }, // = 1
{ 1,1,1,1,1,1,1,1 }, // = 2
{ 1,1,1,1,1,1,1,1 }, // = 3
{ 1,1,1,1,1,1,1,1 }, // = 4
{ 1,1,1,1,1,1,1,1 }, // = 5
{ 1,1,1,1,1,1,1,1 }, // = 6
{ 1,1,1,1,1,1,1,1 }, // = 7
{ 1,1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,1,1,1,1,1 } // = 9
};
void setup() { //设定4-11号数字端口为输出
for(int i=4;i<=11;i++){
pinMode(i, OUTPUT);
}
}
void loop() {
//0-9数字显示
for (int k = 0; k < 10; k++) {
int pin = 4;
for (int s = 0; s < 8; s++)
{
digitalWrite(pin, DIGITAL_DISPLAY);
delay(100);
pin++;
}
delay(1000);
for (int h = 0; h < 8; h++)
{
digitalWrite(pin, DIGITAL);
delay(100);
pin--;
}
delay(1000);
}
}
这个代码能看到依次点亮的那一个灯。
本帖最后由 ximocnc 于 2015-9-4 20:59 编辑
谢谢 学习了
[我用4片595级联4个数码管 然后用4个数字IO 接4个按键,在按下当按键的时候 数码管 显示一组数字 ,功能正常 ]
能给接线图和程序吗,先行感谢了。
共阴数码管试验成功,但是这里为何要减去3,才能正常显示?
void setup() {
for(int pin=3;pin<=10;pin++) //a,b,c,d,e,f,g,Dp对应引脚3,4,5,6,7,8,9,10
pinMode(pin,OUTPUT); //定义引脚为输出
}
void loop() {
/*==========显示=============*/
//定义数组
int n={1,1,1,1,1,1,0,0, //0
0,1,1,0,0,0,0,0, //1
1,1,0,1,1,0,1,0, //2
1,1,1,1,0,0,1,0, //3
0,1,1,0,0,1,1,0, //4
1,0,1,1,0,1,1,0, //5
1,0,1,1,1,1,1,0, //6
1,1,1,0,0,0,0,0, //7
1,1,1,1,1,1,1,0, //8
1,1,1,1,0,1,1,0, //9
};
for(int num=0;num<=9;num++)
{
for(int pin=3;pin<=10;pin++)
digitalWrite(pin,n);//为何要-3,请大神指教。
delay(500);
}
}
使用16进制,为何数字不进行循环?求解。
int nums[]=
{ 0xFC, // 1111,1100,0
0x60, // 0110,0000,1
0xDA, // 1101,1010,2
0xF2, // 1111,0010,3
0x66, // 0110,0110,4
0xB6, // 1011,0110,5
0xBE, // 1011,1110,6
0xE0, // 1110,0000,7
0xFE, // 1111,1110,8
0xF6, // 1111,0110,9
} ;
void setup()
{
for(int pin=3;pin<=10;pin++)
pinMode(pin,OUTPUT);
}
void loop()
{
/*==========显示=============*/
for(int num=0; num<=9;num++)
{
for(int pin=1; pin<=8; pin++) //采用循环方式依次点亮指定的数码管led(数组中1为点亮),单位时间只点亮1个led
digitalWrite(pin,nums);
}
delay(1000);
}
本帖最后由 fullmous 于 2016-3-24 22:06 编辑
给大家介绍一种新的处理方式。
//一个数码管连续显示0~F,十六个字符的程序
//数码管的位选引脚接端口C的0引脚,
//其他8个字段引脚接端口B的0~7引脚
//在本人的AVR单片机最小系统通过,Arduino的引脚不够使
//数码管字符定义数组,共阳的。
uint8_t CA_digit_8[]=
{
0xC0,//"0"
0xF9,//"1"
0xA4,//"2"
0xB0,//"3"
0x99,//"4"
0x92,//"5"
0x82,//"6"
0xF8,//"7"
0x80,//"8"
0x98,//"9"
0x88,//"A"
0x83,//"B"
0xC6,//"C"
0xA1,//"D"
0x86,//"E"
0x8E,//"F"
0x00//"8."
};
//数码管字符定义数组,共阴的。
/*
uint8_t CC_digit_8[]=
{
0x3F,//"0"
0x06,//"1"
0x5B,//"2"
0x4F,//"3"
0x66,//"4"
0x6D,//"5"
0x7D,//"6"
0x07,//"7"
0x7F,//"8"
0x67,//"9"
0x77,//"A"
0x7C,//"B"
0x39,//"C"
0x5E,//"D"
0x79,//"E"
0x71,//"F"
0xFF//"8."
};
*/
void setup()
{
DDRC = 0x3F; //初始化端口C输出,用于位选
DDRB = 0xFF; //初始化端口B输出,用于数码管段
PORTC = 0x00;
PORTB = 0x00;
}
void loop()
{
int i;
PORTC = 0x01; //选择端口C的引脚0
while(1)
{
for (i = 0;i < 16; i++) //循环
{
PORTB = CA_digit_8;//0 ~ F 字符码
delay(1000); //延时1秒
}
}
}
是不是比Arduino 的引脚方式简单的多。感兴趣的话,我有更多的例程可介绍给大家。
arduino_ykk 发表于 2013-5-18 13:56 static/image/common/back.gif
交作业咯。 数组没有必要定义在loop里面,否则每次循环都要重新开一点内存来放数组。可以放在整个方法外面啦 ...
讲得真好!谢谢!
不错,好评,下次再来
unsigned char number[]={252,96,2,3,4,5,6,7,8,9};
void setup() {
int i;
for(i=2;i<10;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,1);
}
}
//-------------主程序--------------------
void loop() {
int i;
for(i=0;i<10;i++) disLED(i);
}
//------------------------------------------
void disLED(char Num)
{
int i;
unsigned char j=number;
for(i=2;i<10;i++)
{
Serial.println(j);
if(j/128==1)
{
digitalWrite(i,0);
}
j=j<<1;
}
delay(1000);
for(i=2;i<10;i++) digitalWrite(i,1);
}
//是不是这样的代码更少
我也搞不懂那个PIN为什么要减3??求大神指教啊,我知道是很简单的问题,但就是不理解啊!!:(
void setup() {
for(int pin=3;pin<=10;pin++) //a,b,c,d,e,f,g,Dp对应引脚3,4,5,6,7,8,9,10
pinMode(pin,OUTPUT); //定义引脚为输出
}
void loop() {
/*==========显示=============*/
//定义数组 a,b,c,d,e,f,g,dp
int n={1,1,1,1,1,1,0,0, //0
0,1,1,0,0,0,0,0, //1
1,1,0,1,1,0,1,0, //2
1,1,1,1,0,0,1,0, //3
0,1,1,0,0,1,1,0, //4
1,0,1,1,0,1,1,0, //5
1,0,1,1,1,1,1,0, //6
1,1,1,0,0,0,0,0, //7
1,1,1,1,1,1,1,0, //8
1,1,1,1,0,1,1,0, //9
};
for(int num=0;num<=9;num++)
{
for(int pin=3;pin<=10;pin++)
digitalWrite(pin,n);//为何要-3,请大神指教。
delay(500);
}
}
小白路过。:)
写的时候为了把pin(3~10)映射到数组n所以每个值对应减了3.(这种写法不太好理解,值得改进)
即:pin 3 4 5 6 7 8 9 10
↓ n n ...
↓ n n ...
厉害了 自己试着写56789abc
本帖最后由 .js 于 2016-12-25 17:56 编辑
代码应该可以设置高亮吧
/*
* 作者:极客工坊-迷你强
* 时间:2012年10月2日
* IDE版本号:1.0.1
* 发布地址:www.geek-workshop.com
* 作用:arduino驱动数码管循环显示0,1,2,3,4几个数字
*/
void setup()
{
pinMode( 13, OUTPUT ); /* 激活13号引脚,我们需要用它供电 */
for ( int n = 2; n <= 9; n++ )
{
pinMode( n, OUTPUT );
}
}
void loop()
{
digitalWrite( 13, 1 ); /* 这个就是HIGH和LOW 的另一种写法0代表LOW 1代表HIGH */
/*==========显示0=============*/
int n0 = { 0, 0, 0, 0, 0, 0, 1, 1 }; /* 定义数组 通过0,1定义各数码管的明灭, */
int z = 0;
for ( int x = 2; x <= 9; x++ ) /* 采用循环方式依次点亮指定的数码管led(数组中0为点亮),单位时间只点亮1个led */
{
digitalWrite( x, n0 ); /* 点亮led语句X为引脚数n0为数组z为0-8的变量,来依次读取数组中的值 */
z++;
if ( z >= 9 ) /* 防止变量z累加超过了8 */
z = 0;
}
delay( 1000 );
/*==========显示1=============*/
int n1 = { 1, 0, 0, 1, 1, 1, 1, 1 };
z = 0;
for ( int x = 2; x <= 9; x++ )
{
digitalWrite( x, n1 );
z++;
if ( z >= 9 )
z = 0;
}
delay( 1000 );
/*==========显示2=============*/
int n2 = { 0, 0, 1, 0, 0, 1, 0, 1 };
z = 0;
for ( int x = 2; x <= 9; x++ )
{
digitalWrite( x, n2 );
z++;
if ( z >= 9 )
z = 0;
}
delay( 1000 );
/*==========显示3=============*/
int n3 = { 0, 0, 0, 0, 1, 1, 0, 1 };
z = 0;
for ( int x = 2; x <= 9; x++ )
{
digitalWrite( x, n3 );
z++;
if ( z >= 9 )
z = 0;
}
delay( 1000 );
/*==========显示4=============*/
int n4 = { 1, 0, 0, 1, 1, 0, 0, 1 };
z = 0;
for ( int x = 2; x <= 9; x++ )
{
digitalWrite( x, n4 );
z++;
if ( z >= 9 )
z = 0;
}
delay( 1000 );
}