#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; } } /*****************************************/ //定时器1 void zd3() interrupt 3 //T1中断用来扫描数码管和计800MS启动模块 { TH1=0xf8; TL1=0x30; //定时2ms Display(); //扫描显示 timer++; //变量加 if(timer>=400) //400次就是800ms { timer=0; TX=1; //每800MS输出20微妙高电平 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } } /********************************************/ //主函数 void main(void) { TMOD=0x11; //设T0为方式1,GATE=1; TH1=0xf8; //2MS定时 TL1=0x30; ET1=1; //允许T1中断 TR1=1; //开启定时器 EA=1; //开启总中断 while(1) { } } 请告诉我详细编程思路
时间: 2023-07-23 07:06:45 浏览: 90
这是一段基于 8051 单片机的程序,实现了超声波测距并将距离显示在四位共阴数码管上。
程序的主要思路如下:
1. 定义了一个名为 discode 的数组,保存了数码管显示码,包括数字 0~9 和小数点 "-"。
2. 定义了一个名为 disbuff 的数组,用于保存距离信息,最多显示四位。
3. 定义了一个名为 Display 的函数,用于扫描数码管并显示距离信息。
4. 定义了一个名为 zd3 的中断函数,用于定时器1中断,每隔 2 毫秒扫描一次数码管,并计时 800 毫秒启动超声波模块进行一次测距。
5. 在主函数中初始化定时器和中断,并进入一个死循环,保证程序不会退出。
具体的实现细节可以结合代码注释进行理解。
相关问题
#include <STC8H.h>#include <intrins.h> #include <math.h>#include <stdio.h>typedef unsigned char ucha
这段代码是一个C语言程序的头文件引用部分。具体解释如下:
1. `#include <STC8H.h>`:这是引用了一个名为STC8H的头文件,该头文件可能包含了一些与STC8H芯片相关的定义和函数声明。
2. `#include <intrins.h>`:这是引用了一个名为intrins.h的头文件,该头文件可能包含了一些与嵌入式系统中的特殊指令和操作相关的定义和函数声明。
3. `#include <math.h>`:这是引用了一个名为math.h的头文件,该头文件包含了一些与数学运算相关的函数声明和宏定义,例如数学函数sin、cos等。
4. `#include <stdio.h>`:这是引用了一个名为stdio.h的头文件,该头文件包含了一些与输入输出操作相关的函数声明和宏定义,例如printf、scanf等。
5. `typedef unsigned char ucha`:这是一个类型定义语句,将unsigned char类型重命名为ucha,方便在代码中使用ucha作为变量类型。
#include<REGX51.H> #include<intrins.h> #define uchar unsigned char #define uint unsigned int什么意思
这段代码是一个基于51单片机的C语言程序,其中:
- `#include<REGX51.H>` 是包含了51单片机的头文件,可以使用其中定义的寄存器及功能;
- `#include<intrins.h>` 是包含了汇编语言的头文件,可以使用其中定义的内嵌汇编函数;
- `#define uchar unsigned char` 定义了一个名为`uchar`的宏,表示无符号字符类型;
- `#define uint unsigned int` 定义了一个名为`uint`的宏,表示无符号整数类型。