四位共阴数码管实验
实验目的
数码管1-4位分别显示1 2 3 4
理论学习
数码管动态扫描:动态显示的特点是将所有的位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大简化了硬件电路。选亮数码管采用动态扫描显示。所谓的动态扫描显示即是轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼的视觉暂留作用,使人的感觉好像各位数码管同时都在显示
原理图
代码编写
#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
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);
}
void loop(){
Display(1,1);//第一位显示1
delay(3);
Display(2,2);//第一位显示2
delay(3);
Display(3,3);//第一位显示3
delay(3);
Display(4,4);//第一位显示4
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]);
}