11.累加器实验
来源:互联网 发布:天涯明月刀iu捏脸数据 编辑:程序博客网 时间:2024/05/16 16:04
实验现象:每当按下一个按键,数码管显示值加一。
理论学习:熟悉四位数码管显示原理,回顾以前实验中按键的写法。编写出需要的实验效果。
程序代码:
#include <Arduino.h>#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 0int SUM = 0;int Flag_up = 1;unsigned char table[10][8] ={{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};void setup(){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);//按键IO设定为带上拉输入}void loop(){ if( ScanKey() == 1)//当有按键按下时 { SUM++;//SUM加一 if(SUM>9999)//最大值9999,不再累加 { SUM = 9999; } } Display(1,SUM/1000);//显示SUM千位值 delay(3); Display(2,SUM%1000/100);//显示SUM百位值 delay(3); Display(3,SUM%100/10);//显示SUM十位值 delay(3); Display(4,SUM%10);//显示SUM个位值 delay(3);}unsigned char ScanKey()//按键扫描程序,返回键值{ if(Flag_up && digitalRead(KEY) == LOW)//当Flag_up = 1并且按键按下时 { Flag_up = 0;//清空Flag_up delay(20);//延时去抖动 if(digitalRead(KEY) == LOW)//按键按下 { return 1;//返回键值1 } } if(digitalRead(KEY) == HIGH)//按键松开时候 { Flag_up = 1;//置位Flag_up } return 0;//返回键值0}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);//选择位1digitalWrite(COM2,HIGH);digitalWrite(COM3,HIGH);digitalWrite(COM4,HIGH);break;case 2:digitalWrite(COM1,HIGH);digitalWrite(COM2,LOW);//选择位2digitalWrite(COM3,HIGH);digitalWrite(COM4,HIGH);break;case 3:digitalWrite(COM1,HIGH);digitalWrite(COM2,HIGH);digitalWrite(COM3,LOW);//选择位3digitalWrite(COM4,HIGH);break;case 4:digitalWrite(COM1,HIGH);digitalWrite(COM2,HIGH);digitalWrite(COM3,HIGH);digitalWrite(COM4,LOW);//选择位4break;default:break;}digitalWrite(SEG_A,table[num][7]);//a查询码值表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]);}
0 0
- 11.累加器实验
- 累加器
- Spark累加器
- 累加器.exe
- 32位流水线累加器
- Shell脚本--累加器
- Aggregate序列累加器
- matlab知识点累加器
- C\C++知识点累加器
- Spark累加器使用
- 由static制作累加器
- Spark广播和累加器
- RP累加器.cpp
- 累加器的方差(algs4)
- spark自定义累加器
- spark广播,累加器
- JavaSpark-编程进阶-累加器
- Spark自定义累加器
- 关于移位运算符的知识点
- 关于iOS自动布局
- C++ 线程安全的单例模式
- eclipse远程调试Tomcat, Hadoop集群等
- c++中的单例模式
- 11.累加器实验
- 线性代数(三十) :特征值与特征向量的性质
- Android学习之——JAVA中的Object
- 通过VMware克隆linux虚拟机后无法联网,eth0找不到的解决方案
- 黑马程序员_String
- IAR下载: Failed to get cpu status after 4 retrie 的解决方法
- 1387斐波那契数列
- C#面向对象
- 多维数组和多级指针