#include const int analogInPin = A3; // Analog input pin that the potentiometer is attached to int sensorValue = 0; // value read from the pot int outputValue = 0; // value output to the PWM (analog out) int k1; int k2; int k3; #define LED 3 #define KEY A2 int KEY_NUM = 0; #define SEG_A 8 #define SEG_B 4 #define SEG_C 14 #define SEG_D 16 #define SEG_E 10 #define SEG_F 7 #define SEG_G 15 #define SEG_H A1 #define COM1 9 #define COM2 6 #define COM3 5 #define COM4 A0 unsigned char table[11][8] = { // h g f e d c b a {0, 0, 1, 1, 1, 1, 1, 1}, //0 {0, 0, 0, 0, 0, 1, 1, 0}, //1 {0, 1, 0, 1, 1, 0, 1, 1}, //2 {0, 1, 0, 0, 1, 1, 1, 1}, //3 {0, 1, 1, 0, 0, 1, 1, 0}, //4 {0, 1, 1, 0, 1, 1, 0, 1}, //5 {0, 1, 1, 1, 1, 1, 0, 1}, //6 {0, 0, 0, 0, 0, 1, 1, 1}, //7 {0, 1, 1, 1, 1, 1, 1, 1}, //8 {0, 1, 1, 0, 1, 1, 1, 1}, //9 {0, 0, 1, 1, 1, 0, 0, 1} //C }; void setup() { pinMode(LED,OUTPUT); pinMode(KEY,INPUT_PULLUP); Serial.begin(9600); pinMode(SEG_A,OUTPUT); pinMode(SEG_B,OUTPUT); pinMode(SEG_C,OUTPUT); pinMode(SEG_D,OUTPUT); pinMode(SEG_E,OUTPUT); pinMode(SEG_F,OUTPUT); pinMode(SEG_G,OUTPUT); pinMode(SEG_H,OUTPUT); pinMode(COM1,OUTPUT); pinMode(COM2,OUTPUT); pinMode(COM3,OUTPUT); pinMode(COM4,OUTPUT); } void loop() { // read the analog in value: sensorValue = analogRead(analogInPin); // map it to the range of the analog out: outputValue = map(sensorValue, 0, 1023, 0, 255); // change the analog out value: ScanKey(); if(KEY_NUM == 1) { digitalWrite(LED,HIGH); delay(200); digitalWrite(LED,LOW); } k1 = outputValue % 10; k2 = ((outputValue -k1)/10) %10; k3 = ((outputValue -k1-k2*10)/100) %10; // print the results to the Serial Monitor: Serial.print("sensor = "); Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); // wait 2 milliseconds before the next loop for the analog-to-digital // converter to settle after the last reading: delay(2); Display(1,10); delay(3); Display(2,k3); delay(3); Display(3,k2); delay(3); Display(4,k1); delay(3); } void Display(unsigned char com,unsigned char num) { digitalWrite(SEG_A,LOW); digitalWrite(SEG_B,LOW); digitalWrite(SEG_C,LOW); digitalWrite(SEG_D,LOW); digitalWrite(SEG_E,LOW); digitalWrite(SEG_F,LOW); digitalWrite(SEG_G,LOW); digitalWrite(SEG_H,LOW); switch(com) { case 1: digitalWrite(COM1,LOW); digitalWrite(COM2,HIGH); digitalWrite(COM3,HIGH); digitalWrite(COM4,HIGH); break; case 2: digitalWrite(COM1,HIGH); digitalWrite(COM2,LOW); digitalWrite(COM3,HIGH); digitalWrite(COM4,HIGH); break; case 3: digitalWrite(COM1,HIGH); digitalWrite(COM2,HIGH); digitalWrite(COM3,LOW); digitalWrite(COM4,HIGH); break; case 4: digitalWrite(COM1,HIGH); digitalWrite(COM2,HIGH); digitalWrite(COM3,HIGH); digitalWrite(COM4,LOW); break; default:break; } digitalWrite(SEG_A,table[num][7]); digitalWrite(SEG_B,table[num][6]); digitalWrite(SEG_C,table[num][5]); digitalWrite(SEG_D,table[num][4]); digitalWrite(SEG_E,table[num][3]); digitalWrite(SEG_F,table[num][2]); digitalWrite(SEG_G,table[num][1]); digitalWrite(SEG_H,table[num][0]); } void ScanKey() { KEY_NUM = 0; if(digitalRead(KEY) == LOW) { delay(20); if(digitalRead(KEY) == LOW) { KEY_NUM = 1; while(digitalRead(KEY) == LOW); } } }