汽车单片机技术 课件 项目 4  超声波倒车雷达测距_第1页
汽车单片机技术 课件 项目 4  超声波倒车雷达测距_第2页
汽车单片机技术 课件 项目 4  超声波倒车雷达测距_第3页
汽车单片机技术 课件 项目 4  超声波倒车雷达测距_第4页
汽车单片机技术 课件 项目 4  超声波倒车雷达测距_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0~9秒数码管显示目录1、数码管的基本认识2、数码管的分类3、数码管符号真值表认识数码管ABCDEFGDP数码管内部由8个LED(位段)组成;有7个条形LED和一个小圆点LED;当LED导通时,相应的线段或点发光;将这些LED排成一定图形,来显示数字0~9、字符A~F、H、L、P、R、U、Y、符号“—”及小数点“.”等。数码管引脚及内部结构管脚排列共阴数码管共阳数码管数码管的真值表目录1、什么是数组?2、如何定义数组?3、数组元素的访问和赋值4、遍历数组5、数组的初始化6、使用数组计算平均数7、常见数组问题及解决方法什么是数组?1、数组是什么?数组是一组相同数据类型的有序集合,可以通过数组下标来访问和操作数组中的每一个元素。如何定义数组?1、数组的定义数组的定义需要指定数据类型、数组名和数组大小。例如,定义一个包含10个整数的数组:inta[10];1、如何访问数组元素?数组元素可以通过数组下标来访问,下标从0开始计数。例如,访问a数组的第一个元素:a[0]。2、如何赋值数组元素?可以通过数组下标来对数组元素进行赋值。例如,将a数组的第一个元素赋值为10:a[0]=10;数组元素的访问和赋值遍历数组1、如何遍历数组?可以使用for循环来遍历数组。例如,遍历a数组:for(inti=0;i<10;i++){printf("%d",a[i]);}数组的初始化1、数组的初始化可以使用花括号来初始化数组元素,如inta[3]={1,2,3};。如果不足初始化的元素将被自动赋值为0。1、如何使用数组计算平均数?可以使用数组来存储需要计算平均数的数据,然后通过遍历数组来求和并计算平均数。例如,计算a数组的平均数:intsum=0;for(inti=0;i<10;i++){sum+=a[i];}doubleavg=sum/10.0;使用数组计算平均数注意事项1、数组越界问题数组越界会导致程序崩溃或数据异常,需要注意数组下标的范围。2、数组长度问题数组长度需要提前定义好,无法在程序运行时动态扩展。目录1、数码管的显示方式2、固定字符显示3、数字0-9循环显示数码管的显示方式利用单片机的端口输出控制数码管的显示分为静态显示和动态显示静态显示是利用单片机端口或者外置芯片进行直接或者间接驱动动态显示结构相对复杂,通过轮流点亮每一位数码管,且其中加入极短的延时,使得人眼无法分辨。固定字符8显示

数码管地址位对应数码管编号地址位LED1LED2LED3LED4LED5LED6LED7LED8ADDR200001111ADDR100110011ADDR001010101固定字符8显示#include<STC89C5xRC.H>unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管真值表sbitADDR0=P2^2;sbitADDR1=P2^3;sbitADDR2=P2^4;voidmain(){ADDR0=1;ADDR1=0;ADDR2=1;P0=0x7F;//点亮数码管段a、b、c、d、e、f、gwhile(1);}开发板实物演示数字0-9循环显示unsignedintcount=0; //定时器计数unsignedcharx=0; //显示数值//数码管段码表0unsignedchartable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};voidDelay() //延时函数

{ unsignedinti=100000;while(i--);//大致延时1s}voidmain()//主函数{ while(1)

{

for(x=0;x<=9;x++)

{

P0=table[x];Delay();

} }}0~59秒数码管显示目录1、三八译码器的原理2、三八译码器的使用3、案例分析三八译码器的原理三八译码器是数字电路中常用的解码器,它可以将三位二进制代码转换成八位二进制代码。在数字电路中,三八译码器常用于将数字信号转换成控制信号,以控制某些元件的状态三八译码器的使用利用三八译码器控制数码管的过程,可分为以下几个模块:数码管显示模块:这个模块负责将要显示的数字转换成对应的七段码输出,用于控制数码管的亮灭。三八译码器模块:这个模块负责对多位数码管进行位选。单片机控制模块:这个模块将控制三八译码器模块和数码管显示模块的工作。0-59数字循环代码分析unsignedcharx=0; //显示数值//数码管段码表unsignedchartable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};sbitADDR0=P2^2;sbitADDR1=P2^3;sbitADDR2=P2^4;//延时函数voidDelay() //延时函数

