51单片机实习指南.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机实训指南 实习课题 基于单片机最小系统的频率计设计 实习内容 单片机最小系统电路原理设计分析与讲解,PCB设计分析与讲解,电路板焊接培训与实际操作,程序设计、调试分析与讲解,程序调试实际操作。 三、硬件资源 89S51单片机; 6位共阳极数码管; 段码驱动器74HC573,位选译码器74HC138; 4路独立式按键; 外部晶振电路; ISP下载接口(In system program,在系统编程); DC+5V电源试配器(选配); ISP下载线(选配); 单片机实训模块(频率计分频预处理电路)。 四、电路原理分析与设计 P1为外部电源输入座(DC+5V),S8为电源最小系统的电源开关,E1和C3为电源滤波,去耦电容。D1为系统电源指示灯。J2为ISP下载接口,S7系统复位按键。CRY1,C1,C2为外部时针电路。IC1为89S51(DIP-40),左上角为第一脚。PRE1,PRE2。为上拉排阻(阻值4.7k—10k)。J5,J9,J6,J10分别对应单片机的P0,P1,P2,P3口。便于二次开发。6路共阳极数码管动态显示电路,P0口通过74HC573(起驱动和隔离作用,让电流通过74CH573流入公共地),来控制数码管的8路段码,P20-P22通过74HC138译码器(使用其中的6路)控制数码管的公共端(中间还有三极管做驱动器)。这样设计的理由:为了保证该单片机最小系统的二次开发的资源充足和合理性。 图1 元件布局图 图2 单片机最小系统原理图 频率计模块介绍 一.基于单片机最小系统的频率计设计简介 1.测频率原理分析: 若某一信号在T秒时间里重复变化了N 次,则根据频率的定义可知该信号的频率fs 为:fs=N/T 通常测量时间T取1秒或它的十进制时间。S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个1到0的跳变需要两个机器周期,故外部脉冲频率不超过振荡器频率的1/24。 3.扩展测量频率范围解决方案: 将输入到单片机引脚的频率通过分频器预先处理。然后在程序设计中通过算法,将分频系数还原。从而达到扩展测量频率的范围。 二.电路原理图: 二.电路原理分析: 74HC393为二进制计数器,将输入信号进行预分频,输出端口接54hc151,多路复用器(8通道)。 单片机通过采用54SN151 A,B,C端口的组合值来确定分频系数,通过程序算法获得正确的频率值。 74HC393真值表: 54hc15真值表: C语言源程序: #includeAT89X52.H #includeintrins.h #define uchar unsigned char #define uint unsigned int sbit Key=P1^0; sbit Led=P3^0; uchar code led_code[18]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, //段码 0x90,0x88,0x83,0xc6,0xa1,0x86,0x81,0x7f,0xff}; uchar data dis_data[6]={0,0,0,0,0,0}; unsigned long data counter; uchar data timer_counter=0; void Init(); void Timer_Init(); void delayms(uchar n); void Data_Deal(); void display(uchar *p,uchar n); void Delay100ms(unsigned int _100ms); void Delay1ms(unsigned int ms); //*******主程序*******// void main() { Init(); while(1) { if(timer_counter==20) { TR1=0; //关闭计时 TR0=0; //关闭计数 TH0=0; //计数清0 TL0=0; TH1=0x4c; //50ms定时 TL1=0x00; timer_counter=0; Key=1; if(Key) { Delay1ms(5); if(Key) { counter=counter*16; counter=counter/100;

文档评论(0)

书房 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档