导航:首页 > 操作系统 > 单片机课程设计软件流程图

单片机课程设计软件流程图

发布时间:2025-05-03 18:56:50

单片机 智能小车 课程设计

智能小车的设计与制作
摘要:本课题组设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示所走的路程和行走的时间,并可发声发光。作品可以作为高级智能玩具,也可以作为大学生学习嵌入式控制的强有力的应用实例。
作品以两电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动作,以达到自身控制。电机驱动电路采用高电压,高电流,四通道驱动集成芯片L293D。其中避障采用红外线收发来完成;铁片检测部分采用电感式接近开关LJ18A3-8-Z/BX检测;黑带检测采用红外线接收二极管完成;趋光部分通过3路光敏二极管对光源信号的采集,再经过ADC0809转化为数字信号送单片机处理判别方向。由控制单元处理数据后完成相应动作,实现了无人控制即可完成一系列动作,相当于简易机器人。
关键字:智能控制 蔽障 红外线收发 寻迹行驶 趋光行驶
1.总体方案论证与比较
方案一:采用各类数字电路来组成小车的控制系统,对外围避障信号,黑带检测信号,铁片检测信号,各路趋光信号进行处理。本方案电路复杂,灵活性不高,效率低,不利于小车智能化的扩展,对各路信号处理比较困难。
方案二:采用ATM89S52单片机来作为整机的控制单元。红外线探头采用市面上通用的发射管与及接收头,经过单片机调制后发射。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,黑带采用光敏二极管对光源信号采集,再经过ADC0809转化为数字信号送到单片机系统处理。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地满足题目的要求。
比较以上两种方案的优缺点,方案二简洁、灵活、可扩展性好,能达到题目的设计要求,因此采用方案二来实现。方案二的基本原理如图1所示。
图1 智能车运行基本原理图框图

避障部分采用红外线发射和接受原理。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,产生的高低电平信号经过处理后,完成相应的记录数目,驱动蜂鸣器发声。黑带寻迹依靠安装在车底部左右两个光敏二极管对管来对地面反射光感应。寻光设计在小车前端安装3路(左、中、右)光敏电阻对光源信号采集,模拟信号经过ADC0809转化为数字信号送到MCU处理。记程通过在车轮上安装小磁块,再用霍尔管感应产生计数脉冲。记时由软件实现,显示采用普通七段LED。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现
2.模块电路设计与比较
1) 避障方案选择
方案一:采用超声波避障,超声波受环境影响较大,电路复杂,而且地面对超声波的反射,会影响系统对障碍物的判断。
方案二:采用红外线避障,利用单片机来产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。外界对红外信号的干扰比较小,且易于实现,价格也比较便宜,故采用方案二。
红外线发射接受电路原理图如图2所示。
采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。 接收管输出TTL电平,有利于单片机对信号的处理。采用红外线发射与接收原理。利用单片机产生38KHz信号对红外线发射管进行调制发射,发射距离远近由RW调节,本设计调节为10CM左右。发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。利用单片机的中断系统,在遇障碍物时控制电机并使小车转弯。由于只采用了一组红外线收发对管,在避障转弯方向上,程序采用遇障碍物往左拐方式。如果要求小车正确判断左转还是右转,需在小车侧边加多一组对管。外界对红外信号的干扰比较小,性价比高。 。调试时主要是调制发射频率为接收头能接收的频率,采用单片机程序解决。发射信号强弱的调节,由可调精密电阻调节。
图2 红外线发射接受电路原理图

2)检测铁片方案选择
方案一:采用电涡流原理自制的传感器,取才方便,但难以调试,输出信号也不可靠,成功率比较低,难以准确输出传感信息。
方案二:采用市面易购的电感式接近开关,本系统采用市面比较通用LJ18A3-8-Z/BX来完成铁片检测的任务。虽然电感式接近开关占的体积大,对本是可以接受,且输出信号较可靠,稳定性好,受外界的干扰小,故采用方案二。
检测铁片电路原理图如图3所示。
图3 检测铁片电路原理图

