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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4525|回復: 6
打印 上一主題 下一主題
收起左側

基于Arduino做的TM1638的電子計時練習程序,可調亮度

[復制鏈接]
跳轉到指定樓層
樓主
程序主題不長,本人萌新,制作了一個計時程序。
程序是利用Arduino軟件寫的,板子是Arduino UNO, 還有TM1638,8位數碼管。

該程序會從1數到100000,按鍵也可以使用,按第一個按鍵會使亮度降低,第二個會使亮度增高,亮度會利用數字上方的led燈顯示,共8級。
其余的按鍵則不會有用。
改程序并不長,寫法比較直白。程序將會列在下方,并有附件。謝謝大家。



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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1022586 發表于 2022-5-1 17:42 來自手機 | 只看該作者
我的軟件燒上去后,上傳有錯誤信息
回復

使用道具 舉報

板凳
ID:1022586 發表于 2022-5-5 11:33 來自手機 | 只看該作者
我裝上去的這個軟件顯示錯誤
回復

使用道具 舉報

地板
ID:1022586 發表于 2022-5-5 11:34 來自手機 | 只看該作者
我裝上去的這個軟件顯示錯誤
回復

使用道具 舉報

5#
ID:1022586 發表于 2022-5-5 11:42 來自手機 | 只看該作者
下載不了 請問怎樣下載
回復

使用道具 舉報

6#
ID:262 發表于 2022-5-5 18:32 | 只看該作者
Tianxiayou 發表于 2022-5-5 11:42
下載不了 請問怎樣下載

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

你估計沒有樓主的板子吧,你把代碼從網頁上復制粘貼過去后,需要更改io端口為你自己的板子的電路連接
回復

使用道具 舉報

7#
ID:634587 發表于 2022-12-20 10:38 | 只看該作者
用ESP8266  NODEMCU的板子試過,只要把對應的接線口修改一下就能正常運行,謝謝樓主,剛好想找TM1638調節亮度的程序。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精选一区二区 | 亚洲手机在线 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 日本在线你懂的 | 国产亚洲高清视频 | 日本亚洲精品成人欧美一区 | 一区二区三区四区在线视频 | 超碰97在线免费 | 欧美一区二区三区在线看 | 爱草在线 | 国产欧美精品在线观看 | 欧美精品一区久久 | 日本特黄特色aaa大片免费 | 欧美一区二区三区大片 | 亚洲高清在线 | 波多野结衣先锋影音 | 最新超碰 | 自拍偷拍精品 | 国产精品视频一区二区三区不卡 | 一区二区三区高清不卡 | 日本久草| 国产成人精品一区二区三 | 日韩精品视频中文字幕 | 亚洲综合视频 | 久久久久久久久久久久久9999 | 美美女高清毛片视频免费观看 | 日韩精品免费在线观看 | 一级毛片色一级 | 麻豆久久久久久 | 免费成人高清在线视频 | 国产成人精品久久二区二区91 | 日韩美女在线看免费观看 | 日韩欧美成人一区二区三区 | 日韩精品在线网站 | 一区二区视频在线 | a级黄色网 | 狠狠入ady亚洲精品经典电影 | 日韩欧美二区 | 午夜视频网站 | 亚洲综合二区 | 欧美日韩中文字幕在线 |