累加器实验
实验目的
每当按下一个按键,数码管显示值加一
代码编写
#include<Arduino.h>
//I/O定义
#define seg_a 2
#define seg_b 3
#define seg_c 4
#define seg_d 5
#define seg_e 6
#define seg_f 7
#define seg_g 8
#define seg_h 9
#define com1 10
#define com2 11
#define com3 12
#define com4 13
#define key 2
int sum = 0;
int flag_up = 1;
unsigned char table[10][8] = {
{
0,0,1,1,1,1,1,1},
{
0,0,0,0,0,1,1,0},
{
0,1,0,1,1,0,1,1},
{
0,1,0,0,1,1,1,1},
{
0,1,1,0,0,1,1,0},
{
0,1,1,0,1,1,0,1},
{
0,1,1,1,1,1,0,1},
{
0,0,0,0,0,1,1,1},
{
0,1,1,1,1,1,1,1},
{
0,1,1,0,1,1,1,1}
};
void setup() {
// put your setup code here, to run once:
//将引脚设置为输出
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);
pinMode(key,INPUT_PULLUP);
}
unsigned char Scankey(){
//按键扫描程序
if(flag_up && digitalRead(key) == LOW){
//有按键按下
flag_up = 0;
delay(20);//延时去抖动
if(digitalRead(key) == LOW){
//有按键按下
return 1;
}
}
if(digitalRead(key) == HIGH){
flag_up = 1;
}
return 0;
}
void loop(){
if(Scankey() == 1){
sum++;
if(sum>9999){
sum = 9999;
}
}
Display(1,sum/1000);
delay(3);
Display(2,sum%1000/100);
delay(3);
Display(3,sum%100/10);
delay(3);
Display(4,sum%10);
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:{
//选择位1
digitalWrite(com1,LOW);
digitalWrite(com2,HIGH);
digitalWrite(com3,HIGH);
digitalWrite(com4,HIGH);
break;
}
case 2:{
//选择位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]);
}