智能车制作Word格式文档下载.docx

上传人:b****5 文档编号:19510009 上传时间:2023-01-07 格式:DOCX 页数:13 大小:115.84KB
下载 相关 举报
智能车制作Word格式文档下载.docx_第1页
第1页 / 共13页
智能车制作Word格式文档下载.docx_第2页
第2页 / 共13页
智能车制作Word格式文档下载.docx_第3页
第3页 / 共13页
智能车制作Word格式文档下载.docx_第4页
第4页 / 共13页
智能车制作Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

智能车制作Word格式文档下载.docx

《智能车制作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能车制作Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

智能车制作Word格式文档下载.docx

按P1.1或P1.2键可进行加1或减1操作;

继续按P1.0键可分别进行分位、时调整;

无键按下3秒钟后退出调整状态,自动进入时钟的计时和显示。

整个系统的硬件原理框图,它采用的是STC89C52单片机,只用了P1口。

为了简化硬件电路,LED显示采用了动态扫描的方式实现,LED采用共阳极数码管,驱动电流由三极管9012提供。

为了提高计数精度,所采用的晶振频率为12MHz。

第二章硬件设计

1单片机的选择

本课程选用STC89C52型号的单片机。

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选。

主要性能参数:

●工作电压:

5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)

●工作频率范围:

0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz

●用户应用程序空间为8K字节

●片上集成512字节RAM

●通用I/O口(32个),复位后为:

P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

●ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片

●具有EEPROM功能

●共3个16位定时器/计数器。

即定时器T0、T1、T2

●外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒

●通用异步串行口(UART),还可用定时器软件实现多个UART

●工作温度范围:

-40~+85℃(工业级)/0~75℃(商业级)

●PDIP封装

2显示方案

采用八只共阳数码管作为时钟电路的显示。

数码管的a~h分别并联在一起,由单片机的P0口控制,每只数码管的共阳极分别接一只PNP三极管驱动,三极管具有电流放大作用。

3调试按键模块设计

采用独立式按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。

缺点是当按键较多时占用单片机的I/O数目较多,优点是电路设计简单,且编程极其容易。

考虑到时钟控制在实际使用时的资源量并不大,使用按钮控制可以大大减少按键

第三章软件设计

1.主程序

主程序功能主要是初始化、正常现实时间和判断功能转换键。

2.定时器T0中断服务程序

定时器T0用于时间计时。

定时溢出中断周期可设为50ms,中断进入后,时钟计时累计20次(即1s)时,对秒计数单元进行加1操作。

时钟计数单元在定义的6个单元70H~75H中,70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据。

最大计时值为23小时59分59秒。

在计数单元中采用十进制BCD码计数,秒、分、时之间满60进位。

3.显示子程序

数码管显示的数据放在内存单元70H~75H中,其中70H~71H存放秒数据,72H~73H]存放分数据,74H~75H存放时数据,每一单元内均为十进制BCD码。

由于采用软件动态扫描实现数据显示功能,显示用的十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出70H~75H中的某一地址中的数据,然后查表得对应的显示段码从P0口输出,P2口将对应的数码管位选中供电,就能显示该地址单元的数据值。

4.定时器T1中断服务程序

进行时间调整是,正在被调整的时间以闪烁的形式表现,定时器T1用于产生闪烁的时间间隔,每隔0.3s闪烁一次。

5.调时功能程序

通过按键K1来选择设置“小时”、“分钟”和“秒”。

通过“加”和“减”按键(K2、K3)来调整时间

6.延时程序

因为系统是动态显示,为了确保系统在有效显示时间范围内必须执行显示程序,所以使用延时程序。

7.单片机软件程序

/*P1.4小时调整P1.5分种调整*/

#include<

reg51.h>

intrins.h>

unsignedchardatadis_digit;

unsignedcharkey_s,key_v;

