单片机原理及接口技术(第3版)教学课件6.pptVIP

  • 5
  • 0
  • 约1.38万字
  • 约 70页
  • 2022-03-25 发布于广东
  • 举报

单片机原理及接口技术(第3版)教学课件6.ppt

* * 门控位的应用—测量脉冲信号宽度 【例6-9】 测量INT0引脚上出现的正脉冲宽度,并计算、显示被测正脉冲宽度。 将T0设置为方式1的定时方式,且GATE=1,计数器初值为0,将TR0置1。 INT0引脚上出现高电平时,加1计数器开始对机器周期计数。 INT0引脚上信号变为低电平时,停止计数 然后计算脉冲宽度 * * C51语言实现程序如下: #includereg52.h #define uchar unsigned char #define uint unsigned int #define Tcy 1 //单片机晶振为12MHz,机器周期为1μs sbit P32=P3^2; uint Width; void Display(void ); void main(void ) { uchar T_Low,T_High; uint Wid1, Wid2; TMOD=0x09; //置T0为定时器方式1,GATE=1 TL0=0; //置计数初值 TH0=0; while(P32); //高电平等待 TR0=1; //当INT0由高变低时使TR0=1,准备好T0启动条件 while(!P32); //等待INT0变高 while(P32); //已变高,启动定时,直到 INT0变低 TR0=0; // INT0由高变低,停止定时 T_Low=TL0; //存结果 T_High=TH0; Wid1=T_High*Tcy; //计算被测信号宽度 Wid2=T_Low*Tcy; Width = Wid1*256+ Wid2; Display( ); //调用被测信号宽度显示函数 } * * 在被测信号宽度显示函数Display( )中,首先要将被测信号宽度Width(十六进制)转换成十进制,然后再将十进制的数据显示在数码管显示器上。读者可自行编写Display( )函数。 * * * * 6.5 应用案例—简易秒表计时器 一、设计要求 1.利用单片机定时器,每1s使秒表显示加1计时,最长计时时间为59分59秒,用4位数码管实现分、秒显示,分与秒之间采用小数点分隔。 2.按键功能:当第1次按一下计时功能键,秒表开始计时并显示;第2次按一下计时功能键,停止计时;第3次按一下计时功能键,秒表清0,再按一次,重复开始计时过程。 二、硬件电路 秒表计时器硬件电路如图6.20所示。显示器采用4位一体共阴极数码管,P2口输出段码,P1.0~P1.3输出位码,利用74LS06反相驱动器实现数码管的位驱动。按键信号由P1.7输入。 三、程序设计 a、T0工作在定时的方式1时,控制字TMOD配置: M1M0=01,GATE=0,方式控制字为01H; b、计算计数初值X: 单片机晶振为12MHz,机器周期Tcy为1 ,产生50ms定时。 N=t/ Tcy =50×10-3/1×10-6=50000 X=216-N=65536-50000=15536=3CB0H c、C51语言程序如下: * * #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code SegCode[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; //0~9共阴极段码,高电平1点亮 uchar code BitCode[]= {0x01,0x20,0x04,0x08}; //位码:P1口“1”有效 uchar DispBuf[4]; //显示缓冲区 uchar Minute,Second,Counter; uchar Key_count; sbit Key= P1^7; * * void DelayMs(uint n) //延时函数 { uchar j; while (n--) { for (j = 0; j 125; j++); } } * * void Disp_Buf( ) //计数值送显示缓冲区 { DispBuf[3]=Minute/10; //分十位 DispBuf[2]=Minu

文档评论(0)

1亿VIP精品文档

相关文档