#include <reg52.H>//器件配置文件 char num=0; sbit W0=P2^4; sbit W1=P2^5; sbit W2=P2^6; sbit W3=P2^7; sbit DIAN=P0^5; //0:小数点亮 1:不亮 unsigned char const discode[] = {0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xB8,0x20,0x28,0x7F}; //数码管显示码0123456789- unsigned char disbuff[4] = {0,0,0,0}; //数组用于存放距离信息 // 毫秒延时函数 void delay_ms(unsigned int ms) { unsigned char i; while(ms--) for(i = 0 ; i < 123; i++); } //扫描数码管 void Display(void) { num++; if(num==1) { W0=1; P0=discode[disbuff[0]]; // 段码赋值 W3=0; // 显示个位 DIAN=0; // 点亮小数点 } else if(num==2) { W3=1; P0=discode[disbuff[1]]; W2=0; // 显示十位 } else if(num==3) { W2=1; P0=discode[disbuff[2]]; W1=0; // 显示百位 } else if(num>=4) { W1=1; P0=discode[disbuff[3]]; W0=0; // 显示千位 num=0; } }画流程图
时间: 2024-01-24 13:18:05 浏览: 90
抱歉,我无法画流程图,但我可以为您解释代码的流程:
1. 定义了一个变量 num 来表示数码管扫描的位数。
2. 定义了四个引脚 W0、W1、W2、W3 分别对应数码管的四个位,用于控制数码管的显示。
3. 定义了一个常量数组 discode[],用于存储数码管的显示码。
4. 定义了一个存储距离信息的数组 disbuff[]。
5. 定义了一个毫秒延时函数 delay_ms(),用于进行延时操作。
6. 定义了一个扫描数码管的函数 Display(),该函数会在循环中被调用。
7. 在 Display() 中,num 会被自增,并根据 num 的值来控制数码管的显示。
8. 如果 num 的值为 1,那么会显示个位数,同时点亮小数点。
9. 如果 num 的值为 2,那么会显示十位数。
10. 如果 num 的值为 3,那么会显示百位数。
11. 如果 num 的值为 4 或更大,那么会显示千位数,并将 num 重置为 0。
12. 循环执行 Display() 函数,实现数码管的连续扫描。
相关问题
#include<REG52.H> #include<stdio.h> #include <intrins.h> sbit Trig=P2^0; sbit Echo=P2^1;超声模块测距代码补全
`#include<REG52.H>`是一段头文件的引用,代表使用了基于Intel 8051的单片机开发环境。`<stdio.h>`是标准输入输出头文件的引用。`<intrins.h>`是用于特殊函数的头文件引用。
以下是超声模块测距的代码补全:
```
#include<REG52.H>
#include<stdio.h>
#include <intrins.h>
sbit Trig=P2^0;
sbit Echo=P2^1;
void delay(unsigned int us) //延时函数
{
while(us--);
}
unsigned char read_distance() //读取距离函数
{
unsigned char distance;
Trig = 0; //初始化
delay(2);
Trig = 1; //触发测量
delay(10);
Trig = 0; //停止测量
while(!Echo); //等待Echo为高电平
TH0 = 0;
TL0 = 0; //清零计时器
while(Echo); //等待Echo为低电平
distance = (unsigned char)(TH0*256+TL0)/58.0; //计算距离
return distance;
}
void main()
{
unsigned char distance;
TMOD |= 0x01; //设置为定时器0,工作方式1
while(1)
{
distance = read_distance(); //读取距离
printf("The distance is %d cm\n",distance); //打印距离
delay(500); //延时500ms
}
}
```
#include <reg52.H>//器件配置文件 #include <intrins.h> // 变量声明 unsigned int timer=0; char num=0; unsigned char const discode[] ={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xB8,0x20,0x28,0x7F}; //数码管显示码0123456789- unsigned char disbuff[4]={0,0,0,0}; //距离信息 sbit W0=P2^4; sbit W1=P2^5; sbit W2=P2^6; sbit W3=P2^7; //超声波传感器接口 sbit TX = P2^2; sbit DIAN=P0^5; //0:小数点亮 1:不亮 sbit Feng= P2^0; //0:蜂鸣器报警 1:不报警 /*******************************/ //扫描数码管 void Display(void) { num++; if(num==1) { W0=1; P0=discode[disbuff[0]]; // 段码赋值 W3=0; // 显示个位 DIAN=0; // 点亮小数点 } else if(num==2) { W3=1; P0=discode[disbuff[1]]; W2=0; // 显示十位 } else if(num==3) { W2=1; P0=discode[disbuff[2]]; W1=0; // 显示百位 } else if(num>=4) { W1=1; P0=discode[disbuff[3]]; W0=0; // 显示千位 num=0; } }
这段代码实现了一个数码管的扫描显示功能,使用了一个常量数组discode来存储数码管的显示码,使用了disbuff数组来存储要显示的数字。在Display函数中,通过改变W0-W3的值来选择要显示的位数,然后将对应的段码赋值给P0来实现数码管的显示。同时,还设置了DIAN和Feng来控制小数点和蜂鸣器的状态。
阅读全文