3)声音提示
方案一:采用单片机产生不同的频率信号来完成声音提示,此方案能完成声音提示功能,给人以提示的可懂性比较差,但在一定程度上能满足要求,而且易于实现,成本也不高,我们出自经费方面考虑,采用方案一。
方案二:采用DS1420可分段录放音模块,能够给人以直观的提示,但DS1420录放音模块价格比较高,也可以采用此方案来处理,但方案二性价比不如方案一。
4)黑带检测方案选择
方案一:采用发光二极管发光,用光敏二极管接收。由于光敏二极管受可见光的影响较大,稳定性差。
方案二:利用红外线发射管发射红外线,红外线二极管进行接收。采用红外线发射,外面可见光对接收信号的影响较小,再用射极输出器对信号进行隔离。本方案也易于实现,比较可靠,因此采用方案二。黑带检测电路图如图4所示。
输出信号进入74LS02。稳定性能得到提升。当小车低部的某边红外线收发对管遇到黑带时输入电平为高电平,反之为低电平。结合中断查询方式,通过程序控制小车往哪个方向行走。电路中的可调电阻可调节灵敏度,以满足小车在不同光度的环境光中能够寻迹。由于接收对管装在车底,发射距离的远近较难控制,调节可调电阻,发现灵敏度总是不尽人意,最后采用在对管上套一塑料管,屏蔽外界光的影响,灵敏度大幅提升。再是转弯的时间延迟短长控制。
图4 黑带检测电路图
3)计量路程方案
方案一:利用红外线对射方式,在小车的车轮开一些透光孔来计量车轮转过圈数,从而间接地测量路程。
方案二:利用霍尔元件来对转过的车轮圈数来计程,在车轮子上装小磁片,霍尔元件靠近磁片一次计程为车轮周长。此方案传感的信号强, 电路简单,但精度不高。
如果想达到一定的计量精度,用霍尔传感元件比较难以实现,因为在车轮上装一定量的小磁片会相互影响,而利用红外线对射方式不会影响各自的脉冲,可达到厘米的精度,因此采用方案一来实现。计量路程示意图见图5。
通过计算车轮的转数间接测量距离,利用了霍尔元件感应磁块产生脉冲的原理,再对脉冲进行计数。另可采用红外线原理提高记程精度,其方法为在车轮均匀打上透光小孔,当车轮转动时,红外光透射过去,不断地输出脉冲,通过单片机对脉冲计数,再经过一个数据的处理过程,这样就可把小车走过的距离计算出来,小孔越多,计数越精密。
图 5 计量路程示意图
3)智能车驱动电路
方案一:采用分立元件组成的平衡式驱动电路,这种电路可以由单片机直接对其进行操作,但由于分立元件占用的空间比较大,还要配上两个继电器,考虑到小车的空间问题,此方案不够理想。
方案二:因为小车电机装有减速齿轮组,考虑不需调速功能,采用市面易购的电机驱动芯片L293D,该芯片是利用TTL电平进行控制,对电机的操作方便,通过改变芯片控制端的输入电平,即可以对电机进行正反转操作,很方便单片机的操作,亦能满足直流减速电机的要求。智能车驱动电路实现如图6所示。
图6 智能车驱动电路

小车电机为直流减速电机,带有齿轮组,考虑不需调速功能,采用电机驱动芯片L293D。L293D是着名的SGS公司的产品。为单块集成电路,高电压,高电流,四通道驱动,设计用来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达),和开关电源晶体管。内部包含4通道逻辑驱动电路。其额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;Vs电压最大值也是36V,经过实验,Vs电压应该比Vss电压高,否则有时会出现失控现象。表1是其使能、输入引脚和输出引脚的逻辑关系。
表1 引脚和输出引脚的逻辑关系

