- 实验目的要求
根据原理图完成仿真电路的绘制;能够根据设计需求完成代码编写,实现功能;能够独立完成软件、硬件功能测试
- 实验内容
(1)阅读普中开发板原理图,在proteus上完成仿真电路图设计,包括LED灯(使用P3口)、矩阵按键。
(2)矩阵按键功能分配:最左上角按键K0---流水灯启动,最右上角按键K3---流水灯停止,
最左下角按键K12---流水灯从上往下流水;最右下角按键K15---流水灯从下往上流水。
同时在最右面的数码管上显示对应的按键号码(静态显示即可),注意初始状态时哪个按键都没有按下过,流水灯全灭,数码管全灭。
- 实验过程
流程图:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSQptkNQVXS2IULZVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxSUhxGatJGbwhFT1Y0Mk9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyMjN1kzN3QmN0MGNjNWN4ADOiRTOlJmZ5MTYhJ2MlhzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
仿真电路图:
实现代码:
#include<reg51.h>
char code led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
char code key_buf[] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
char code led[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
char getkey(void){
char key_scan[] = {0xef,0xdf,0xbf,0x7f};
char i = 0, j = 0;
for (i = 0; i < 4; i++)
{
P2 = key_scan[i];
if((P2&0x0f) != 0x0f){
for(j = 0; j< 16; j++){
if (key_buf[j] == P2)
return j;
}
}
}
return -1;
}
void main(void){
char k;
char key = 0;
P0 = 0x00;
P3 = 0xff;
while(1){
key = getkey();
if(key != -1){
P0 = led_mod[key];
if (key == 15){
for (k = 0; k < 8; k++){
P3 = led[k];
delay10ms();
delay10ms();
}
}
else if(key == 12){
for (k = 0; k < 8 ; k++){
P3 = led[7 - k];
delay10ms();
delay10ms();
}
}
else if(key = 3){
break;
}
}
}
}
运行截图:
- 实验总结
- 进一步掌握了通过键码的方式对矩阵键盘的扫描,也学习了LED流水灯的电路结构。
- 掌握了基本的流水灯的设计原理。
- 学习了流程图的绘制。