基于单片机的自动往返小车毕业设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的自动往返小车
毕业设计
基于单片机的自动往返小车
摘要:本设计以一片单片机STC89C52作为核心来控制自动往返小车,其中控制芯片L298N和单片机联合控制小车的前进与后退。
路面的黑带检测使用反射式红外传感器,并通过STC89C52对输入的信号进行处理;行驶距离使用霍尔元件进行检测。
最后以动态显示的形式通过一个LCD液晶显示即时黑带个数,运行时间,实时路程等。
关键词:微控制器 L298N电机控制霍尔检测液晶显示
The Automatic round-trip car based on SCM
Abstract:This design use a microcontroller STC89C52 as the core to control the automatic round-trip car, the control chip L298N and single chip microcomputer to control the car forward and backward together. The reflective infrared sensor detection the black belt on the road surface, then deal with input signal processing through the STC89C52. Using the hall element to test the distance. At last displaying instant black belt, running time, real-time distance, etc through a number of LCD liquid crystal in the form of dynamic display
Keywords:MCU L298N Motor control Hall detection LED display
目录
摘要 (I)
关键字 (I)
Abstract (I)
Keywords (I)
0绪论 (2)
1.1 设计任务 (3)
1.2方案介绍 (4)
2.1 系统元器件的选择与介绍 (5)
2.1.1 STC89C52R芯片 (5)
2.1.2 L298N芯片 (11)
2.1.3霍耳传感器(HD3020) (14)
2.1.4液晶LCD (15)
2.2电路模块的设计 (18)
2.2.1检测系统 (18)
2.2.2距离计算系统 (19)
2.2.3显示系统 (20)
2.2.4电机驱动以及正反转控制模块 (20)
3.1主程序 (21)
3.2中断程序 (22)
3.2.1外部中断0 (22)
3.2.2外部中断1 (23)
3.2.3定时器中断0 (24)
3.2.4定时器中断1 (24)
4总结 (21)
致谢 (21)
参考文献 (21)
附录 (21)
0绪论
当今社会,随着科技发展的日新月异,特别是计算机技术突飞猛进的发展,计算机技术带来了科研和生产的许多重大飞跃,同时计算机也越来越广泛的被应用到人们的生活、工作领域的各个方面。
单片微型计算机以其其体积小、功能强、速度快、价格低等优点,在数据处理和实时控制等应用中有着无以伦比的优越性,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中。
随着微控制技术(以软件代硬件的高性能控制技术)的日益完善和发展,单片机的应用必将导致传统控制技术发生巨大的变化。
单片微型计算机的应用广度和深度,已经成为一个国家科技水平的一项重要标志。
此论文的题目是自动往返小汽车。
要求设计一个能自动往返于起跑线与终点线间的小汽车。
车辆从起跑线出发到达终点线后停留10秒,然后自动返回起跑线。
在要求的跑道范围内完成快行、慢行、停车等功能。
停车后自动显示一次往返的时间和路程。
基于上述要求将设计分为以下几个模块:STC89C52RC、电机驱动、电机调速、里程检测、跑道标志检测、液晶显示模块。
控制系统采用STC89C52RC单片机;显示系统采用液晶显示里程数和时间;电机正反转采用桥式驱动控制,2档电压调速;里程记录采用霍尔传感器;跑道标志线采用光敏管检测;单片机、电机采用独立稳压电源供电。
本论文将详细介绍硬件设计和软件设计的思路及方法。
由于本人在单片机的设计方面还存在一些不足,在论文的写作和论证上尚存在一些不足之处,敬请各位老师批评指正。
1设计任务及方案介绍
1.1 设计任务
设计并制作一个能自动往返于起跑线与终点线间的小汽车。
跑道宽度0.5m,表面贴有白纸,和黑带。
在跑道的B、C、D、E、F、G各点处画有2cm宽的黑线,各段的长度如图1-1所示。
车辆从起跑线出发到达终点线后停留10秒,然后自动返回起跑线。
D~E间为限速区,车辆往返均要求以低速通过,通过时间不得少于8秒,但不允许在限速区内停车。
跑道顶视图如图1.1。
图1.1 跑道顶视图
(一)基本要求
(a)车辆从起跑线出发(出发前,车体不得超出起跑线),到达终点线后停留10秒,然后自动返回起跑线(允许倒车返回)。
往返一次的时间应力求最短(从合上汽车电源开关开始计时)。
(b)到达终点线和返回起跑线时,停车位置离起跑线和终点线偏差应最小(以车辆中心点与终点线或起跑线中心线之间距离作为偏差的测量值)。
(c)D~E间为限速区,车辆往返均要求以低速通过,通过时间不得少于8秒,但不允许在限速区内停车。
1.2方案介绍
设计采用单片机STC89C52RC作为系统的控制中心。
电机电路采用两对互补三极管控制电机的驱动;检测电路采用光敏管来控制小车的快行,慢行,停止;用液晶实现对指定行程和所用时间的显示。
方案方框图如1.2所示。
图1.2方案方框图
2. 系统的硬件设计与实现
2.1 系统元器件的选择与介绍
下面介绍STC89C52RC芯片、L298N芯片、霍尔传感器、液晶等器件。
2.1.1S TC89C52R芯片
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。
该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
单片机总控制电路如下图2.1:
图2.1单片机总控制电路
1.时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD 分别是此放大器的输入端和输出端。
时钟可以由内部方式产生或外部方式产生。
内部方式的时钟电路如图2.2 (a) 所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。
定时元件通常采用石英晶体和电容组成的并联谐振回路。
晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟电路如图2.2(b)所示,RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
示,RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
(a)内部方式时钟电路(b)外部方式时钟电路
图2.2时钟电路
2.复位及复位电路
(1)复位操作
复位是单片机的初始化操作。
其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表2.1所示。
表2.1 一些寄存器的复位状态
寄存器复位状态寄存器复位状态PC 0000H TCON 00H
ACC 00H TL0 00H
PSW 00H TH0 00H
SP 07H TL1 00H
DPTR 0000H TH1 00H
P0-P3 FFH SCON 00H
IP XX000000B SBUF 不定
IE 0X000000B PCON 0XXX0000B
TMOD 00H
(2)复位信号及其产生
RST引脚是复位信号的输入端。
复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。
若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
产生复位信号的电路逻辑如图2.3所示:
图2.3复位信号的电路逻辑图
整个复位电路包括芯片内、外两部分。
外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。
复位操作有上电自动复位相按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图2.4(a)所示。
这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。
其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图2.4(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,
其电路如图2.4(c)所示:
(a)上电复位(b)按键电平复位(c)按键脉冲复位
图2.4复位电路
上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复位信号高电平持续时间大于2个机器周期。
本系统的复位电路采用图2.4(b)上电复位方式。
STC89C52具体介绍如下:
①主电源引脚(2根)
VCC(Pin40):电源输入,接+5V电源
GND(Pin20):接地线
②外接晶振引脚(2根)
XTAL1(Pin19):片内振荡电路的输入端
XTAL2(Pin20):片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):地址锁存允许信号
PSEN(Pin29):外部存储器读选通信号
EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指
令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7
STC89C52主要功能如表2.2所示。
表2.2 STC89C52主要功能
主要功能特性
2.1.2L298N芯片
L298是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片的主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
(1)L298芯片的引脚图如下图2.5。
图2.5 L298芯片引脚图
(2)L298芯片的引脚功能下表2.3
表2.3 L298芯片的引脚功能
(5)L298有Mutiwatt15和PowerSO20两种封装
两种封装的实物图如下图2.6所示
图2.6 L298两种封装的实物图本次选用的是Mutiwatt15。
2.1.3霍耳传感器(HD3020)
霍耳传感器是利用半导体的磁电效应中的霍耳效应,将被测物理量转换成霍耳电势。
(1)、霍耳效应:将一载流体置于磁场中静止不动,若次载流体中的电流方向与磁场方向不相同时,则在此载流体中平行于由电流方向和磁场方向所组成的平面上将产生电势,此电势称为霍耳电势,此现象称为霍耳效应。
[16]霍耳电势 U=BbI/neb
式中:B——外磁场的磁感应强度:
I——通过基片的电流;
n——基片材料中的载流子浓度;
e——电子电荷量;
b——基片宽度;
d——基片厚度。
(2)、霍耳元件一般采用具有N型的锗、锑化铟和砷化铟等半导体单晶材料造成。
锑化铟元件的输出较大,但受温度的影响也较大。
锗元件的输入虽小,但它的温度性能和线性度却比较好。
砷化铟元件的输出信号没有锑化铟元件大,但是受温度的影响却比锑化铟要小,而且线性度也较好,因此,采用砷化铟做霍耳元件的材料受到普遍重视。
一般地,在高精度测量中,大多采用锗和砷化铟元件;作为敏感元件时,材料采用锑化铟元件。
霍耳元件的结构很简单,它由霍耳片、引线和壳体组成。
霍耳片是一块矩形半导体薄片。
在长边的两个端面上焊上两根控制电流端引线,在元件短边的中间以点的形式焊上两根霍耳输出端引线,在焊接处要求接触电阻小,而且呈纯电阻性质。
霍耳片一般用非磁性金属、陶瓷或环氧树脂封装。
2.1.4液晶LCD
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
[17]
(1)基本特性
(1)低电源电压(VDD:+3.0--+5.5V)
(2)显示分辨率:128×64点
(3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
(4)内置 128个16×8点阵字符
(5)2MHZ时钟频率
(6)显示方式:STN、半透、正显
(7)驱动方式:1/32DUTY,1/5BIAS
(8)视角方向:6点
(9)背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
(10)通讯方式:串行、并口可选
(11)内置DC-DC转换电路,无需外加负压
(12)无需片选信号,简化软件设计
(13)工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃
(2)模块接口说明如下表2.4所示
表2.4模块接口说明
*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。
*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。
(3)RS,R/W的配合选择决定控制界面的4种模式:
表2.5控制界面的4种模式(4)E信号
表2.6 E信号
2.2电路模块的设计
2.2.1检测系统
检测系统主要是黑带采样模块,黑带采样模块我们采用反射式光电检测电路对跑道上的黑线进行检测,并用两个遮光套管套住发光管和接收管以一定的角度紧贴跑道,这样可以消除外界光线的干扰。
为了加强可靠性采用槽型光耦检测轮子转动的行程。
用LM358电压比较器输出高低电平检测信号。
如图所示2.7:
图2.7
2.2.2距离计算系统
采用霍尔元件感应磁场产生脉冲的原理,再对脉冲进行计数,所以我们在小车的前轮上安装了一块小磁铁并计算出车轮旋转一圈的路程。
通过MCU编程后检测到一个脉冲后显示自动上加一个轮子的路程,再通过液晶HJ12864M—1显示出来下图为霍尔元件的工作原理如图2.8所示:
图2.8霍尔元件的工作原理
霍尔传感器实际电路图如图2.9所示:
图2.9霍尔传感器实际电路图
2.2.3显示系统
用到单片机控制的液晶显示[17],液晶用到能显示汉字、数字、字母和图像的HJ12864M—1液晶。
通过液晶我们可以很清楚显示出小车在运行是的时间、检测的黑带的条数、运行的速度以及运行的路程。
使得一个很机械化的小车变得人性化,更好的了解小车的运动情况和稳定性。
液晶的实图(2.10)和液晶的控制电路(2.11)如下:
图2.10液晶的实图图2.11液晶的控制电路
2.2.4电机驱动以及正反转控制模块
考虑到小车的往返以及小车到达限速区时要减速行驶的要求,我们用到了专门的电机驱动模块——L298驱动电路。
该电路采用电动机驱动芯片L298来控制电动机的正转与反转,加以第二路电机电源保证了电动机启动时有足够的电流。
在试验中控制电压为单片机输出的高低电平直接控制。
电路连接如图2.12所示:
图2.12 L298驱动电路连接图
3系统的软件设计
单片机控制电路主要由一片STC89C52组成,通过P3口控制小车正转与反转,刹车,加速减速,通过两个四联数码管控制显示时间和里程以及小车行驶的时间。
其中P0口进行位选,P2口进行显示段码输出。
该系统采用上电复位加上手动复位联合复位系统进行初始化,单片机通过P3.0,P3.1输出脉冲控制电机正转反转以及刹车,当P3.0,P3.1分别输出01是电动机正转,输出10时电动机反转,输出00时电动机两边短路,小车立即刹车。
3.1主程序
主要完成初始化工作,设定小汽车的初始运行状态,最后循环调用显示
子程序,流程图如3-1所示。
图3.1 主程序流程图
3.2中断程序
3.2.1外部中断0
车轮每转一次,霍尔元件产生一个脉冲P3.14,通过下降沿触发外部中断0,并且在每进行一次外部中断记录圈数的变量加1,具体流程图如图3.2所示:
图3.2 外部中断0流程图
光电检测每检测到一条黑带就产生一个脉冲输入P3.2口,通过下降沿的方式触发外中断1,每中断一次记录黑带的变量加1,当检测到第五条黑带时,p1.0=1,p1.1=1,小车的电动机由于短路刹车,当检测到第九条黑带时,小车再次刹车同时关掉所有中断。
具体流程图如图3.3所示:
图3.3 外部中断1流程图
使用定时器T0产生5ms定时中断,每次执行该中断前要先给定时器0赋初值,定时器中断每执行一次,变量加1。
当i=200时,即每当计时1秒时,时间变量t加1,速度等于一秒转的圈数和小车车轮的周长相乘。
具体流程图如图3.4所示:
图3.4 定时器中断0流程图
3.2.4定时器中断1
主要用来产生不同的占空比的波型进行高低速控制,每次执行时,定时器1要赋初值。
本系统以单片机STC89C52芯片为核心部件,在玩具小车上进行改装利用光电检测、传感器检测技术并配合软件实现了小车的黑线检测、里程检测、时间显示等功能,最终使小车完成设计题目要求的各项任务。
该系统还有许多值得改进的地方:比如小车两侧可以同样加上传感器来检测路沿,是的小车在固定的轨道上行驶,不至于偏出;另外还可以加上遥控装置更加方便人的控制操作。
经过三个多月时间的毕业设计锻炼,我觉得自己对单片机知识有了一定的了解。
对单片机硬件结构的研究和软件编程的兴趣增加不少。
归纳起来,主要有以下两点:
(1)我经过这次系统的毕业设计,熟悉了对一项课题进行研究、设计和实验的过程中要注意团队合作;要有了严肃认真和实事求是的科学态度同时还要有吃苦耐劳的精神以及相对应的工程意识。
,这些在我们在将来的工作和学习当中都会有很大的帮助。
(2)学会了怎样查阅资料和利用工具书。
学习知识不能局限于一本书,应多看几本,这样既可以进行比较又增加了见识。
另外平时课堂上所学习的知识大多比较陈旧,作为电子科学与技术的学生,由于专业特点自己更要积极查阅当前的最新电子资料。
要及时地有针对性地查阅资料,然后加以吸收利用,以提高自己的应用能力,增长自己见识,补充最新的专业知识。
在本次设计过程中,遇到了许多突发事件和各种困难,但通过仔细分析和请教无线电小组的同学,指导老师老师,问题逐一得到了解决。
在这个过程中我深刻体会到共同协作和团队精神的重要性,提高了自己解决问题的能力。
在科学上需要一个严谨认真的态度,这点对于我以后的学习和工作,都有着非常重要的作用。
诚挚感谢指导老师戴新宇的关心、指导和教诲,戴新宇老师严谨治学、追求真理的科研作风和严于利己、宽以待人的崇高品质对学生将是永远的鞭策。
还要感谢我的同学许康康,他曾是我们院无线电小组的副组长,在电路设计、编程、电路焊接方面有很强的能力。
在制作的过程中给与我很大的帮助,最后小车一些问题他也参与改进。
有了他的帮助,设计才能更顺利地完成。
同时感谢我的母校江苏师范大学四年来对我的教育和关心,在这里我不仅学习到了专业的知识还学习到了厚重笃实,励志敏行。
这使我端正了态度,明确了方向,树立了正确的人生观和价值观,使我受用终身!
最后衷心的感谢我的父母多年来对我的养育之恩和在生活上无微不至的关怀,没有他们就有我的今天。
四年来父母辛勤工作为我支付昂贵的学费和生活费,嘘寒问暖,看似简单平凡但这其中又包含着朴素伟大和最无私的爱,使我得以安心学习文化知识,成为一个对社会有用的人。
这份养育之恩我将永远铭记与心.在此谨向他们致以深深的谢意!
参考文献
[1]田立,代方震.2007. 51单片机C语言程序设计快速入门.北京.人民邮电出版社
[2]李朝青.2005.单片机原理及接口技术(第3版).北京.北京航天航空大学出版社.
[3]郭天祥.编著.51单片机C语言教程——入门,提高,开发.拓展全攻略
[4]李忠国.陈刚.编著.单片机应用技能实训
[5]刘南平.主编.朱凤芝.欧触灵.副主编.现代电子设计与制作技术
[6]杨翠南.杨碧石.主编 . 数字电子技术与逻辑设计教程
[7]余发山,王福忠.单片机原理及应用技术.徐州:中国矿业大学出版社,2003
[8]陈权昌李兴富单片机原理及应用. 广东:华南理工大学出版社,2007
[9]黄智伟. 凌阳单片机课程设计指导.北京:北京航空航天大学出版社,2006
[10]李光飞 .单片机课程设计实例指导 .北京:北京航空航天大学出版,2004
[11] 张友德.单片微型机原理、应用与实践[M].上海:复旦大学出版社,1992
[12] 李华.MCS-51系列单片机实用接口技术[M],北京:北京航空航天大学出版社
[13]求是科技. 单片机典型模块设计实例导航. 北京:人民邮电出版社. 2005.8
[14]徐淑华, 程退安等.单片微型机原理及应用. 哈尔滨:哈尔滨工业大学出版社.
[15]孙余凯. 精选实用电子电路260例. 北京:电子工业出版社. 2007.6
[16]殷春浩, 崔亦飞. 电磁测量原理及应用. 徐州:中国矿业大学出版社. 2003.7
[17]《LCD1602A数据手册》
附录:源程序代码
#include<reg52.h>
sbit CS=P1^1;
sbit SID=P1^2;
sbit SCLK=P1^3;
sbit dj_in1=P2^7;
sbit dj_in2=P2^6;
sbit dj_in3=P2^5;
sbit dj_in4=P2^4;
sbit hd=P3^2;
#define uint unsigned int
#define uchar unsigned char
uchar code dis1[]={"黑带:条"};
uchar code dis2[]={"路程: cm"};
uchar code dis3[]={"时间: s"};
uchar code dis4[]={"作者: 0931 王楠"};
uchar dis5[3];
uchar dis6[3];
uchar dis7[3];
char heidai;
uint i;
uint miao,num,num1;
uint j,quan;
uint lucheng;
uint ge1,shi1,bai1,ge2,shi2,bai2,ge3,shi3,bai3;
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//每次操作由三个字节组成
void write_cmd(uchar command_data) //写指令
{
uchar i;
uchar i_data;
i_data=0xf8; //第一个:命令控制字,写指令发0xf8
CS=1;//cs必须是高电平
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;//第二个字节的高4位为指令或数据的高4位,第二个字节的低4位补0
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data<<=4;//第三个字节的高4位为指令或数据的低4位,第三个字节的低4位补0 for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
delayms(10);
}
void write_data(uchar command_data) //写数据
{
uchar i;
uchar i_data;
i_data=0xfa;
CS=1;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80); SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80); SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
delayms(10);
}
void lcd_pos(uchar X,uchar Y) {
uchar pos;
if(X==0)
X=0x80;
else if(X==1)
X=0x90;
else if(X==2)
X=0x88;
else if(X==3)
X=0x98;
pos=X+Y;
write_cmd(pos);
}
void lcd_init()
{
write_cmd(0x30);
delayms(5);
write_cmd(0x0c);
delayms(5);
write_cmd(0x01);
delayms(5);
}
void display1()
{
lcd_pos(0,0);
i=0;
while(dis1[i]!='\0')
{
write_data(dis1[i]);
i++;
}
lcd_pos(1,0);
i=0;
while(dis2[i]!='\0')
{
write_data(dis2[i]);
i++;
}
lcd_pos(2,0);
i=0;
while(dis3[i]!='\0')
{
write_data(dis3[i]);
i++;
}
lcd_pos(3,0);
i=0;
while(dis4[i]!='\0')
{
write_data(dis4[i]);
i++;
}
}
void display()
{
uint k;
lcd_pos(0,3);
bai1=heidai/100;
shi1=heidai%100/10;
ge1=heidai%10;
dis5[0]=bai1+0x30; //<==>dis5[0]=bai1+'0';
dis5[1]=shi1+0x30;
dis5[2]=ge1+0x30;
for(k=0;k<3;k++)
write_data(dis5[k]);
lcd_pos(1,3);
bai2=lucheng/100;
shi2=lucheng%100/10;
ge2=lucheng%10;
dis6[0]=bai2+0x30;
dis6[1]=shi2+0x30;
dis6[2]=ge2+0x30;
for(k=0;k<3;k++)
write_data(dis6[k]);
lcd_pos(2,3);
bai3=miao/100;
shi3=miao%100/10;
ge3=miao%10;
dis7[0]=bai3+0x30;
dis7[1]=shi3+0x30;
dis7[2]=ge3+0x30;
for(k=0;k<3;k++)
write_data(dis7[k]);
}
void main()
{
lcd_init();
EA=1;
TMOD=0x11;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
ET0=1;
ET1=1;
TR0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
display1();
while(1)
{
switch(heidai)
{
case 0:
case 1:
case 2:
case 4:
case 5:
dj_in1=1;
dj_in2=0;
dj_in3=0;
dj_in4=1;
break;
case 3:
dj_in1=1;
dj_in2=0;
dj_in3=0;
dj_in4=1;
delayms(100);
dj_in1=0;
dj_in2=0;
dj_in3=0;
dj_in4=0;
delayms(50);
break;
case 6:
delayms(80);
dj_in1=0;
dj_in2=0;
dj_in3=0;
dj_in4=0;
TR1=1;
while(j<=10)
{
dj_in1=0;
dj_in2=0;
dj_in3=0;
dj_in4=0;
}
TR1=0;
dj_in1=0;
dj_in2=1;
dj_in3=1;
dj_in4=0;
break;
case 7:
case 8:
case 10:
case 11:
dj_in1=0;
dj_in2=1;
dj_in3=1;
dj_in4=0;
break;
case 9:
dj_in1=0;
dj_in2=1;
dj_in3=1;
dj_in4=0;
delayms(100);
dj_in1=0;
dj_in2=0;
dj_in3=0;
dj_in4=0;
delayms(50);
break;
case 12:
dj_in1=0;
dj_in2=0;
dj_in3=0;
dj_in4=0;
EA=0;
TR0=0;
break;
default:
dj_in1=0;
dj_in2=0;
dj_in3=0;
dj_in4=0;
break;
}
display();
}
}
void zd0() interrupt 0 {
// delayms(100);
heidai++;
}
void zd1() interrupt 2 {
quan++;
lucheng=12*quan;
}
void timer0() interrupt 1 {
TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++;
if(num==20)
{
miao++;
num=0;
}
}
void timer1() interrupt 3 {
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
num1++;
if(num1==20)
{
num1=0;
j++;
}
}
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:
指导教师签名:日期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。