步驟1:

直接從Arduino/Atmega 328
通過(guò)Arduino/Atmega 328的移位寄存器
直接從Arduino/Atmega 328進(jìn)行直接端口操作
通過(guò)Arduino/Atmega 328/按鈕計(jì)數(shù)器的移位寄存器多路復(fù)用
通過(guò)Arduino/Atmega 328/電位器計(jì)數(shù)器的移位寄存器多路復(fù)用
1-直接從Arduino/Atmega 328
自動(dòng)從零計(jì)數(shù)到九,然后重復(fù)
代碼
///感謝Grumpy Mike http://www.thebox.myzen .co.uk/Tutorial/Arrays.html
//字節(jié)內(nèi)的LED段分配= {DP ABCDEFG}
int引腳[] = {2、3、4、5、6、7、8、9} ;//分配給DP但未使用的引腳9(char tenCode中二進(jìn)制數(shù)組的第一個(gè)元素)
int digit [] = {0,1,2,3,4,5,6,7,7,8,9,10 };
int計(jì)數(shù)器= 0;//將計(jì)數(shù)器初始化為零
int timer = 1000;//延遲計(jì)時(shí)器間隔
char tenCode [] = {B01111110,B00110000,B01101101,B01111001,B00110011,B01011011,B01011111,B01110000,B01111111,B01111011};
void setup()
{
(int i = 0; i 《8; i ++)//將數(shù)字引腳設(shè)置為OUTPUTS
pinMode(pins [i],OUTPUT);
}
void loop()
{
for(int j = 0; j 《10; j ++)
{ displayEleven(digit [j]);
delay(timer);
}
}
void displayEleven( int num)
{
int mask = 1; for(int i = 0; i 《8; i ++)
{((mask&tenCode [num])== 0)
digitalWrite(pins [i],LOW);
else digitalWrite(pins [i],HIGH);
mask = mask 《《1;
}
}
步驟2:

2-通過(guò)Arduino/Atmega 328的移位寄存器
從零自動(dòng)計(jì)數(shù)到九,然后重復(fù)
代碼
//字節(jié)= {內(nèi)的LED段分配ABCDEFG DP}
int閂鎖Pin = 8;//連接到移位寄存器的引腳12
int dataPin = 11;//連接到移位寄存器的引腳14
int clockPin = 12;////連接到移位寄存器的引腳11
int i = 0;
字節(jié)數(shù)字[] = {B11111100,B01100000,B11011010,B11110010,B01100110,B10110110,B10111110,
B11100000,B11111110,B11110110};
void setup()
{
pinMode(dataPin,OUTPUT);//將dataPin配置為OUTPUT
pinMode(latchPin,OUTPUT);//將閂鎖引腳配置為OUTPUT
pinMode(clockPin,OUTPUT);//將clockPin配置為OUTPUT
}
void loop()
{
for(i = 0; i 《10; i ++)
{
digitalWrite(latchPin,LOW);//將鎖存器拉低以開(kāi)始發(fā)送數(shù)據(jù)
shiftOut(dataPin,clockPin,LSBFIRST,digit [i]);//發(fā)送數(shù)據(jù)
digitalWrite(latchPin,HIGH);//將閂鎖拉到高電平以停止發(fā)送數(shù)據(jù)
delay(1000);
}
}
步驟3:

3-直接從Arduino/Atmega 328直接進(jìn)行端口操作
從零開(kāi)始自動(dòng)計(jì)數(shù)到9,然后重復(fù)
代碼
////因?yàn)橹苯佣丝诓僮魇褂靡_0和1,即RX和TX
//分別為引腳,上傳代碼時(shí)必須斷開(kāi)這些引腳
//字節(jié)= {DP ABCDEFG}
字節(jié)i = 0內(nèi)的LED段分配;
字節(jié)數(shù)字[10] = {B01111110,B00110000,B01101101,B01111001,B00110011,B01011011,B01011111,B01110000,B01111111,B01111011};
無(wú)效setup()
{
DDRD = B11111111;//將PORTD(數(shù)字7?0)設(shè)置為輸出
}
void count()
{
for(i = 0; i 《10; i ++)
{
PORTD = digit [i];
delay(1000);
PORTD = 0;
}
}
void loop()
{
count();
}
步驟4:

