久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4712|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于Arduino做的TM1638的電子計(jì)時(shí)練習(xí)程序,可調(diào)亮度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
程序主題不長(zhǎng),本人萌新,制作了一個(gè)計(jì)時(shí)程序。
程序是利用Arduino軟件寫(xiě)的,板子是Arduino UNO, 還有TM1638,8位數(shù)碼管。

該程序會(huì)從1數(shù)到100000,按鍵也可以使用,按第一個(gè)按鍵會(huì)使亮度降低,第二個(gè)會(huì)使亮度增高,亮度會(huì)利用數(shù)字上方的led燈顯示,共8級(jí)。
其余的按鍵則不會(huì)有用。
改程序并不長(zhǎng),寫(xiě)法比較直白。程序?qū)?huì)列在下方,并有附件。謝謝大家。



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;
    }
}  

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1022586 發(fā)表于 2022-5-1 17:42 來(lái)自觸屏版 | 只看該作者
我的軟件燒上去后,上傳有錯(cuò)誤信息
回復(fù)

使用道具 舉報(bào)

板凳
ID:1022586 發(fā)表于 2022-5-5 11:33 來(lái)自觸屏版 | 只看該作者
我裝上去的這個(gè)軟件顯示錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

地板
ID:1022586 發(fā)表于 2022-5-5 11:34 來(lái)自觸屏版 | 只看該作者
我裝上去的這個(gè)軟件顯示錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

5#
ID:1022586 發(fā)表于 2022-5-5 11:42 來(lái)自觸屏版 | 只看該作者
下載不了 請(qǐng)問(wèn)怎樣下載
回復(fù)

使用道具 舉報(bào)

6#
ID:262 發(fā)表于 2022-5-5 18:32 | 只看該作者
Tianxiayou 發(fā)表于 2022-5-5 11:42
下載不了 請(qǐng)問(wèn)怎樣下載

還下載干什么?直接復(fù)制粘貼代碼到編譯器不是一樣嗎?
樓主說(shuō)了附件里面就是以上代碼,所以根本不需要下載

你估計(jì)沒(méi)有樓主的板子吧,你把代碼從網(wǎng)頁(yè)上復(fù)制粘貼過(guò)去后,需要更改io端口為你自己的板子的電路連接
回復(fù)

使用道具 舉報(bào)

7#
ID:634587 發(fā)表于 2022-12-20 10:38 | 只看該作者
用ESP8266  NODEMCU的板子試過(guò),只要把對(duì)應(yīng)的接線口修改一下就能正常運(yùn)行,謝謝樓主,剛好想找TM1638調(diào)節(jié)亮度的程序。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕不卡在线88 | 精品免费国产视频 | 嫩草懂你的影院入口 | 成人免费一级 | 日韩视频免费 | 色婷婷国产精品综合在线观看 | 91欧美| 一区二区在线 | 在线一级片 | 97超级碰碰 | 欧美国产日韩一区二区三区 | 鲁一鲁资源影视 | 精品1区2区3区4区 | 黄色免费网址大全 | 国产精品国产三级国产aⅴ无密码 | 久久成人国产精品 | 99国产精品久久久久久久 | 欧美精品三区 | 国产伦一区二区三区久久 | jvid精品资源在线观看 | 热re99久久精品国产99热 | 国产精品一区二区三区四区 | 午夜网站视频 | 天天看天天操 | 亚洲一区二区网站 | 黄色av免费网站 | 午夜资源 | 亚洲精品乱码久久久久久黑人 | 四虎在线视频 | 91在线观看 | 黑人巨大精品欧美一区二区免费 | 久久婷婷香蕉热狠狠综合 | 天堂中文字幕av | 国产亚洲一区在线 | 免费爱爱视频 | 夜夜骑首页 | 国产精品国产精品 | 国产美女久久久 | 麻豆一区一区三区四区 | 国产伦精品一区二区三区照片91 | 国产成人免费在线 |