EN A(B) IN1(IN3) IN2(IN4) 电机运行情况
H H L 正转
H L H 反转
H 同IN2(IN4) 同IN1(IN3) 快速停止
L X X 停止
L293D可直接的对电机进行控制,无须隔离电路。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。调试时在依照上表,用程序输入对应的码值,能够实现对应的动作,调试通过。
3) 寻找光源功能
方案一:在小车前面装上几个光电开关,通过不同方向射来的光使光电开关工作,从而对小车行驶方向进行控制,根据光电开关特性,只有当光达到一定强度时才能够导通,因此带有一定的局限性。
方案二:在小车前面装上参数一致的光敏二极管或者光敏电阻,再通过A/D转换电路转换成数字量送入单片机,单片机再对读入的几路数据进行存储、比较,然后发出命令对外围进操作。对方案一、二进行比较,方案二硬件稍为复杂,但能够对不同强度的光进行采集以及比较,操作灵活,所以采用方案二。
寻找光源电路图如图7所示。
图7 寻找光源电路图
3)显示部分
方案一:采用LCD显示,用单片机可实现显示数据,但显示亮度和字体大小在演示时不尽人意,价格也比较昂贵。
方案二:采用LED七段数码管,采用经典电路译码和驱动,电路结构简单,并且可以实现单片机I/O口的并用,显示效果直观,明亮,调试容易。故采用LED数码管显示。
4)显示电路如图8所示。
图8 显示电路

3. 系统原理及理论分析
1) 单片机最小系统组成
单片机系统是整个智能系统的核心部分,它对各路传感信号的采集、处理、分析及对各部分整体调整。主要是组成是:单片机AT89S52、模数转换芯片ADC0809、小车驱动系统芯片L293D、数码管显示的译码芯片74LS47、74LS138及各路的传感器件。
2)避障原理
采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。 接收管输出TTL电平,有利于单片机对信号的处理。
3)计程原理
通过计算车轮的转数间接测量距离,在车轮均匀打上透光小孔,当车轮转动时,红外光透射过去,不断地输出脉冲,通过单片机对脉冲计数,再经过一个数据的处理过程,这样就可把小车走过的距离计算出来。
4)黑带检测原理
利用光的反射原理,当光线照射在白纸上,反射量比较大,反之,照在黑色物体上,由于黑色对光的吸收,反射回去的量比较少,这样就可以判断黑带轨道的走向。由于各路传感器会对单片机产生一定的干扰,使信号发生错误。因此,采用一级射极输出方式对信号进行隔离,这样系统对信号的判断就比较准确。
4. 系统程序设计
用单片机定时器T0产生38KHz的方波,再用定时器T1产生250Hz的方波对38KHz方波进行调制。为了提高小车反应灵敏度,对红外线接收信号及黑带检测信号都采用中断法来处理。用定时方法对铁片检测、计量路程、倒车、拐弯及数码管动态扫描进行处理。
主程序流程图见图9,各子程序图见图10、图11、图12。
图9 主程序流程图
图 10 外部中断0服务子程序
图 11 外部中断1服务子程序
图12 定时器1中断子程序
6.调试及性能分析
整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。首先写入电机控制小程序,控制其正反转,停机均正常。加入避障子程序,小车运转正常,调整灵敏度达最佳效果。加入显示时间子程序,显示正常。铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。趋光电路主要由三个光敏电阻构成,调整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。
整机综合调试,上电后对系统进行初始化,接着控制电机使小车向前行驶,突然发现系统即刻进入外部中断1,重复多次测试,结果都是自动进入该中断。推断是由刚上电时电机起动所引起,为了避免上电瞬间的影响,在启动小车后延时几毫秒,再开外部中断,结果问题解决。允许的话应采用双电源供电,即电机和电路应分开供电,L293D与单片机之间采用隔离信号控制。这样就不会出现小车启动时程序出错和数码管显示闪动的问题。在计程精度上,可用红外线原理获得较高精度。
7.结论
通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化,智能小车能够完成各项功能到达车库。
8.参考文献
《单片机应用技术》
《周立功单片机》
《单片机原理与应用》
《8051单片机程序设计与实例》
《MCS-51单片机实验指导》

㈡ 跪求单片机课程设计 要完全呦