unsignedcharcodedis_code[11]={0xc0,0xf9,0xa4,0xb0,//0,1,2,3

0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//4,5,6,7,8,9,off

unsignedchardatadis_buf[8];

unsignedchardatadis_index;

unsignedcharhour,min,sec;

unsignedcharsec100;

sbitK1=P1^4;

sbitK2=P1^5;

bitscan_key();

voidproc_key();

voidinc_sec();

voidinc_min();

voidinc_hour();

voiddisplay();

voiddelayms(unsignedcharms);

voidmain(void)

{

P0=0xff;

P2=0xff;

TMOD=0x11;

//定时器0,1工作模式1,16位定时方式

TH1=0xdc;

TL1=0;

TH0=0xFC;

TL0=0x17;

hour=12;

min=00;

sec=00;

sec100=0;

dis_buf[0]=dis_code[hour/10];

//时十位

dis_buf[1]=dis_code[hour%10];

//时个位

dis_buf[3]=dis_code[min/10];

//分十位

dis_buf[4]=dis_code[min%10];

//分个位

dis_buf[6]=dis_code[sec/10];

//秒十位

dis_buf[7]=dis_code[sec%10];

//秒个位

dis_buf[2]=0xbf;

//显示"

-"

dis_buf[5]=0xbf;

dis_digit=0xfe;

dis_index=0;

TCON=0x01;

IE=0x8a;

//使能timer0,1中断

TR0=1;

TR1=1;

key_v=0x03;

while

(1)

{

if(scan_key())

{

delayms(10);

if(scan_key())

{

key_v=key_s;

proc_key();

}

}

}

}

bitscan_key()

key_s=0x00;

key_s|=K2;

key_s<

<

=1;

key_s|=K1;

return(key_s^key_v);

voidproc_key()

EA=0;

if((key_v&

0x01)==0)//K1

inc_hour();

elseif((key_v&

0x02)==0)//K2

min++;

if(min>

59)

min=0;

dis_buf[3]=dis_code[min/10];

dis_buf[4]=dis_code[min%10];

EA=1;

voidtimer0()interrupt1

//定时器0中断服务程序,用于数码管的动态扫描

//dis_index---显示索引,用于标识当前显示的数码管和缓冲区的偏移量

//dis_digit---位选通值,传送到P2口用于选通当前数码管的数值,如等于0xfe时,

//选通P2.0口数码管

//dis_buf---显于缓冲区基地址

//先关闭所有数码管

P0=dis_buf[dis_index];

//显示代码传送到P0口

P2=dis_digit;

//

dis_digit=_crol_(dis_digit,1);

//位选通值左移,下次中断时选通下一位数码管

dis_index++;

dis_index&

=0x07;

//8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描

}

voidtimer1()interrupt3

sec100++;

if(sec100>

=100)

sec100=0;

inc_sec();

voidinc_sec()

sec++;

if(sec>

sec=0;

inc_min();

//秒个位

voidinc_min()

min++;

if(min>

min=0;

voidinc_hour()

hour++;

if(hour>

23)

hour=0;

9)

dis_buf[0]=dis_code[hour/10];

else

dis_buf[0]=0xff;

//当小时的十位为0时不显示

voiddelayms(unsignedcharms)

//延时子程序

{

unsignedchari;

while(ms--)

for(i=0;

i<

120;

i++);

第四章设计结论及心得

本次期末考核设计,原计划要做出实物,但因为对PCB图不够熟练,未能尽快画出,耽误了时间,比较遗憾。

但通过这一个学期,在黄玉水老师及林海金队长的教学指导下,感觉收获颇丰。

通过这一学期的智能车制作的学习,从智能车队的基本的介绍到单片机、C语言等基本内容的讲解使我对于智能车比赛有了基本的了解,并且对于本专业的基础技能有了一定的提升。

对于最后的期末考评设计,使我巩固和加深了对电子线路基本知识和理解,提高了综合运用所学知识的能力。

增强了根据课程需要选学参考资料,查阅手册,图表和文献资料的自学能力。

通过独立思考,深入研究有关问题,学会自己分析解决问题的方法,并且培养了严谨的工作作风和科学态度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1