2020年2月6日 星期四
四個dip
/* 指撥開關加七段顯示器實驗 */
const int dipsw[] = { 9, 10, 11, 12};// 四位元指撥開關,對應MSB~LSB
const byte Weight[] = { 8, 4, 2, 1};// 每一位元對應到的加權值,對應2^3, 2^2, 2^1, 2^0
int seg7[] = {2, 3, 4, 5, 6, 7, 8};// 七段控制腳陣列,分別對應a~g段
char seg7Table[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, \
0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E// 七節顯示器編碼表
};
int i, j; // 迴圈用的變數
int num ;
int reading;
void setup()// 此 setup 程序只有在微控制器按 reset 時執行一次
{
for (i = 0; i < 7; i++) // 初始化指定的數位腳位為輸出模式
{
pinMode(seg7[i], OUTPUT);
}
for (i = 0; i < 4; i++) {
pinMode(dipsw[i], INPUT);
}
}
//純C使用前要先宣告、定義為了省時間,
//現在新的complier都可以接受fcn放的地方,可能混合java、C
//1973 1974發明C語言
void OutPort(byte data)// 將指定值顯示在七段顯示器上,最低位元為a,依序為 abcdefg
{
for (j = 0; j < 7; j++) {
if (data % 2 == 1) // 取出 dat 的最低位元
digitalWrite(seg7[j], HIGH); // 若為 1 代表該段要亮, 輸出高準位
else
digitalWrite(seg7[j], LOW); // 若為 0 代表該段要滅, 輸出低準位
data = data / 2; // 除2,進行下一位元的處理
}
}
void loop()// 此 loop 程序會一直重覆執行
{
/*如果沒有在35行附近統計之前先把變數清為0,則之前舊的值會殘留,導致整個程式錯誤」
每次都要清,這樣才能夠每次統計都是正確地址
統計值加=慢慢做,清為0才可以統計,算十個班級,每進入下一個班級之前為清為0,才可以算平均,你沒有清不會是正確的。
用全域變數,操作時第一次統計到,之後可能沒清除,盡量不用全域變數,盡量設在區域變數,因為只有它在使用。
用全域變數是有很多個函數都會用到
*/
num = 0;
for (i = 0; i < 4; i++)
{
reading = digitalRead(dipsw[i]); // 讀取指撥開關狀態
if (reading == HIGH) num = num + Weight[i];// 往上撥時為LOW,往下撥為HIGH,為LOW時要加上加權值
}
OutPort(~seg7Table[num]); // 取出陣列中對應的數字編碼表
}
訂閱:
張貼留言 (Atom)
algorithm
#include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv) { for(int j=2;j<=100;j++)//j...
-
本文旨在補充《 超圖解Arduino互動設計入門 》第18章「RFID無線識別裝置與問答遊戲製作」單元,書本採用的RFID讀卡機模組是採用9600bps, TTL序列通訊介面,RFID的通訊頻率為125KHz。這種模組的接線和程式都很簡單,每當感測到RFID卡,讀卡機就把...
-
/* 多重按鈕開關 */ //==宣告區================================ #include // 定義8051暫存器之標頭檔,P2-17~19 #include "myio.h" // 自己寫的I/O程式庫 sbit PB...
沒有留言:
張貼留言