4-江科大-数码管

目录

正文

image-20240417231234367

四位一体数码管

image-20240418215149316

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
静态数码管显示
*/
void main(){


P2_4 = 1;
P2_3 = 0;
P2_2 = 1;
P0 = 0x7d;

while(1){


}
}

封装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
@authro leoeric
@param location
@param number
@return null
@description
*/
unsigned char NixieTable[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void showNixieTube(unsigned char location,number){
switch(location){
case 1: P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
case 2: P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
case 3: P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
case 4: P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
case 5: P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
case 6: P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
case 7: P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
case 8: P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
}
P0 = NixieTable[number];

}
/*
静态数码管显示
*/
void main(){
showNixieTube(7,2);
while(1){

}
}

动态显示多位数码管

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
unsigned char NixieTable[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void showNixieTube(unsigned char location,number){
switch(location){
case 1: P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
case 2: P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
case 3: P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
case 4: P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
case 5: P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
case 6: P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
case 7: P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
case 8: P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
}
P0 = NixieTable[number];

}
/*
动态数码管显示
*/
void main(){

while(1){
showNixieTube(3,5);
showNixieTube(2,3);
showNixieTube(1,6);
showNixieTube(4,7);
}
}

问题

数码管消影问题:在快速切换时,数码管上一位数据会串到下一位数据

把段选清零

delay 1 毫秒,然后清零

1
2
DelayMs(1);
P0 = 0x00;

image-20240418223449543

TODO

多位显示数码管原理

3-江科大-按键控制LED

目录

正文

image-20240416225241997

image-20240416225403237

image-20240416230709612

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//按键控制LED

void main(){

while(1){

if(P3_1 == 0){
DelayMs(20);
while(P3_1 == 0);
if(P3_1 == 1){
P2_0 = ~P2_0;
}
}

}


}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//按键控制流水灯
void main(){


unsigned char LEDNum;
while(1){
if(P3_1 == 0){
DelayMs(20);
while(P3_1 == 0);
LEDNum ++;
P2 = ~LEDNum;
}

}


}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
按键控制LED流水灯(按下按键左移)
TODO 按下另外一个按键右移
*/
unsigned char LEDNum;

void main(){


while(1){
if(P3_1 == 0){
DelayMs(20);
while(P3_1 == 0);
DelayMs(20);
LEDNum++;
if(LEDNum >= 8){
LEDNum = 0;
}
P2 = ~(0x01 << LEDNum);

}

}
}

2-江科大-点灯

目录

正文

image-20240416215800777

image-20240416220801779

1
2
3
4
5
6
7
8
9
10
11
12
#include <REGX52.H>
//点亮第一个LED,通过控制寄存器写出数据

void main(){

// 1为高电平,0为低电平
P2=0xfe; // 1111 1110
while(1){

}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <INTRINS.H>

//延时函数 500ms
void Delay500ms(){
unsigned char i,j,k;

_nop_();
i = 4;
j= 205;
k = 187;

do{
do{
while(--k);

}while(--j);
}while(--i);

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <REGX52.H>
#include <INTRINS.H>
//led闪烁

//延时函数 500ms
void Delay500ms(){
unsigned char i,j,k;

_nop_();
i = 4;
j= 205;
k = 187;

do{
do{
while(--k);

}while(--j);
}while(--i);

}

void main(){


while(1){
// 1为高电平,0为低电平
P2=0xfe; // 1111 1110
Delay500ms();
P2=0xff; // 1111 1110
Delay500ms();
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <REGX52.H>
#include <INTRINS.H>
//LED流水灯

//延时函数 500ms
void Delay500ms(){
unsigned char i,j,k;

//什么也不做,可以删掉,但是未了解细节TODO
_nop_();
i = 4;
j= 205;
k = 187;

do{
do{
while(--k);

}while(--j);
}while(--i);

}

void main(){


while(1){
// 1为高电平,0为低电平
P2=0xfe; // 1111 1110
Delay500ms();
P2=0xfd; // 1111 1110
Delay500ms();
// 1为高电平,0为低电平
P2=0xfb; // 1111 1110
Delay500ms();
P2=0xf7; // 1111 1110
Delay500ms();
// 1为高电平,0为低电平
P2=0xef; // 1111 1110
Delay500ms();
P2=0xdf; // 1111 1110
Delay500ms();
// 1为高电平,0为低电平
P2=0xbf; // 1111 1110
Delay500ms();
P2=0x7f; // 1111 1110
Delay500ms();
}

}

image-20240416224202037