题 目:单片机课程设计报告
目 录
一、设计目的
二、程设计具体要求
三、单片机发展简史
四、8051单片机系统简介
五、8051单片机内部定时器/计数器简介
六、程序电路
七、程序流程
八、程序代码
九实验总结-要求写出完整的论文以及心得体会
十参考资料及小结
原 文 : 一.目的
1. 进一步熟悉和掌握8051单片机的结构及工作原理。
2. 掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
4. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5. 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
二.课程设计的体要求
a) 原理图设计。
1. 原理图设计要符合项目的工作原理,连线要正确,端了要不得有标号。
2. 图中所使用的元器件要合理选用,电阻,电容等器件的参数要正确标明。
3. 原理图要完整,CPU,外围器件,扩器接口,输入/输出装置要一应俱全。
b) 程序调计
1. 根据要求,将总体项能分解成若干个子功能模块,每个功能模块完成一个特定的功能。
2. 根据总体要求及分解的功能模块,确定各功能模块之间的关系,设直出完整的程序流程图。
c) 程序调试将设计完的程序输入,汇编,排除语法错误,生成*OBJ文件。
1. 按所设计的原理图,在实验平台上连线,检查无误。
2. 将汇编后生成的*OBJ文件传送到实验装置的,执行该程序,检查该程序、是否达到设计要求,若未达到,修改程序,直到达到要求为止,
d) 说明书
1. 原理图设计说明
简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。
2. 程序设计说明
对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。
3. 画出工作原理图,程序流程图并给出程序清单。
目前,单片机已广泛应用到图民经济建设和日常生活的许多领域,成为测控技术现代化必不可少的重要工具。下面介绍一本单片机课程设计的好书,介绍了很多实例有兴趣者可以去买哦,价格不贵【图书目录】 - 8051单片机课程设计实训教材
第1章 绪论
1.1 课程设计所需硬件工具
1.2 专题制作所需软件使用工具
1.3 8051程序开发测试平台
1.4 使用免费汇编编译
1.5 89CXX烧录模拟器操作实例
1.6 自制8051微电脑单板IO51
1.7 IO51操作实例
1.8 以Windows98 工作模式结合DOS模式来执行
第2章 8051单片机课程设计中的基本软硬件设计
2.1 8051各种基本的硬件设计
2.2 工作指示灯LED
2.3 8051延迟时间计算
2.4 基本按键设计
2.5 建立8051通信接口
2.6 简易8051调试界面
2.7 压电喇叭测试
2.8 键盘扫描
2.9 扫描控制七段显示器
2.10 LCD接口控制
2.11 8051定时器模式的工作
2.12 定时器模式0测试
2.13 定时器模式1测试
2.14 定时器模式2测试
2.15 以定时器产生各种频率的声音
2.16 以定时器演奏—段旋律
第3章 带单片机的LCD时钟
第4章 定时闹铃
第5章 定时闹铃LCD
第6章 音乐倒数定时器
第7章 密码锁控制
第8章 可存储式电子琴
第9章 8051八音盒
第10章 红外线遥控器研究
10.1 红外线遥控器动作原理
10.2 如何观察红外线遥控器信号
10.3 红外线遥控器译码功能说明
第11章 红外线家电遥控
第12章 8051伺服机控制
12.1 伺服机工作原理及改装
第1.3章 8051伺服车控制
13.1 功能说明
13.2 伺服车组装及实验
第14章 红外线遥控伺服车
14.1 功能说明
14.2 遥控伺服车组装及实验
14.3 控制电路
14.4 控制程序
第15章 无线电家电遥控
15.1 功能说明
15.2 遥控编码解码控制
第16章 8051声控设计
16.1 声控基本知识介绍
16.2 系统组成
16.3 声控模块介绍
16.4 基本控制电路
16.5 基本控制程序
16.6 声控课题设计

附录H 如何使用KEIL 8051开发系统汇编和编译程序及调试
附录I EPM89 890XX烧录模拟器特性
附录J 1051 8051 10控制板特性
附录K VCMM声控模块特性
附录L IO51控制板完整电路图
附录M 需要从网站下载的相关资料的使用说明
附录N 硬件接口板版权声明及如何订购
附录A 简易稳压电源制作
附录B 本书实验所需软硬件工具及零件
附录C 8051内部控制寄存器介绍
附录D 8051指令集
附录E 如何自制8051单板
附录F 课程设计报告参考内容
附录G IO51控制板窗口版驱动程序使用说明

㈢ 单片机秒表课程设计,急求!!!!

原理图如下,

程序如下:

;=================================================

;寄存器分配定义

;=================================================

LED_BUF EQU 50H ;显示数据首址

COUNTER_INT EQU 3BH ;中断计数器

SECOND EQU 3DH ;秒单元

;=================================================

;常数定义

;=================================================

CN_COUNT_INT EQU 100 ;10ms * 100 = 1S

