欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于Arduino做的TM1638的電子計時練習程序,可調亮度
[打印本頁]
作者:
Daijt
時間:
2021-8-27 17:52
標題:
基于Arduino做的TM1638的電子計時練習程序,可調亮度
程序主題不長,本人萌新,制作了一個計時程序。
程序是利用Arduino軟件寫的,板子是Arduino UNO, 還有TM1638,8位數碼管。
該程序會從1數到100000,按鍵也可以使用,按第一個按鍵會使亮度降低,第二個會使亮度增高,亮度會利用數字上方的led燈顯示,共8級。
其余的按鍵則不會有用。
改程序并不長,寫法比較直白。程序將會列在下方,并有附件。謝謝大家。
tm1638.jpg
(126.68 KB, 下載次數: 85)
下載附件
2021-8-27 17:49 上傳
Arduino源程序如下:
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
const int TM1638_STB = 7;
const int TM1638_CLK = 9;
const int TM1638_DIO = 8;
int brightness=0x88; //set light,0x88-0x8f
int Led_light=1;
//----------------------------------------------------------------
void writeByte(int value)
{
unsigned char i;
pinMode(TM1638_DIO,OUTPUT);
for(i=0;i<8;i++)
{
digitalWrite(TM1638_CLK,LOW);
if(value&0X01){
digitalWrite(TM1638_DIO,HIGH);
}
else{
digitalWrite(TM1638_DIO,LOW);
}
value>>=1;
digitalWrite(TM1638_CLK,HIGH);
}
digitalWrite(TM1638_CLK,LOW);
}
//-----------------------------------------------------------------------
void sendCommand(uint8_t value)
{
digitalWrite(TM1638_STB, LOW);
writeByte(value);
digitalWrite(TM1638_STB, HIGH);
}
//------------------------------------------------------------------------
void reset()
{
sendCommand(0x40); // set auto increment mode
digitalWrite(TM1638_STB, LOW);
writeByte(0xc0); // set starting address to 0
for(uint8_t i = 0; i < 8; i++)
{
writeByte(0x00);
}
digitalWrite(TM1638_STB, HIGH);
}
//---------------------------------------------------------------------
void setup()
{
//Serial.begin(9600); // 初始化串口
pinMode(TM1638_STB, OUTPUT);
pinMode(TM1638_CLK, OUTPUT);
pinMode(TM1638_DIO, OUTPUT);
reset();
sendCommand(brightness);
}
//---------------------------------------------------------------------
void loop()
{
for(int i = 0;i < 10000000; i++)
{
showNumber(i);
//------------------------------
buttonLoop();
//------------------------------
brightnessSet();
}
}
//--------------------------------------------------------------------------
int readByte(void) //read a byte.
{
unsigned char i;
int value=0;;
pinMode(TM1638_DIO,INPUT); //set input mode.
for(i=0;i<8;i++)
{
value>>=1;
digitalWrite(TM1638_CLK,LOW);
delay(1);
if(digitalRead(TM1638_DIO)==HIGH)
value|=0x80;
digitalWrite(TM1638_CLK,HIGH);
}
digitalWrite(TM1638_CLK,LOW);
pinMode(TM1638_DIO,OUTPUT);//set output mode.
return value;
}
//--------------------------------------------------------------------------
int readButtons(void)
{
int buttons = 0;
digitalWrite(TM1638_STB, LOW);
pinMode(TM1638_DIO, OUTPUT);
shiftOut(TM1638_DIO, TM1638_CLK, LSBFIRST, 0x42);
pinMode(TM1638_DIO, INPUT);
for (uint8_t i = 0; i < 4; i++)
{
int v = readByte() << i;
buttons |= v;
}
pinMode(TM1638_DIO, OUTPUT);
digitalWrite(TM1638_STB, HIGH);
return buttons;
}
//--------------------------------------------------------------------------
void setLed(int value, int position)
{
pinMode(TM1638_DIO, OUTPUT);
sendCommand(0x44);
digitalWrite(TM1638_STB, LOW);
writeByte(0xC1 + (position << 1));
writeByte(value);
digitalWrite(TM1638_STB, HIGH);
}
//-----------------------------------------------------------------------
void showNumber(int number)
{
const int digital[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
int pos = 7;
while(pos >=0){
digitalWrite(TM1638_STB, LOW);
writeByte(0xc0 + pos * 2);
if(number > 0){
int dig = number % 10;
writeByte(digital[dig]);
number /= 10;
}
else{
writeByte(0);
}
digitalWrite(TM1638_STB, HIGH);
pos--;
}
}
//------------------------------------------------------------------
void buttonLoop()
{
int buttons = readButtons();
int xx;
for(int position = 0; position < 8; position++)
{
int mask = 0x01 << position;
setLed(buttons & mask ? 1 : 0 , position); // ?前面條件為真,取:前面的1
switch(brightness)
{
case 0x88:
setLed(1 , 8);
break;
case 0x89:
setLed(1 , 8);setLed(1 , 1);
break;
case 0x8a:
setLed(1 , 8);setLed(1 , 1);setLed(1 , 2);
break;
case 0x8b:
setLed(1 , 8);setLed(1 , 1);setLed(1 , 2);setLed(1 , 3);
break;
case 0x8c:
setLed(1 , 8);setLed(1 , 1);setLed(1 , 2);setLed(1 , 3);setLed(1 , 4);
break;
case 0x8d:
setLed(1 , 8);setLed(1 , 1);setLed(1 , 2);setLed(1 , 3);setLed(1 , 4);setLed(1 , 5);
break;
case 0x8e:
setLed(1 , 8);setLed(1 , 1);setLed(1 , 2);setLed(1 , 3);setLed(1 , 4);setLed(1 , 5);setLed(1 , 6);
break;
case 0x8f:
setLed(1 , 8);setLed(1 , 1);setLed(1 , 2);setLed(1 , 3);setLed(1 , 4);setLed(1 , 5);setLed(1 , 6);setLed(1 , 7);
break;
}
}
}
//------------------------------------------------------------------
void brightnessSet()
{
int buttons = readButtons();
switch(buttons)
{
case 1:
if (brightness > 0x88)
{
brightness--;
sendCommand(brightness);
}
else brightness = 0x88;
delay(200);
break;
case 2:
if (brightness < 0x8f)
{
brightness++;
sendCommand(brightness);
}
else brightness = 0x8f;
delay(200);
break;
}
}
作者:
Tianxiayou
時間:
2022-5-1 17:42
我的軟件燒上去后,上傳有錯誤信息
作者:
Tianxiayou
時間:
2022-5-5 11:33
我裝上去的這個軟件顯示錯誤
作者:
Tianxiayou
時間:
2022-5-5 11:34
我裝上去的這個軟件顯示錯誤
作者:
Tianxiayou
時間:
2022-5-5 11:42
下載不了 請問怎樣下載
作者:
heicad
時間:
2022-5-5 18:32
Tianxiayou 發表于 2022-5-5 11:42
下載不了 請問怎樣下載
還下載干什么?直接復制粘貼代碼到編譯器不是一樣嗎?
樓主說了附件里面就是以上代碼,所以根本不需要下載
你估計沒有樓主的板子吧,你把代碼從網頁上復制粘貼過去后,需要更改io端口為你自己的板子的電路連接
作者:
bboroo
時間:
2022-12-20 10:38
用ESP8266 NODEMCU的板子試過,只要把對應的接線口修改一下就能正常運行,謝謝樓主,剛好想找TM1638調節亮度的程序。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1