#include <REG51.H> void delay50ms(unsigned char i) { unsigned char k; for(k=0;k<i;k++) { TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; while(!TF1); TF1=0; } } void main(){ unsigned char code disp[]={0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char second; TMOD=0x10; P2=0x00; while(1) { for(second=0;second<10;second++){ P0=disp[second]; delay50ms(20); P0=0x00; } } }
时间: 2023-07-15 22:09:55 浏览: 103
这是一段基于 8051 单片机的简单程序,用于控制数码管显示数字 0-9。程序主要包括以下几个部分:
1. 延时函数 `delay50ms`:该函数用于生成 50ms 的延时,使得数码管上的数字可以被逐个显示出来。具体实现方式为使用定时器 TMOD 产生 1ms 的中断,然后在 `delay50ms` 函数中循环调用该中断函数,直到达到所需的延时时间。
2. 数码管显示函数:该函数定义了一个数组 `disp`,其中存储了数码管显示数字 0-9 对应的编码。在主函数中,通过循环遍历该数组,将每个数字的编码依次输出到 P0 端口,然后再延时 1s,以便观察。
3. 主函数:该函数主要调用了上述两个函数,并且通过一个无限循环来使程序不断运行。
相关问题
#include <reg51.h> #include <intrins.h> void delay(unsigned char i) { unsigned char m,n; for(m=i;m>0;m--) for(n=200;n>0;n--); } void main() { unsigned char k; while(1) { P1=0xfe; for(k=0;k<8;k++) { delay(500); P1=_crol_(P1,1); } } }
这是一段基于 8051 单片机的程序,其中使用了循环延时函数 delay 和移位运算函数 _crol_。程序的主要功能是将 P1 口的 8 个引脚设置为 0xfe,然后将其循环左移,每次移动一个引脚,等待一定的时间后再移动下一个引脚,这样不断循环,直到程序停止。程序的作用可能是为了演示单片机的移位运算功能。需要注意的是,此程序只是一个简单的示例,不具有实际应用价值。
#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
}
}
```
阅读全文