SET_MODEL EQU 0FFH ;完全译码模式

SET_BRIGHT EQU 04H ;占空比为15/32;显示亮度;

SET_LIMIT EQU 01H ;2位显示方式;

SET_NORMAL EQU 01H ;测试模式

SET_START EQU 01H ;进入启动工作方式?

;=================================================

;管脚分配定义

;=================================================

m7219_DIN BIT P3.0

m7219_LOAD BIT P3.1

m7219_CLK BIT P3.2

KEYSTART BIT P1.0

KEYRESET BIT P1.1

;============================================

;模拟主程序

;===========================================


org 0000h

ajmp main

ORG 000BH

LJMP Timer0Interrupt

org 0030h

main:

mov sp,#70h


lcall Init_M7219

lcall InitTimer0

; MOV SECOND,#95H ;TEST

Loop:

CALL disp

key_reset:

SETB KEYRESET

JB KEYRESET,key_start

; DELAY

NOP

NOP

NOP

JB KEYRESET,key_start

JNB KEYRESET,$

CLR TR0

MOV A,#0

MOV SECOND,A

MOV led_buf,A

MOV LED_BUF+1,A

JMP key_SCAN_END

key_start:

SETB KEYSTART

JB KEYSTART,key_SCAN_END

; DELAY

NOP

NOP

NOP

JB KEYSTART,key_SCAN_END

JNB KEYSTART,$

SETB TR0

key_SCAN_END:


JMP loop

;===========================================

InitTimer0:;10ms一次中断

MOV TMOD,#01H

MOV TH0,#0D8H

MOV TL0,#0F0H

SETB EA

SETB ET0

RET

;===========================================

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#0D8H

MOV TL0,#0F0H

;========================

INC COUNTER_INT

MOV A,COUNTER_INT ;10ms 计数值加1

CJNE A,#CN_COUNT_INT,Timer0Interrupt_EXIT

MOV COUNTER_INT,#0

MOV A,SECOND

CJNE A,#99H,Timer0Int_sec

CLR TR0;关闭计时

JMP Timer0Interrupt_EXIT

Timer0Int_sec:

ADD A,#01 ;秒加1

DA A

MOV SECOND,A

SWAP A

ANL A,#0fH

MOV led_buf,A

MOV A,SECOND

ANL A,#0FH

MOV LED_BUF+1,A

;========================

Timer0Interrupt_EXIT:

POP ACC

POP DPL

POP DPH

RETI

;====================================================

; function:Init_M7219 ;初始化max719

; input: ------------

; output: ----------

; usage: a,b

;====================================================

Init_M7219: ;初始化Max7219

MOV a,#0bh ;设置扫描界限

MOV b,#set_limit ;设置位数

lcall w_7219

MOV a,#09h ;设置译码模式

MOV b,#set_model ;00h非译码模式;ffh为BCD译码模式

lcall w_7219

MOV a,#0ah ;设置亮度

MOV b,#set_bright ;15/32亮度

lcall w_7219

MOV a,#0fh ;设置工作方式

MOV b,#set_normal ;正常工作方式

lcall w_7219

MOV a,#0ch ;进入启动工作方式

MOV b,#set_start

lcall w_7219

RET


;===================================================

; function:disp ;显示子程序

; input: r0

; output: -----------

; usage: r0,r3,r4,a,b

;===================================================

disp:

MOV r0,#led_buf

MOV r4,#01h

MOV r3,#set_limit

INC r3

disp1:

MOV a,@r0

MOV b,a

MOV a,r4

lcall w_7219

INC r0

INC r4

djnz r3,disp1

RET


;===================================================

; function:w_7219 ;显示驱动程序;

; input: a ;传送7219的地址

; b ;传送7219的数据

; output:-------------

; usage: a,r2

;====================================================

w_7219:

CLR M7219_clk

CLR M7219_din

CLR M7219_load ;置load=0

lcall sd_7219 ;传送7219的地址

MOV a,b

lcall sd_7219 ;传送数据

setb M7219_load ;数据装载

CLR M7219_din

RET

;=================================================

; function:sd_7219 ;向7219传送数据或地址子程序

; input: a

; output: max7219

; usage: a, r2

;==================================================

