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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4位數碼管單片機程序最后的語句求大神解釋一波!

[復制鏈接]
跳轉到指定樓層
樓主
ID:253661 發(fā)表于 2017-11-30 02:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一個4位數碼管程序  程序最后的語句
unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > 0) {
    previousMillis = currentMillis;
previousMillis前面一直沒有定義和賦值,為啥可以使用啊?

還有
for(int a=0;a<4;a++) //循環(huán)寫位碼,任何時刻只有1位數碼管選通,之前全部關閉,然后再選通需要的那位數碼管
       digitalWrite(segPins[a],1);//
     digitalWrite(segPins[ i],0);//
     deal(displayTemp[ i]);//讀取對應的段碼值
    i++;
    if(i==4) //4位結束后重新循環(huán)
      i=0;
  }
中for 循環(huán)體沒有用{ } 括起來為啥可以正常編譯?if也同樣
大神指導一下!!






int ledCount=8;
int segCount=4;

long previousMillis = 0;
//定義段碼,這里是共陰段碼,可以使用數碼管段碼軟件改變數組值或者任意顯示形狀const unsigned char dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//位碼
//unsigned char const dofly_WeiMa[]={0,1,2,3};
int ledPins[] = {
  12,8,5, 3, 2, 11, 6, 4, };   // 11,7,4,2,1,10,5,3 注釋是數碼管實際引腳數,和芯片一樣,逆時針數
int segPins[] = {
  13,10,9,7
};
unsigned char displayTemp[4];//顯示緩沖區(qū)
void setup() {
// 循環(huán)設置,把對應的端口都設置成輸出
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT); }
  for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {
    pinMode(segPins[thisSeg], OUTPUT);
  }
}
// 數據處理,把需要處理的byte數據寫到對應的引腳端口。
void deal(unsigned char value){
for(int i=0;i<8;i++)
   digitalWrite(ledPins[ i],bitRead(value,i));//使用了bitWrite函數,非常簡單
   // !bitRead(value,i),這里前面加!(非運算符號),取決于使用的是共陰還是共陽數碼管。
}
// 主循環(huán)
void loop() {

   static unsigned int num;//定義一個數據
   static unsigned  long lastTime=0;

  if (millis() - lastTime >= 1000) {
    lastTime = millis();
    //serialOutput();
    num++;
  }
  //displayTemp[0]=dofly_DuanMa[num/1000];       //動態(tài)顯示
  //displayTemp[1]=dofly_DuanMa[(num%1000)/100];
  //displayTemp[2]=dofly_DuanMa[((num%1000)%100)/10];
  //displayTemp[3]=dofly_DuanMa[((num%1000)%100)%10];
  displayTemp[0]=dofly_DuanMa[1]; //靜態(tài)顯示
  displayTemp[1]=dofly_DuanMa[2];
  displayTemp[2]=dofly_DuanMa[3];
  displayTemp[3]=dofly_DuanMa[4];
  static int i;
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > 0) {
    previousMillis = currentMillis;   

     deal(0);// 清除“鬼影”
     for(int a=0;a<4;a++) //循環(huán)寫位碼,任何時刻只有1位數碼管選通,之前全部關閉,然后再選通需要的那位數碼管
       digitalWrite(segPins[a],1);//
     digitalWrite(segPins[ i],0);//
     deal(displayTemp[ i]);//讀取對應的段碼值
    i++;
    if(i==4) //4位結束后重新循環(huán)
      i=0;
  }


  }


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

使用道具 舉報

沙發(fā)
ID:194257 發(fā)表于 2017-11-30 08:48 | 只看該作者
程序第三行定義了long previousMillis = 0; 后面的問題都是最基本的C語言語法,找本C語言的書查下就知道了。

評分

參與人數 1黑幣 +5 收起 理由
ZFDPJ + 5 贊一個!

查看全部評分

回復

使用道具 舉報

板凳
ID:251323 發(fā)表于 2017-11-30 11:57 | 只看該作者
for循環(huán)體的主體,如果只有一個語句,大括號{}是可以省略的,這里 for(int a=0;a<4;a++);digitalWrite(segPins[a],1);只有一句,所以省略了
回復

使用道具 舉報

地板
ID:222948 發(fā)表于 2017-11-30 12:03 | 只看該作者
中for 循環(huán)體沒有用{ } 括起來為啥可以正常編譯?if也同樣        不一定要括號啊沒括號被認為是只判斷for或者if下面一條語句,{}是在一條或者多條需要判斷的時候才用的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产成人精品国产成人亚洲 | 国产黄色免费网站 | 亚洲永久 | 一区二区三区网站 | a级免费视频 | 岛国在线免费观看 | 韩国精品一区 | 中文在线а√在线8 | 婷婷久久网 | 午夜视频免费在线 | 一道本在线 | 国产精品国产a | h视频在线观看免费 | 欧美日韩国产精品一区二区 | 亚洲精品国产第一综合99久久 | 欧美大片一区二区 | 91极品欧美视频 | 伊人伊人 | 欧美在线一区二区三区 | 国产成人在线看 | 亚洲一区二区在线播放 | 91av在线视频观看 | 91影视| av喷水 | 激情影院久久 | 久久精品二区 | 日本精品一区二区三区在线观看视频 | 国产精品一区二区免费看 | 成人国产精品视频 | 精品国产乱码久久久久久蜜退臀 | 精品免费 | 日韩精品一区二区三区中文在线 | 福利电影在线 | 久久精品成人 | 亚洲视频www | 一区二区免费 | 婷婷桃色网 | 久久久久久久一区二区 | 日韩www| 日韩一区av | 亚洲精品黄 |