4-通過(guò)從Arduino/Atmega 328/按鈕計(jì)數(shù)器
按鈕在0到8之間遞增和遞減計(jì)數(shù)器
代碼
//7段LED計(jì)數(shù)器,使用74HC595 8位移位寄存器多路復(fù)用,通過(guò)按鈕開(kāi)關(guān)將計(jì)數(shù)器從0遞增到8到零
//從這些源代碼一起整理代碼-感謝法爾斯
//http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-顯示
//http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-yearold/
const int閂鎖Pin = 5;//引腳連接到74HC595的引腳12(鎖存器)
const int dataPin = 6;//引腳連接到74HC595的引腳14(數(shù)據(jù))
const int clockPin = 7;//引腳連接到74HC595的引腳11(時(shí)鐘)
int upPin = 12;//按鈕連接到引腳12
int downPin = 13;//按鈕連接到引腳12
int currUpState = 1;//將currUpState初始化為HIGH
int currDownState = 1;//將currDownState初始化為HIGH
int prevUpState = 0;
int prevDownState = 0;
int counter = 0;//將計(jì)數(shù)器初始化為零
const字節(jié)編號(hào)[10] =//用顯示段0、1、2、3、4、5、6、7、8、9 《描述每個(gè)數(shù)字/p》
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11100110,
};
void setup()
{
pinMode(latchPin,OUTPUT);//將SR引腳設(shè)置為輸出
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(upPin,INPUT);//將引腳12設(shè)置為按鈕輸入
pinMode(downPin,INPUT);//將引腳13設(shè)置為按鈕輸入
}
void loop()
{
currUpState = digitalRead(upPin);
if(prevUpState!= currUpState)//狀態(tài)從
{//從高變?yōu)榈停粗嗳?/p>
prevUpState = currUpState;
if(currUpState == HIGH)//如果按下按鈕
counter ++;//將計(jì)數(shù)器加1
//延遲(1);
}
if(counter》 8)
計(jì)數(shù)器-= 1;
show(numbers [counter]);//顯示當(dāng)前數(shù)字
currDownState = digitalRead(downPin);
如果(prevDownState!= currDownState)//狀態(tài)從
{//從高到低,反之亦然
prevDownState = currDownState;
if(currDownState == HIGH)//如果按下按鈕
counter- = 1 ;//將計(jì)數(shù)器減1
//delay(1);
}
if(counter 《0)
counter ++ ;
show(numbers [counter]);//顯示當(dāng)前數(shù)字
}
void show(字節(jié)數(shù))
{
////使用循環(huán)和按位AND移至組成
//七段顯示的每一位(從左到右,A =》 G),然后檢查
//看是否應(yīng)該
for(int j = 0; j 《= 7; j ++)
{
byte toWrite = number&(B10000000 》》 j );
if(!toWrite){
Continue;
}//如果所有位均為0,則將其寫入移位寄存器沒(méi)有意義,因此
shiftIt(toWrite);繼續(xù)操作。////否則將其移入寄存器
}
}
void shiftIt(字節(jié)數(shù)據(jù))
{
digitalWrite(latchPin,LOW);//將這8位時(shí)鐘輸入到寄存器中時(shí)將閂鎖引腳LOW
for(int k = 0; k 《= 7; k ++)
{
digitalWrite(clockPin,LOW);//ClockPin在發(fā)送位之前為低電平
if(data&(1 《
{
digitalWrite(dataPin,HIGH);//打開(kāi)“
}
else
{
digitalWrite(dataPin,LOW);//將“關(guān)閉”
}
digitalWrite(clockPin,HIGH);//并為
}
digitalWrite(clockPin,LOW)中的位提供時(shí)鐘//停止移出數(shù)據(jù)
digitalWrite(latchPin,HIGH);//將閂鎖Pin設(shè)置為高電平以鎖定并發(fā)送數(shù)據(jù)
}
步驟5:

5-通過(guò)Arduino/Atmega 328/電位計(jì)計(jì)數(shù)器的移位寄存器多路復(fù)用
電位計(jì)用于在0到8之間遞增和遞減計(jì)數(shù)器
Code
//7段LED計(jì)數(shù)器,使用74HC595 8位移位寄存器進(jìn)行多路復(fù)用,通過(guò)電位計(jì)將計(jì)數(shù)器從0遞增為8到0 資料來(lái)源-感謝法爾斯
//http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-display
//http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-yeard/
const int閂鎖Pin = 5;//引腳連接到74HC595的引腳12(鎖存器)
const int dataPin = 6;//引腳連接到74HC595的引腳14(數(shù)據(jù))
const int clockPin = 7;//引腳連接到74HC595的引腳11(時(shí)鐘)
int counter = 0;//將計(jì)數(shù)器初始化為零
int potReading = 0;
const字節(jié)編號(hào)[10] =//用顯示段0、1、2、3、4、5來(lái)描述每個(gè)數(shù)字6,7,8,9
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11100110,
};
void setup()
{
pinMode(latchPin,OUTPUT);//將SR引腳設(shè)置為輸出
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
void loop()
{
potReading =模擬讀?。ˋ0);
potReading = map(potReading,0,1023,0,8);
{
if(potReading》 8)
potReading-;
show(numbers [potReading]);
}
{
if(potReading 《0)
potReading ++;
show(numbers [potReading] );
}
}
void show(字節(jié)數(shù))
{
//使用循環(huán)和按位AND移至使向上
//七段顯示(從左到右,A =》 G),然后檢查
//是否應(yīng)打開(kāi)
for(int j = 0; j 《= 7; j ++)
{
要寫入的字節(jié)=數(shù)字&(B10000000 》》 j);
if(!toWrite){
continue;
}//如果全部位為0,則無(wú)意義將其寫入移位寄存器,因此請(qǐng)中斷并繼續(xù)執(zhí)行下一段。
shiftIt(toWrite);//否則將其移入寄存器
}
}
void shiftIt(字節(jié)數(shù)據(jù))
{
digitalWrite(latchPin,LOW);//將這8位時(shí)鐘輸入到寄存器
時(shí)將閂鎖引腳LOW設(shè)置為(int k = 0; k 《= 7; k ++)
{
digitalWrite(clockPin,LOW);//ClockPin在發(fā)送位之前為低電平
////請(qǐng)注意,在我們的示例中,對(duì)于
//“ On”,我們需要將pinState設(shè)置為0(LOW),因?yàn)?4HC595吸收電流時(shí)使用常見(jiàn)的
//陽(yáng)極顯示器。如果要使用公共陰極顯示器,則
//將其切換。
if(data&(1 《 {
digitalWrite(dataPin,HIGH);//打開(kāi)“
}
else
{
digitalWrite(dataPin,LOW);//關(guān)閉“
}
digitalWrite(clockPin,HIGH);//并時(shí)鐘
}
digitalWrite(clockPin,LOW);中的位//停止移出數(shù)據(jù)
digitalWrite(latchPin,HIGH);//將閂鎖Pin設(shè)置為高電平以鎖定并發(fā)送數(shù)據(jù)
}
-
LED顯示屏
+關(guān)注
關(guān)注
38文章
1857瀏覽量
103372 -
Arduino
+關(guān)注
關(guān)注
190文章
6514瀏覽量
195856
發(fā)布評(píng)論請(qǐng)先 登錄
力芯微矩陣型恒壓LED驅(qū)動(dòng)芯片為車載顯示屏帶來(lái)“智”變
解析LED顯示屏背后的驅(qū)動(dòng)方案
LED全息顯示屏:1920Hz與3840Hz刷新率對(duì)比解析
碩博電子7寸觸摸顯示屏,支持CAN通信和Codesy編程#工業(yè)顯示屏 #汽車CAN總線? #觸摸顯示屏
戶外顯示屏驅(qū)動(dòng)板的具體防護(hù)措施
LED顯示屏:點(diǎn)亮商業(yè)未來(lái)的璀璨之光
智慧路燈桿上 LED 顯示屏的信息發(fā)布
紅冉LED顯示屏:技術(shù)革新引領(lǐng)未來(lái)發(fā)展
品質(zhì)鑄就輝煌:紅冉LED顯示屏品質(zhì)質(zhì)量保障之道
LED戶外顯示屏的五大優(yōu)勢(shì),你知道嗎?
如何消除LED顯示屏的摩爾紋
LED電子顯示屏的老化程序及處理步驟

使用Arduino驅(qū)動(dòng)7段LED顯示屏的不同方法
評(píng)論