sd_7219: ;向7219送地址或数据

MOV r2,#08h

c_sd:

CLR C

CLR M7219_clk

RLC a

MOV M7219_din,c ;准备数据

NOP

setb M7219_clk ;上升沿将数据传入

NOP

NOP

CLR M7219_clk

djnz r2,c_sd

RET


㈣ 学校的课程设计,用proteus单片机和keil设计一个LED数码管显示的秒表,如下

你的程序有问题,仿真图不要用三极管驱动,反而不显示。如下画法就行,那4个按键不变,没有画。

程序中的按键处理,方法不当。

先改成如下的程序,先调出能显示,然后你自己再增加按键功能。

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit START = P1 ^0;

sbit STOP = P1 ^1;

sbit RESET = P1 ^2;

sbit dp = P0 ^7;

sbit w1 = P2 ^6;

sbit w2 = P2 ^7;

uchar aa,temp,STOPFLAG,STARTFLAG,miaoshi,miaoge;

uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表错误

void display();

void delay( uint z);

void init();

void main()

{

init();

while(1)

{

display();//不用带参数

if(aa == 20)

{

aa = 0;

temp ++;

if(temp == 60)

{

temp = 0;

}

}

}

}

void delay(uint z)

{ uchar x,y;

for(x = z; x > 0; x--)

for(y = 110 ; y > 0; y --);//y不能小于110

}

void display()//不用带参数

{

miaoshi = temp/10;

miaoge = temp%10;

w1 = 1;

P0 = table[miaoshi];

delay(2);

w1 = 0;

w2 = 1;

P0 = table[miaoge];

delay(2);

w2 = 0;

}

void init()

{ TMOD = 0x01;

TH0 = (65536 - 50000)/256;

TL0 = (65536 - 50000)%256;

EA = 1;

ET0 = 1;

TR0 = 1;

}

void timer0() interrupt 1

{ TH0 = (65536 - 50000)/256;

TL0 = (65536 - 50000)%256;

aa ++;

}

㈤ 单片机课程设计的介绍

单片机课程设计,是很多高校,电子信息专业、自动化专业、通信专业等学生在校学习期间,必须完成的一项重要的动手实践活动,但现在很多高校的课程设计流于形式,是典型的欺软怕硬。凌阳教育根据对大学生整体动手能力和实践能力的培养要求,精心选择了单片机课程设计与工程应用实例,典型实例包括了单片机接口、A/D转换、D/A转换、道路交通灯控制、温度测量、微机通信、LED点阵字符显示、电子万年历、抢答器等。使学生在学习完后,能真正从事单片机或嵌入式的开发工作。包括项目概述、项目要求、系统设计、硬件设计、软件设计、系统仿真及调试,提供完整的程序清单和电路原理图。采了实际应用项目实例,力求理论和实践相结合,同时考虑培养学生解决工程实际问题和综合应用的能力。典型实例都来自实际工程应用,有助于学生动手能力的培养和锻炼。

㈥ 恳求各位高手:帮忙看一下这个单片机课设题目呗。题目为 ADC0808转换 谢谢!谢谢!

27. ADC0809A/D转换器基本应用技术
1. 基本知识
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1). ADC0809的内部逻辑结构

由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2). 引脚结构
IN0-IN7:8条模拟量输入通道
ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条
ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。
C B A 选择的通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7
数字量输出及控制线:11条
ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。
CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,
VREF(+),VREF(-)为参考电压输入。
2. ADC0809应用说明
(1). ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
(2). 初始化时,使ST和OE信号全为低电平。
(3). 送要转换的哪一通道的地址到A,B,C端口上。
(4). 在ST端给出一个至少有100ns宽的正脉冲信号。
(5). 是否转换完毕,我们根据EOC信号来判断。
(6). 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
3. 实验任务
如下图所示,从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接+5V电压。
4. 电路原理图