{ unsignedinti=100000;while(i--);//大致延时1s}voidDelay10us(){ uchari=2;; while(--i); }0-59数字循环代码分析voidmain()//主函数{ while(1) { for(x=0;x<=59;x++) {

ADDR0=1;ADDR1=1;ADDR2=1;

P0=table[x]/10;

Delay10us();

ADDR0=1;ADDR1=1;ADDR2=0;

P0=table[x]%10;

Delay();

} }}开发板实物演示目录1、单片机中断的原理2、定时器的使用3、案例分析单片机中断的原理中断是一种特殊的事件,它可以暂停正在执行的程序,并转而去处理一些紧急的事情。在单片机中,中断可以是内部事件(例如定时器溢出)或外部事件(例如按键触发),当中断事件发生时,单片机会自动跳转到中断服务程序进行处理,完成后再返回原程序继续执行。定时器的原理单片机定时器是单片机内部提供的一种计时器,它可以产生一定的时间延迟、定时或周期性触发中断等功能。通过定时器可以实现许多应用,如控制电机、蜂鸣器、数码管等。单片机定时器是基于单片机内部的时钟信号实现的,每个定时器都有一个计数器,计数器可以根据时钟信号自动递增。当计数器的值达到预设的值时,定时器会产生一个中断信号或者一个输出信号,从而触发相应的操作。定时器简单代码分析voidmain(){TMOD=0x01;//设置定时器0为模式1TH0=0x3C;//设置定时器0的上限TL0=0xAF;//设置定时器0的下限TR0=1;//启动定时器0

while(1){if(TF0==1)//判断定时器0是否溢出{TF0=0;//清除TF0标志位P0=~P0;//翻转P0口输出}}}目录1、控制寄存器2、存储寄存器3、模式寄存器3、案例分析控制寄存器控制寄存器用于启动、停止和重置定时器/计数器,同时控制定时器/计数器的输入时钟源。TCON寄存器控制定时器/计数器0和1的工作状态,其中高4位(TF1、TR1、TF0、TR0)是定时器0和1的控制位,低4位(IE1、IT1、IE0、IT0)是定时器0和1的中断控制位。存储寄存器存储寄存器用于存储定时器/计数器的初值和计数器的计数值。在8051单片机中,每个定时器/计数器都有一个高8位和低8位的存储寄存器,分别为THx和TLx(x为0或1)。模式寄存器TMOD寄存器用于设置定时器/计数器的工作模式和计数器的位数,其中高4位是定时器1的控制位(GATE1、C/T1、M1_1、M1_0),低4位是定时器0的控制位(GATE0、C/T0、M0_1、M0_0)。目录0-59s精确定时案例分析案例分析#include<STC89C5xRC.H>unsignedintcount=0; //定时器计数unsignedcharx=0; //显示数值//数码管段码表unsignedchartable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};sbitADDR0=P2^2;sbitADDR1=P2^3;sbitADDR2=P2^4; voidDelay10us(){uchari; i=2; while(--i);}voidtime0_init(){TMOD=0X01; TH0=0XDC; TL0=0X00; EA=1; ET0=1; TR0=1; }voidtime()interrupt1{ TH0=0X3C; TL0=0XB0; count++; if(count==100) { x++;if(x>=60) { x=0;}ADDR0=1;ADDR1=1;ADDR2=1; P0=table[x/10];Delay10us();ADDR0=1;ADDR1=1;ADDR2=0; P0=table[x%10]; } count=0;}//主函数voidmain(){ time0_init(); x=0; while(1) {}}超声波测距显示目录超声波测距原理传感器的使用工作电压:DC5V静态电流:小于2mA电平信号输出:高5V,低0V感应角度:不大于15度探测距离:2cm-450cm(1)采用IO触发测距,给至少10us的高电平信号;(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.(4)单片机将得到的数据进行处理计算,公式如下测试距离=(高电平时间*声速(340M/S))/2案例分析sbitTrig=P2^0;//定义Trig引脚sbitEcho=P2^1;//定义Echo引脚voidInit_Timer0()//初始化定时器{TMOD&=0xF0;TMOD|=0x01;//设置为模式1TH0=0;//重置定时器初值TL0=0;}voidmain(){unsignedlongdistance;unsignedinttime;while(1){Trig=0;//将Trig引脚拉低至少2微秒DelayUs(2);Trig=1;//将Trig引脚拉高至少10微秒DelayUs(10);Trig=0;while(Echo==0);//等待Echo引脚变高Init_Timer0();//开始计时while(Echo==1);//等待Echo引脚变低TH0=TL0=0;//停止计时time=(TH0<<8)|TL0;//计算计时值distance=time*17/100;//计算距离}}目录动态显示软件消隐动态显示是指将一组数字分别显示在数码管的不同位上,并通过快速切换的方式来模拟多个数字的同时显示。这种方式可以减少需要的数码管数量,因此被广泛应用。动态显示需要使用定时器来控制数码管的切换频率。具体来说,我们可以使用定时器中断来控制数码管的切换,以便每隔一段时间就切换一次。数码管软件消隐是指在数码管动态显示过程中,为了避免重影或者显示混乱,需要通过编写程序在某些时间段内关闭不需要显示的数码管的显示。这样,可以确保数字在数码管上的清晰可见。软件消隐的实现需要使用单片机的定时器和中断技术。在动态显示过程中,通过设置定时器的计数时间和中断的触发时间,来控制数码管的显示和消隐。voidShow(unsignedintOut){ charduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码 while(1) { ADDR2=0;ADDR1=0;ADDR0=0;//第四位(个位) Delay10us(); P3=duan[Out%10]; Delay1ms(); P3=0xff;

案例分析ADDR2=0;ADDR1=0;ADDR0=1;//第三位(十位) Delay10us(); P3=duan[(Out/10)%10]; Delay1ms(); P3=0xff; ADDR2=0;ADDR1=1;ADDR0=1;;//第二位(百位) Delay10us(); P3=duan[(Out/100)%10];Delay1ms(); P3=0xff; ADDR2=1;ADDR1=0;ADDR0=1;;//第一位(千位) Delay10us(); P3=duan[(Out/1000)%10]; Delay1ms(); P3=0xff; }}目录超声波显示案例分析sbitTr=P1^0;//触发信号sbitEc=P1^1;//回响信号sbitADDR0=P2^2;sbitADDR1=P2^3;sbitADDR2=P2^4;voidDelay10us(void);//10us延时函数voidDelay1ms(void);//1ms延时函数unsignedintRead_value(void);//读值函数voidInitTimer0(void);//定时器0初始化voidshow(unsignedintOut);//显示函数voidmain(){ unsignedintdistance; Tr=0;//出发引脚首先拉低 InitTimer0();//初始化定时器0 distance=Read_value();//读值 show(distance);//显示距离}/********************读值函数***********************/unsignedintRead_value(){ floattemp; unsignedintresult; Tr=1;//触发引脚发出11us的触发信号(至少10us) Delay10us(); _nop_(); Tr=0; while(!Ec);//度过回响信号的低电平 TR0=1;//开启定时器0 while(Ec);//度过回响信号高电平 TR0=0;//关闭定时器0 temp=TH0*256+TL0;//最终us时间 temp/=1000.0;//最终ms时间 temp*=17.0;//距离(cm)(17=光速34cm/ms除2) result=temp;//四舍五入 if(temp-result>=0.5) { result+=1; } returnresult;

}/***********************10us延时函数*****************************/voidDelay10us(){ unsignedchari; i=2; while(--i);

}/***********************1ms延时函数*****************************/voidDelay1ms(){unsignedchara,b,c;for(c=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论