单片机点阵显示主程序并翻译
时间: 2023-11-11 21:04:17 浏览: 38
以下是单片机点阵显示主程序并翻译:
```
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA = P2^2; //定义LSA(地址锁存器)引脚
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit k1 = P3^1;
sbit k2 = P3^0;
sbit k3 = P3^2;
sbit k4 = P3^3;
sbit beep = P1^5; //定义蜂鸣器的引脚
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义显示0~9的数码管的编码
void delay(uint i) { //延时函数
while(i--);
}
void datapros() { //数据处理函数
uchar i;
for(i=0;i<8;i++) { //循环8次
switch(i) { //根据i的值选择对应的地址锁存器引脚
case(0):LSA=0;LSB=0;LSC=0;break;
case(1):LSA=1;LSB=0;LSC=0;break;
case(2):LSA=0;LSB=1;LSC=0;break;
case(3):LSA=1;LSB=1;LSC=0;break;
case(4):LSA=0;LSB=0;LSC=1;break;
case(5):LSA=1;LSB=0;LSC=1;break;
case(6):LSA=0;LSB=1;LSC=1;break;
case(7):LSA=1;LSB=1;LSC=1;break;
}
P0 = table[i]; //将数据写入P0口
delay(100); //延时100ms
P0 = 0x00; //清空P0口
}
}
void main() { //主函数
uchar i;
while(1) { //无限循环
if(k1 == 0) { //如果k1按键被按下
beep = 0; //蜂鸣器响
for(i=0;i<10;i++) { //循环10次
datapros(); //调用数据处理函数
}
beep = 1; //蜂鸣器停止响
}
if(k2 == 0) { //如果k2按键被按下
beep = 0; //蜂鸣器响
for(i=0;i<10;i++) { //循环10次
datapros(); //调用数据处理函数
delay(100); //延时100ms
}
beep = 1; //蜂鸣器停止响
}
if(k3 == 0) { //如果k3按键被按下
beep = 0; //蜂鸣器响
for(i=9;i>=0;i--) { //循环10次
datapros(); //调用数据处理函数
}
beep = 1; //蜂鸣器停止响
}
if(k4 == 0) { //如果k4按键被按下
beep = 0; //蜂鸣器响
for(i=9;i>=0;i--) { //循环10次
datapros(); //调用数据处理函数
delay(100); //延时100ms
}
beep = 1; //蜂鸣器停止响
}
}
}
```
这段程序的主要功能是通过点阵显示器显示0~9的数字,并且在按下不同的按键时,显示不同的效果。
程序中定义了LSA、LSB、LSC、k1、k2、k3、k4、beep等引脚,并定义了table数组,用于存放显示0~9的数码管的编码。同时,程序还定义了延时函数delay和数据处理函数datapros。
在主函数中,程序通过不断循环来检测按键的状态,并在不同的情况下调用数据处理函数datapros来控制点阵的显示效果。其中,按下k1或k3按键时,程序会显示0~9的数字;按下k2或k4按键时,程序会显示数字0~9的循环效果。另外,当按下按键时,蜂鸣器会响起,当松开按键时,蜂鸣器停止响。