while(1) { if(delay_main==1 //判断delay_main是否为“1”,为1时进入循环,每延时300ms扫描一次 { delay_main=0; //delay_main清零,以便下次使用 baojing(); //报警函数baojing(); juli_cl(); //测距离函数 led_display(); keystroke();
时间: 2024-02-10 19:34:15 浏览: 48
这是一个基于单片机的循环程序,主要包含以下几个部分:
1. while(1): 这是一个死循环,表示程序会一直执行下去,直到系统停止。
2. if(delay_main==1): 这是一个条件语句,用于判断delay_main是否等于1。如果delay_main为1,则进入if语句中的代码块。
3. delay_main=0: 这是一个赋值语句,将delay_main的值清零,以便下次使用。
4. baojing(): 这是一个函数调用语句,用于调用报警函数baojing(),实现报警功能。
5. juli_cl(): 这是一个函数调用语句,用于调用测距离函数juli_cl(),实现测距离功能。
6. led_display(): 这是一个函数调用语句,用于调用LED数码管显示函数led_display(),实现显示功能。
7. keystroke(): 这是一个函数调用语句,用于调用按键扫描函数keystroke(),实现按键检测功能。
整个程序的作用是通过循环不断执行各种功能函数,实现报警、测距离、显示和按键检测等功能。其中,条件语句if(delay_main==1)用于控制程序执行的频率,每延时300ms扫描一次。通过这种方式,可以实现对系统资源的有效利用,提高系统的响应速度和效率。
相关问题
请帮我为以下代码添加注释#include <REGX52.H> NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71}; int MatrixKeyNum; void Delay(unsigned int xms) { unsigned char i, j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } } void Nixie(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]; } unsigned char MatrixKey() { unsigned char KeyNumber=0; P1=0xFF; P1_3=0; if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;} if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;} if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;} if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;} P1=0xFF; P1_2=0; if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;} if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;} if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;} if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;} P1=0xFF; P1_1=0; if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;} if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;} if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;} if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;} P1=0xFF; P1_0=0; if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;} if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;} if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;} if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;} return KeyNumber; } void main() { while(1) { MatrixKeyNum=MatrixKey(); if(MatrixKeyNum) Nixie(1,MatrixKeyNum); } }
这段代码是一个基于单片机的数码管键盘输入程序,以下是代码的注释:
```C
//引入头文件regx52.h
#include <REGX52.H>
//定义数码管的显示表
NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};
//定义全局变量MatrixKeyNum
int MatrixKeyNum;
//定义延时函数
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
//定义数码管显示函数
void Nixie(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];
}
//定义矩阵键盘扫描函数
unsigned char MatrixKey()
{
unsigned char KeyNumber=0;
P1=0xFF;
P1_3=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
P1=0xFF;
P1_2=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
P1=0xFF;
P1_1=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
P1=0xFF;
P1_0=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
return KeyNumber;
}
//主函数
void main()
{
while(1)
{
MatrixKeyNum=MatrixKey();
if(MatrixKeyNum) Nixie(1,MatrixKeyNum);
}
}
```
请标注代码的注释:#include <REGX52.H> #define KEY_MATRIX_PORT P1 unsigned char NixieTable[ ] ={ 0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x3f}; void Delay(unsigned int xms) { unsigned char i,j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } } void Nixie(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]; Delay(1); P0=0x00; } void main() { unsigned char x,d; x=0; d=0; while(1) { Nixie(1,x); Delay(1); P1_3=0; if(P1_7==0) {Delay(20);while(P1_7==0);Delay(20); if(x<=5){x=x+1;}else{x=1;} } if(P1_6==0) {Delay(20);while(P1_6==0);Delay(20); x=7; } if(P1_5==0) {Delay(20);while(P1_5==0);Delay(20); x=0; } P1=0xFF; } }
```
#include <REGX52.H> // 引入头文件,包含了51单片机的寄存器定义
#define KEY_MATRIX_PORT P1 // 定义按键矩阵端口为P1
unsigned char NixieTable[ ] ={ 0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x3f}; // 定义数码管显示的数字对应的码表
void Delay(unsigned int xms) { // 延时函数,xms为延时的毫秒数
unsigned char i,j;
while(xms--) {
i = 2;
j = 239;
do {
while (--j);
} while (--i);
}
}
void Nixie(unsigned char Location,Number) { // 数码管显示函数,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]; // 设置P0口输出对应的数字
Delay(1); // 延时1毫秒,以保证数字能够显示出来
P0=0x00; // 将P0口输出清零,以便下一次使用
}
void main() {
unsigned char x,d;
x=0;
d=0;
while(1) {
Nixie(1,x); // 在第一个数码管显示数字x
Delay(1); // 延时1毫秒,以保证数字能够显示出来
P1_3=0; // 将按键矩阵的第3列引脚设置为输出模式
if(P1_7==0) { // 如果按键矩阵的第7行引脚被按下
Delay(20); // 延时20毫秒,以去除抖动
while(P1_7==0); // 等待按键释放
Delay(20); // 延时20毫秒,以去除抖动
if(x<=5) { // 如果数字x小于等于5
x=x+1; // 数字x加1
} else { // 否则
x=1; // 数字x置为1
}
}
if(P1_6==0) { // 如果按键矩阵的第6行引脚被按下
Delay(20); // 延时20毫秒,以去除抖动
while(P1_6==0); // 等待按键释放
Delay(20); // 延时20毫秒,以去除抖动
x=7; // 数字x置为7
}
if(P1_5==0) { // 如果按键矩阵的第5行引脚被按下
Delay(20); // 延时20毫秒,以去除抖动
while(P1_5==0); // 等待按键释放
Delay(20); // 延时20毫秒,以去除抖动
x=0; // 数字x置为0
}
P1=0xFF; // 将按键矩阵的所有引脚设置为输入模式
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)