图1.27.1
5. 系统板上硬件连线
(1). 把“单片机系统板”区域中的P1端口的P1.0-P1.7用8芯排线连接到“动态数码显示”区域中的A B C D E F G H端口上,作为数码管的笔段驱动。
(2). 把“单片机系统板”区域中的P2端口的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1 S2 S3 S4 S5 S6 S7 S8端口上,作为数码管的位段选择。
(3). 把“单片机系统板”区域中的P0端口的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端口上,A/D转换完毕的数据输入到单片机的P0端口
(4). 把“模数转换模块”区域中的VREF端子用导线连接到“电源模块”区域中的VCC端子上;
(5). 把“模数转换模块”区域中的A2A1A0端子用导线连接到“单片机系统”区域中的P3.4P3.5P3.6端子上;
(6). 把“模数转换模块”区域中的ST端子用导线连接到“单片机系统”区域中的P3.0端子上;
(7). 把“模数转换模块”区域中的OE端子用导线连接到“单片机系统”区域中的P3.1端子上;
(8). 把“模数转换模块”区域中的EOC端子用导线连接到“单片机系统”区域中的P3.2端子上;
(9). 把“模数转换模块”区域中的CLK端子用导线连接到“分频模块”区域中的/4端子上;
(10). 把“分频模块”区域中的CK IN端子用导线连接到“单片机系统”区域中的ALE端子上;
(11). 把“模数转换模块”区域中的IN3端子用导线连接到“三路可调压模块”区域中的VR1端子上;
6. 程序设计内容
(1). 进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。
(2). 进行A/D转换之前,要启动转换的方法:
ABC=110选择第三通道
ST=0,ST=1,ST=0产生启动转换的正脉冲信号
7. 汇编源程序
CH EQU 30H
DPCNT EQU 31H
DPBUF EQU 33H
GDATA EQU 32H
ST BIT P3.0
OE BIT P3.1
EOC BIT P3.2

ORG 00H
LJMP START
ORG 0BH
LJMP T0X
ORG 30H
START: MOV CH,#0BCH
MOV DPCNT,#00H
MOV R1,#DPCNT
MOV R7,#5
MOV A,#10
MOV R0,#DPBUF
LOP: MOV @R0,A
INC R0
DJNZ R7,LOP
MOV @R0,#00H
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
MOV TMOD,#01H
MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256
SETB TR0
SETB ET0
SETB EA
WT: CLR ST
SETB ST
CLR ST
WAIT: JNB EOC,WAIT
SETB OE
MOV GDATA,P0
CLR OE
MOV A,GDATA
MOV B,#100
DIV AB
MOV 33H,A
MOV A,B
MOV B,#10
DIV AB
MOV 34H,A
MOV 35H,B
SJMP WT
T0X: NOP
MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256
MOV DPTR,#DPCD
MOV A,DPCNT
ADD A,#DPBUF
MOV R0,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
MOV DPTR,#DPBT
MOV A,DPCNT
MOVC A,@A+DPTR
MOV P2,A
INC DPCNT
MOV A,DPCNT
CJNE A,#8,NEXT
MOV DPCNT,#00H
NEXT: RETI
DPCD: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH,00H
DPBT: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
END

8. C语言源程序
#include <AT89X52.H>
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char dispcount;

sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
unsigned char channel=0xbc;//IN3
unsigned char getdata;

void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
TR0=1;
ET0=1;
EA=1;

P3=channel;

while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
dispbuf[2]=getdata/100;
getdata=getdata%10;
dispbuf[1]=getdata/10;
dispbuf[0]=getdata%10;
}
}

void t0(void) interrupt 1 using 0
{
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}

阅读全文

与单片机课程设计软件流程图相关的资料

热点内容
朱有鹏单片机和物联网有什么关系 浏览:35
交叉编译的意思是 浏览:618
压缩编制 浏览:876
dmu装配路径命令 浏览:917
重生相逢漫画免费在哪个app 浏览:699
小保养用什么app 浏览:447
阿里云服务器能定位地址 浏览:265
方舟命令行工具 浏览:317
java多线程传输文件 浏览:482
无厘头程序员漫画 浏览:632
macd从入门到精通pdf 浏览:867
程序员回北京老家 浏览:325
藏族pdf 浏览:657
矩形密封圈压缩量 浏览:593
电脑设置ntp时间同步服务器地址 浏览:20
怎么更有效招聘对日程序员 浏览:149
命令号角 浏览:275
格力双转子压缩机 浏览:614
hp服务器上的ip地址 浏览:562
c语言编程计算100以内的所有素数 浏览:625