無意拆了一個(gè)萬利達(dá)的衛(wèi)星接收盒晦嵌,控制面板有幾個(gè)按鈕、一個(gè)3位七段數(shù)碼管拷姿、一個(gè)74hc164惭载、一個(gè)IR,排線的接口分別是V5+响巢、sda描滔、clk、lock踪古、ir含长、det、o伏穆、t茎芋、k、GND蜈出。查了74hc164發(fā)現(xiàn)是一個(gè)串口數(shù)據(jù)轉(zhuǎn)并口田弥,8位并口連接7段數(shù)碼管。我就納悶了一個(gè)hc164怎么能在三位顯示不同的數(shù)值呢铡原?利用余輝偷厦,第一次與第一次打印同一字母,間隔3*(3~7)人眼分辨不了燕刻。原理是這樣的:第一步顯示第一位0只泼,delay(3-7毫秒),第2步顯示第二位1,delay(3-7秒)卵洗,第三步顯示第3位2请唱,delay(3-7秒),然后loop循環(huán)过蹂,那么第一位就是0毫秒十绑,9毫秒,18毫秒.....顯示0酷勺;3本橙、12、21毫秒顯示1脆诉;6甚亭、15贷币、24毫秒顯示2;間隔9毫秒的刷新率人眼分辨不了亏狰。最多間隔:如果是30毫秒刷新率是能看到數(shù)字在閃爍役纹。最少間隔:如果第一位和第二位小于delay(1),則分辨不出數(shù)字暇唾。
#include <Arduino.h>
// use binary notation to discribe our number layouts
byte none = B00000001 ;//此處由于是接線不是標(biāo)準(zhǔn)字管,所以得自己試驗(yàn)是如何編碼
byte zero = B00000011 ;
byte one = B00000110;//不對
byte two = B11011010;
byte three = B11010110;
byte four = B10100110;
byte five = B11110100;
byte six = B11111100;
byte seven = B01000110;
byte eight = B11111110;
byte nine = B11110110;
#define COM1 4
#define COM2 5
#define COM3 6
#define data 2
#define clock 3
void setup()
{
pinMode(clock, OUTPUT); // make the clock pin an output
pinMode(data , OUTPUT); // make the data pin an output3
pinMode(COM1,OUTPUT);
pinMode(COM2,OUTPUT);
pinMode(COM3,OUTPUT);
}
void loop()
{
//shiftOut(data, clock, LSBFIRST, none);
Display(1,zero); //第1位顯示1
delay(3);
Display(2,one); //第2位顯示2
delay(3);
Display(3,two); //第3位顯示3
delay(3);
}
void Display(unsigned char com,unsigned char num) //顯示函數(shù),com可選數(shù)值范圍1-4信不,num可選數(shù)值范圍0-9
{
shiftOut(data, clock, LSBFIRST, none);//去除余輝
switch(com) //選通位選
{
case 1:
digitalWrite(COM1,LOW); //選擇位1
digitalWrite(COM2,HIGH);
digitalWrite(COM3,HIGH);
break;
case 2:
digitalWrite(COM1,HIGH);
digitalWrite(COM2,LOW); //選擇位2
digitalWrite(COM3,HIGH);
break;
case 3:
digitalWrite(COM1,HIGH);
digitalWrite(COM2,HIGH);
digitalWrite(COM3,LOW); //選擇位3
break;
default:break;
}
shiftOut(data, clock, LSBFIRST, num);//顯示
}
七段數(shù)碼管顯示.jpg