毕业设计说明书(文)
作 者: 学 号:
系 部: 通信工程学院
专 业: 通信工程(计算机通信)
题 目:基ARM嵌入式温度控制系统设计
指导者: 副教授
评阅者:
2014 年 X 月
摘
温度测量控制工业生产中广泛应尤石油化工电力冶金等工业领域中温度测量监控非常重环节温度参数工业控制中项重指标
文研究基ARM7架构嵌入式系统温度控制应基ARM7 核 LPC2124 DS1820采集温度信号 通RWB 温度变送器 AD 转换获实际温度值 时通 LCD 实时显示 温度控制系统应热电仪 实际应表明 系统稳定 满足热电仪温度控制求
关键词:ARMProteus嵌入式系统温度控制系统
Abstract
Measurement and control of temperature is widely used in industrial production especially in the petroleum chemical electric power metallurgy and other industrial fields measurement and monitoring of the temperature is a very important link the temperature parameter is an important index in industrial control
This paper mainly studies the ARM7 based embedded system for the application of temperature control based on ARM7 which based on the LPC2124 kernel the DS1820 collecting temperature signal to obtain the actual temperature value through the RWB temperature transmitter and AD conversion at the same time through the LCD real time display This paper introduces the principle the system implementation process gives some application circuits This temperature control system used in the power system the practical application shows that the system is stable and reliable meet the thermoelectric instrument temperature control requirements
Key words: ARMProteusEmbedded systemTemperature control system
目录
第章 绪 1
11 引言 1
12 选题背景意义 1
13 研究现状 2
14 文研究容 3
15 章节安排 3
第二章 开发工具介绍 4
21 Proteus功 4
211 Proteus功简述 4
212 资源丰富 5
213电路仿真 5
22 ADS12 6
221 ADS种类 6
222 软件组成 7
第三章 软硬件介绍 8
31 ARM 8
311 ARM简介 8
312 ARM7 8
32LPC2124处理器 9
321LPC2124简介 9
322 特性 9
323 结构 10
324引脚描述 11
33硬件系统整体结构 11
331硬件系统设计原 11
332系统硬件整体结构 12
333 基硬件组成 12
第四章 软件设计 17
41系统软件整体结构 17
421测控系统 18
422显示数字功 19
423 AD转换数采集程序功实现 21
第五章 总结展 25
51 全文总结 25
52续工作展 25
致谢 27
参考文献 28
附录 29
第章 绪
11 引言
嵌入式系统年广泛应种工业领域线通信领域智仪表消费电子等领域离开微电子技术迅猛发展种嵌入式应计算机硬件软件相结合手段完成指定务功嵌入式系统系统分分系统级电路板级设备级系统级指种工业控计算机板级指CPU板OEM(原始设备制造商)产品常见设备单片微机嵌入式应越越广泛半导体厂商致力研发嵌入式微处理器出现许支撑嵌入式应嵌入式操作系统般某领域着特殊求嵌入式系统必须做出相应调整仅求产品体积够够实时掌握现场情况系统工作环境中出色完成务求产品具令满意成效益嵌入式系统发展选择特定应嵌入式处理器嵌入式操作系统该匹配十分重
温度控制系统特点程控制 控制系统温度控制系统独特特性该系统机械机电象微分方程求解线性定长参数动态问题种情况样手段解决温度程中问题会较结果场容易产生较误差热传送形式 具备直观非线性时变性分布性时间滞特性果分析方法建模结果通常非常复杂模型进行简化中失重素 模型象难致温度系统建模 通常实证模型理分析实证研究文温度控制系统进行研究阐述优化PID控制算法利微处理器LPC2124具ARM7核通传感器DS1820温度信号采集整定实现实时控制系统效参数准确控制需温度系统电加热器控制器温度传感器变换器三部分组成形成闭环控制回路整定实现实时控制系统效参数准确控制需温度
12 选题背景意义
年生产生活中种应出现增加微电子技术嵌入式技术需时促进动控制理断发展尤工业控制象特定工业控制器测量控制系统设计进入新领域
温度测量控制具重意义尤工业生产中石油化工冶金电力行业样重工业领域热处理炉熔融金属坩埚炉种反应器工业中非常普遍许行业需量加热装置温度关温度控制中成非常敏感参数类型目方式加热方法样石油提炼气体汽油发电厂发电方式等等控制系统断变化基属非实时性
温度种熔炼生产中非常常见属重控制素关温度测量控制技术开发具备巨实际利价值应前景尤许工业场合中产品质量设备运行安全性济性直接受温度影响例电厂锅炉蒸汽温度进行控制整程需严格控制测量通常热器10℃低20℃环境中年限会减少严重影设备安全生产员造成非常潜危害太低热蒸汽温度会降低设备运转效率汽轮机级蒸汽湿度增加会造成汽轮机叶片磨损般情况汽温降低10℃循环热效率会降低约05%
13 研究现状
助越越先进互联网技术通年发展嵌入式系统迎第二次革新时代初低端应现种高端低端应时流行求较低嵌入式系统停发展年32位MCU出现新兴产品
目前电流控制方案基传统PLC单片机控制满足数户需PLC数情况简单工程少重复工程缺点够灵活占空间代价较高想增加功需较额外组件单片机出现型设备控制中特控制专业电子设备优点花费少耗低运行速度快缺点诸程序初时装入未户修改外围设备控制力抗干扰力较低适应信息产业发展现代化发展新技术创新产业化文采32位ARM7嵌入式LPC2124 ATMEL微控制器实现温度控制具良扩展性性高精度高测量务实时调度控制响应速度快体积等优良特性实际应中已成户首选
14 文研究容
该文涉理基础嵌入式ARM温度控制系统硬件接口功C语言函数序包括方面:
方面ARM7理基础系统组成分类应领域研究现状进行综述分析研究难点探讨学遇困难接着设计中ARM7接口功作介绍余接口适增加系统功设计更加完善
方面设计完全proteus软件中进行仿真Proteus进行详介绍程序编辑编译ADS12ADS12种类软件组成作简单介绍
全文成果加总结讨添加液晶显示屏系统具良机交互界面必进步研究展
15 章节安排
首先介绍课题研究背景实际生产生活意义第章总体介绍设计容第二章介绍ARM结构描述Proteus软件应介绍ADS12第三章专门分析硬件设计需注意问题选择什处理器温度传感器第四章阐述软件设计功实现应段程序代码第五章出综合测试结果发现问题进行讨提出解决办法出结课题未发展做出合理展
第二章 开发工具介绍
21 Proteus功
Proteus软件英国实验室中心研发EDA软件工具(广州风标电子技术限公司代理该软件中国权)应丰富拥样软件功够单片机进行仿真模拟外接模块单片机教学试验中已成首选软件图21示
图21 Proteus软件图
211 Proteus功简述
Proteus软件具备常EDA(:MULTISIM)功功:
1.原理布图
2.PCB动工布线
3.SPICE电路仿真
革命性特点
1.互动电路仿真
机存储寄存器读存储器键盘引擎LEDLCD模数转换数模转化SPI元件IIC元件模块 户实时采
2.仿真处理器外围电路
仿真流芯片51系列AVR单片机PIARM芯片等[1]直接基虚拟样机原理图设计加显示输出运行输入输出影响
212 资源丰富
1.Proteus仿真组件提供资源:数字模拟仿真ACDC成千万成分30元件库
2.Proteus仿真组件包含许显示模块:示波器逻辑分析仪虚拟终端SPI调试器I2C调试器信号发生器模式发生器交直流电压表交直流电流表理相仪器电路中意调
3.生产生活已应起Proteus格外增加显示图功够线路信号改变予实时显示示波器具功Proteus功更[1]仿真模块设置合格参数指标输入阻抗输出阻抗非常低量减少仪器质量测量结果影响
4.Proteus具更加全面测试信号测试电路测试信号包含模拟数字信号
213电路仿真
PROTEUS搭建模型完成导入ADS12编辑编译成功目标程序:*HEX够PROTEUS中实物完全相运行效果
PROTEUS 种先进单片机课堂教学助理
PROTEUS够模拟单片机功更具形象化模拟单片机做实例前者相程度物理演示实验效果者效果难通实物演示实验达
优点组件线路等原始单片机实验硬件兼容课程设计毕业设计完成学生理转化实践重环节成功业前提种种类繁组件般实验室完全拥PROTEUS拥元器件模块更具目方便修改电路设计着科技发展计算机仿真技术已成许设计部门重前期设计手段够灵活设计模块设计程中时查结果够设计时间缩短成化减少降低工程制造风险相信PROTEUS单片机开发应中会越越应
目前新版Proteus80增加ARM cortex处理器710版中增加DSP系列(TMS320)
22 ADS12
221 ADS种类
ADS包括三种调试器:
1AXD(扩展调试器):ARM调试器
2armsd(ARM符号调试器):ARM 符号调试器
3ARM调试工具中常操作系统WindowsUnix版兼容ADWADU(Application Debugger WindowsUnix)
222 软件组成
1编译器:ADS具备种编译器处理ARMThumb指令
Armcc属ARM C编译器
Tcc属Thumb C编译器
Armcpp属ARM C++编译器
Tcpp属ThumbC++编译器
Armasm属ARMThumb汇编器
2链接器:armlinkARM链接器该命令够意数量目标文件进行编译意数量数库文件链接关系然执行文件众目标文件指目标文件局部[3]
3符号调试器:armsdARMThumb符号调试器4fromELF:需输出文件转换特定格式时原始格式文件转换成相应格式支持文件包含Motorola 32位S格式映文件bin格式映文件Verilog十六进制文件Intel 32位格式映文件
5armar:armar函数生成器存ARM库中收集系列ELF格式目标文件库函数形式户库传递方式链接器代ELF文件
6CodeWarrior:CodeWarrior集成开发环境(IDE)简单图形户界面元化营发展项目提供巨方便户开发程序代码时
7调试器:ADS中含3调试器:包含AXDARM独扩展调试器第二armsdARM符号调试器第三旧版操作系统ARM调试工具兼容
8CC++库:ADS包含关ANSI C库函数C++库函数够编译CC++代码户添加C库应程序中部分目标相关功通代码实现
第三章 软硬件介绍
31 ARM
311 ARM简介
ARM知识产权(IP)供应商显著特点芯片制造销售公司仅仅转设计方案ARM公司利种双赢伙伴关系迅速成全球性RIRC微处理器标准缔造者种方法者带极利益原者熟悉种ARM核节开发工具原理相公司研发ARM核芯片
前世界100家公司ARM公司达成商技术许协议中特尔IBMLGNECSONYNXPNS业企业开发软件系统合伙包括Microsoft升阳MRI等系列知名公司
ARM架构处理器ARM公司类产品成低已成功商具性价高罕见高代码密度良实时中断响应低功耗芯片面积成首选嵌入式系统[4]ARM架构越越移动电话数字终端MP3MP4形态异娱乐电子产品2004年12亿片ARM处理器ARM公司合作伙伴生产出应种生活生产中
312 ARM7
ARM公司1995年设计研发首ARM7TDMI处理器核现世界广泛款核ARM7系列种类繁包括ARM7TDMI型号ARM7TDMIS型号拥高速缓存处理器宏单元ARM720T扩充JAZELLEARM7EJS该类型处理器集成Thumb 16位简易指令集基Embedded ICE JTAG软件调试方式许应SoC设计中显示出优越特性时ARM720T高速缓存处理宏单元进行强化仅增加8KB缓存读缓设置具高性存理处理器支持LinuxWindows CE等操作系统
32LPC2124处理器
321LPC2124简介
LPC2124微控制器建立够实时仿真踪1632位ARM7TDMIS CPU高速片Flash存储器包含0KB128KB256KB三种加速结构存储器接口芯片拥128位宽度独特32位程序运行时钟速率16位Thumb模式够降低程序30程序严格求应代价损失非常性
LPC2124拥64144脚封装两种型号类芯片中耗低配备4路10位ADC(64脚144脚封装)32位定时器9外部中断工业应医疗设备访问控制终端机中具广泛应[5]
322 特性
132位64144脚ARM7TDMIS微控制器
216KB静态RAM
3 片Flash程序存储器分0KB128KB256KB三种128位宽度接口加速器操作频率高达60MHz
4外部81632位总线(144脚封装)
5通外部存储器接口分配存4组组容量高位16MB
6系统编程(ISP)应中编程(IAP)够片Boot转载程序实现1msFlash编程时间编程512字节400ms实现扇区擦整片擦
7需Boot装载应程序装入设备RAM中时UART0进行装载时够RAM中运行
8嵌入式踪宏单元(ETM)功够干扰高速实时踪进行中执行代码
94路64脚封装8路144脚封装10位AD转换器转换时间低减少244ms
10232位定时器分带4路捕获4路较通道PWM单元(6路输出)实时时钟门狗
323 结构
图31中示LPC2124图中ARM7TDMISCPU仿真功ARM总线存控制器接口片存储器控制器接口ARM7局部总线
AHB外设设立2MB址空间分布4GBARM存址顶端16KB空间AHB外设具LPC2124外围功(中断控制器)全部VPB总线相连VPB总线AHB总线连接需AHBVPB桥连接起VPB外设拥2MB空间空间35GB址点开始分配[6]
引脚连接模块控制连接片外设器件引脚软件够控制引脚连接模块引脚连接特定片外围设备
图 31 LPC2124方框图
324引脚描述
LPC2124引脚分布图32示
图32 LPC212464脚封装
33硬件系统整体结构
331硬件系统设计原
硬件系统设计中必须遵循原:
(1)稳定性性:数工业实施环境非常具挑战性模拟量参数处理坏系统技术指标直接影响必须环境予充分考虑采取效抗干扰措施正确组件类型参数避免串扰误差积累部分设计化硬件电路简单选择较高集成度组件系统具备良抗干扰性优越稳定性性
(2)速度精度:误差允许极限值根相应规需部分误差系统设计程中根位数更高转换芯片提高转换精度选定终电路结构
(3)功耗数存储:LPC2124显著特征身拥非常低耗VDDCORE工作电流仅30.4mA机模式工作电流仅3.1mA低速时钟操作模式软件功耗优化力两优点十分适应耗敏感场合采低功耗器件贴片封装元器件效降低功耗减PCB面积提高电路身抗干扰性考虑数存储安全保障系统采32MNandFlash作数程序存储区确保高容量数存储[7]
332系统硬件整体结构
系统整体结构图33示
图33 系统硬件整体结构
系统分模块:
(1)CPU核心模块:通常CPU外围设备构成控制电路系统CPU采ATMEL公司研发设计ARM7够数进行处理存储通讯等系列操作
(2)模拟电路:包含信号处理电路信号输出电路两模块信号处理电路完成模拟量输入信号放滤波获模数转换电路输入范围数值信号输出电路通算法修改数字量变应模拟信号进行导出完成控目标控制
(3)存储模块:班NorFlashSDRAMNandFlash三部分构成中NorFlash启动程序系统核存储系统SDRAM作操作系统应程序工作空间NANDFlash保存采集数应程序
333 基硬件组成
1 时钟电路
图34示LPC2124芯片振荡器器件反相放器XTAL1端输入XTAL2端输出电路时钟够部设备者外接设备产生XTAL1XTAL2引脚连接某定时器件置振荡电路产生相应激振荡该系统联谐振电路采石英晶体电容器电路晶振频率选择110592MHZ电容器C1C2电容均取值30pF电容频率进行微调
图34 时钟电路
2 键盘输入电路
图35示系统中采独立式键盘键盘设定控制系统需值样系统实验值进行较计算误差系统误差第键功加1第二键功减1
图35 键盘输入电路
3 显示电路
显示电路采LCD功组件(LM016L)显示温度测量值设定值显示电路图36示
图36 显示电路
4 温度控制电路
系统中控制核心电路(控制加热丝加热电路)采零检测晶闸触发器件MOC3061组成触发电路次器件专门设计双晶闸触发器LED工作时发射红外线果时零电路检测输出端工作电压零光控双晶闸触发导通否断图37示MOC3061组成触发电路[8]
图37 MOC3061组成触发电路
5 传感器模
设计采DS1820传感器图38示刚研发线器件特征更加巧种电压工作成更低DS1820DALLAS半导体公司研发数字化温度传感器全球首够线总线温度传感器线总线具特便宜特点户够方便快捷搭建传感器网络诞生新概念——测量系统构建 线总线开始发展温度传感技术DS1820卓越发展
图38 DS1820结构框图
DS1820够方便测测量温度精确连接器件方便需连接口线少然存需注意问题:
(1) 硬件较开销决定软件必少复杂DS1820CPU传递信息串行方式读写入DS1820代码时尤确保读写时序正确否法读取测温结果设计系统程序时PLMC语言等高级语言汇编语言接硬件层面适合编写系统操作部分
(2)介绍DS1820材料中没说单总线够挂少DS1820认够挂DS1820实际应中情况相径庭[9]
(3)通常连接DS1820总线数量严格求实践中果选常信号电缆进行50米距离传输时读取错误测温数想般通讯距离增加150m双绞线加屏蔽电缆代总线电缆想进行更远距离正常通讯抗干扰力更强双绞线带屏蔽电缆种现象总线分布电容导致信号波形发生变形DS1820进行远距离测温时总线分布电容阻抗匹配问题必须予充分考虑
(4)DS1820温度传感器时DS1820执行温度转换命令系统立开始等DS1820返回信号果DS1820接触良断线系统该DS1820时法读取返回信号程序法执行问题DS182进行0硬件连接程序设计时必须重视
第四章 软件设计
41系统软件整体结构
周期采集AD通道中模拟量重环节包含温度控制系统应程序设计程中计算机控制系统流程中通较采样值定量差值控制算法进行数处理处理数模变换数字信号变模拟控制信号输出执行机构实现控象控制图41显示计算机控制系统基框图[10]
图41 计算机控制系统基框图
前计算机控制系统中常见控制算法三种分模糊控制PID控制神网络算法等传统PID控制广泛应工业程控制调整PID控制器参数kKi‰取良效果适应种象年通模仿思维获长足发展模糊控制够复杂系统难建立数学模型系统现实简单效控制种神网络算法通模拟图直觉思维种算法具强适应性实现类型分类辨识非线性象方面功完善
根计算机控制系统特点毕业设计温度控制系统实现功:
(I)远程手动动模式转换功
(2) 档ADDA数超限发出报警指示
42功实现
421测控系统
程序流程图图42示
模糊控制
开始
输出清零
开始
显示字符
目标板初始化
控制IO方
引脚功配置
图42 程序流程图
422显示数字功
子程序流程图图43示
i > 0
开始
i 5
假
真
数转换取出低位
掉低位
i 1
i 0
数字转换成数组
指定位置显示数字
开始
图43 显示数字子程序流程图
函数关键部分实现:[11]
void ShowInt(uint8 addruint16 num) addr处显示数字num
{num转化成5BCD码存放全局数组BCD[5]中
uint8 i
for(i5i>0i) NUM数转化成ASCII码521会转化00521
{
BCD[i1](uint8)(num10+0x30) 取出低位
num10 掉低位
}
i0
while(BCD[i] 0x30 && i<4) BCD[i++]' ' NUM转换成数组存放没加 数点
BCD[5]'\0'
DisText(addrBCD)
}
423 AD转换数采集程序功实现
子程序流程图图44示
开始
AD模块设置
延时
读取AD转换结果
设置通道1进行第次转换
等转换结束
次启动转换
等转换结束
读取AD转换结果
提取AD转换值
数值转换
返回
图44 AD转换子程序流程图
函数关键部分实现:[12]
uint32 AD_Convert(void)
{
uint32 data
进行ADC模块设置中x<
((Fpclk 1000000 1) << 8) | CLKDIV Fpclk 1000000 1 转换时钟1MHz
(0 << 16) | BURST 0 软件控制转换操作
(0 << 17) | CLKS 0 11clock转换
(1 << 21) | PDN 1 正常工作模式(非掉电转换模式)
(0 << 22) | TEST10 00 正常工作模式(非测试模式)
(1 << 24) | START 1 直接启动ADC转换
(0 << 27) EDGE 0 (CAPMAT引脚降触发ADC转换)
delay(10)
ADC_Data ADDR 读取ADC结果清DONE标志位
while(1)
{
ADCR (ADCR&0x00FFFF00)|0x01|(1 << 24) 设置通道1进行第 次转换
while( (ADDR&0x80000000)0 ) 等转换结束
ADCR ADCR | (1 << 24) 次启运转换
while( (ADDR&0x80000000)0 ) 等转换结束
ADC_Data ADDR 读取ADC结果
ADC_Data (ADC_Data>>6) & 0x3FF 提取AD转换值
ADC_Data ADC_Data * 1001024 数值转换
dataADC_Data
return(data)
}
}
43运行结果说明
1系统刚开始设定温度26℃图45[13]
图45 系统开始运行状态
2系统开启风扇降温时20℃图46示
图46 系统工作状态图
第五章 总结展
51 全文总结
设计务设计种温度控制系统究实质嵌入式系统应通温度控制系统中应方案现阶段工业领域国现状外嵌入式开发场合结构种嵌入式处理器性较终选择基ARM嵌入式控制系统ATMEL公司工业级32位高性处理器AT91RM9200融合ARM920T型ARM核频达180MHz配备16KB数缓存空间16KB指令缓存空间种耗低成性高微控制器文采嵌入式操作系统嵌入式处理器基础设计基ARM嵌入式温度控制系统硬件部分选AT91RM9200基础设计模拟电路模块存储模块通讯模块四部分模拟电路模块包括信号处理电路信号输出电路存储模块4MBNorFlash32MBSDRAM64MBNandFlash三部分组成软件部分main(程序)ad(AD数采集)da(DA数接收)组成完成采集AD通道数等务子程序异常退出者中途终止时程序时重启子进程测试程序基达需功程序运行安全[14]
52续工作展
设计中需完善方:
1系统没机界面(HMI)采服务器客户端方式进行数间通讯完善系统需添加液晶显示界面构建视化菜单系统具良机交互界面方便操作员实时监视操作
2程序编写方面传输性较局域网设计没针恶劣网络环境数传输进行改善工作中需针网络进行容错处理丢包处理确保数准确性针工艺流程完善远程手动动功确保工艺控制优化
做出优秀设计方案需清楚认识户求方面根户求选择系统硬件外设编写相应程序精简程序软件够完成部分系统功助迅速发展信息产业嵌入式产品迎美发展前进机遇久越越产业越越复杂应需嵌入式设备嵌入式产品长足发展
致谢
毕业设计导师XX导师精心指导悉心关怀完成学业设计指导工作中倾注着导师辛勤汗水心血导师严谨治学态度渊博知识私奉献精神深受启迪尊敬导师身仅学扎实宽广专业知识学做道理导师致衷心感谢深深敬意
文撰写程中XX等提出宝贵意见建议表示深深感谢
年学生活中许学院领导系领导老师热情关心帮助
感谢父母亲学业中莫鼓励关爱支持
关心帮助领导老师学朋友表示衷谢意
衷心感谢百忙中评阅文参加答辩位老师
XX
2014年X月
参考文献
[1]周润景袁伟婷景晓松ProteusMCS51&ARM7系统中应百例[M].北京.电子工业出版社2006
[2]周立功等.ARM嵌入式系统基础教程[M].北京.北京航空航天学出版社2008
[3]孙秋野等.ARM嵌入式开发典型模块[M].北京.民邮电出版社.2007
[4]田泽等.嵌入式系统开发应教程[M].北京北京航空航天学出版社2005
[5]李伯成等.嵌入式系统性设计[M].北京.电子工业出版社2006.1
[6]Texas Instrumentsincorporated[M].ADS7842Data Sheet.2002
[7]金成植.编译程序构造原理实现技术[M].高等教育出版社.2000.7
[8]马忠梅.ARM嵌入式处理器应基础[M].北京航空航天出版社2002
[9]张绮文等.ARM嵌入式常模块综合系统设计精讲[M].北京.电子工业出版
社.2006
[10]李剑赵鹏程等.32位ARM嵌入式微处理器调试技术[M].电子技术应
2001.23
[11]姚放吾.嵌入式系统软件/硬件协设计.微计算机信[M]息2001.10
[12]Jack Ganssle.In—Circuit Emulator.Embedded Systems Programming[M].2001.
[13]ARMLimited.Real timedebugforSystem—On·ChipDevice[M].1998.8~24
[14](美)QingLi等.嵌入式系统实时概念[M].北京.北京航空航天出版社2004
附录
源程序清单:
****************************************************************************
* File mainc
* 功:LCD输出计数值
****************************************************************************
#include configh
#define rs (1<<9)
#define rw (1<<10)
#define en (1<<11)
#define busy (1<<7)
#define ke 2
#define kec 25
uint8 eec
fp32 ectemppreleveletemp
uint8 temp0
uint8 fuzzycode[21][11]
{
{55555543211}
{55555542211}
{55555542211}
{55555542111}
{55555542111}
{55555542111}
{55544432111}
{55544432111}
{55444322100}
{55443211100}
{44332111000}
{33221110000}
{22221110000}
{22211000000}
{22211000000}
{11111000000}
{11111000000}
{11111000000}
{11111000000}
{11111000000}
{11111000000}
}
uint8 BCD[7] 十位二进制显示码分千百十位显示
uint32 ADC_Data
void ShowInt(uint8 addruint16 num)
void ShowByte(uint8 addruint16 num)
uint32 AD_Convert(void)
void fuzzy(void) 函数声明
void PWM0(void)
void PWM1(void)
void PWM2(void)
void PWM3(void)
void PWM4(void)
void PWM5(void)
****************************************************************************
* File main()
* 功:显示计数值
****************************************************************************
int main(void)
{
PINSEL00x00020000
PINSEL10x00000000
IO0DIR0x00cfffff 设置输出
IO0CLR0xeff
TargetInit()
ShowByte(0x800)
ShowByte(0xc00)
fuzzy()
return(0)
}
****************************************************************************
* Filedelay()
* 功:延时
****************************************************************************
void delay(uint32 dly)
{ uint32 i
for( dly>0 dly)
for(i0 i<500 i++)
}
****************************************************************************
* Filetimer0_init
* 功:定时器0初始化
****************************************************************************
void timer0_init(void)
{定时器计数器0设置晶振12M1秒运行1000000周期
T0PR0 预分频寄存器
T0MR0Fpclk20 匹配值
T0MCR0x00000003 开放匹配0中断
T0TCR0x00000003 T0PCT0TC复位
T0TCR0x00000001 T0PCT0TC复位
}
void timer1_init(void)
{定时器计数器0设置晶振12M1秒运行1000000周期
T1PR0 预分频寄存器
T1MR0Fpclk20 匹配值
T1MCR0x00000003 开放匹配0中断
T1TCR0x00000003 T0PCT0TC复位
T1TCR0x00000001 T0PCT0TC复位
}
****************************************************************************
* FiletimerInt
* 功:中断处理程序
****************************************************************************
void __irq timer0Int(void) 定时器0中断处理程序
{ uint32 d
dAD_Convert()
ShowInt(0x86d)
VICVectAddr0
T0IR0x00000001
}
void __irq timer1Int(void) 定时器1中断处理程序
{
fuzzy()
VICVectAddr0
T0IR0x00000001
}
****************************************************************************
* Fileint_init()
* 功:中断初始化
****************************************************************************
void int_init(void)
{
VICIntSelect0x00000000
VICIntEnable0x00000030
VICVectCntl00x00000024
VICVectAddr0(int)timer0Int
VICVectCntl10x00000025
VICVectAddr1(int)timer1Int
}
****************************************************************************
* 名称:ChkBusy()
* 功:检查总线否忙
****************************************************************************
void ChkBusy()
{
IO0DIR0xe00
while(1)
{
IO0CLRrs
IO0SETrw
IO0SETen
if((IO0PIN & busy))break
IO0CLRen
}
IO0DIR0xeff
}
****************************************************************************
* 名称:WrOp()
* 功:开显示函数
****************************************************************************
void WrOp(uint8 dat)
{
ChkBusy()
IO0CLRrs 全部清零
IO0CLRrw
IO0CLR0xff 先清零
IO0SETdat 送数
IO0SETen
IO0CLRen
}
****************************************************************************
* 名称:WrDat()
* 功:写数函数
****************************************************************************
void WrDat(uint8 dat)
{
ChkBusy()
IO0SETrs
IO0CLRrw
IO0CLR0xff 先清零
IO0SETdat 送数
IO0SETen
IO0CLRen
}
****************************************************************************
* 名称:lcd_init()
* 功:lcd初始化函数
****************************************************************************
void lcd_init(void)
{
WrOp(0x38)
WrOp(0x06) 光标加1
WrOp(0x0c) 显示
}
****************************************************************************
* 名称:DisText()
* 功:显示文函数
****************************************************************************
void DisText(uint8 addruint8 *p)
{
WrOp(addr)
while(*p '\0')WrDat(*(p++))
}
****************************************************************************
* 名称:DisInt()
* 功:显示文函数
****************************************************************************
void ShowInt(uint8 addruint16 num) addr处显示数字num
{num转化成5BCD码存放全局数组BCD[5]中
uint8 i
for(i5i>0i) NUM数转化成ASCII码521会转化00521
{
BCD[i1](uint8)(num10+0x30) 取出低位
num10 掉低位
}
i0
while(BCD[i] 0x30 && i<4) BCD[i++]' ' NUM转换成数组存放没加数点
BCD[5]'\0'
DisText(addrBCD)
}
void ShowByte(uint8 addruint16 num) addr处显示数字num
{num转化成5BCD码存放全局数组BCD[5]中
uint8 str1[]MeasT
uint8 str2[]SetT
if (addr0x80){DisText(addrstr1)}
if (addr0xc0){DisText(addrstr2)}
}
uint32 AD_Convert(void)
{
uint32 data
进行ADC模块设置中x<
((Fpclk 1000000 1) << 8) | CLKDIV Fpclk 1000000 1 转换时钟1MHz
(0 << 16) | BURST 0 软件控制转换操作
(0 << 17) | CLKS 0 11clock转换
(1 << 21) | PDN 1 正常工作模式(非掉电转换模式)
(0 << 22) | TEST10 00 正常工作模式(非测试模式)
(1 << 24) | START 1 直接启动ADC转换
(0 << 27) EDGE 0 (CAPMAT引脚降触发ADC转换)
delay(10)
ADC_Data ADDR 读取ADC结果清DONE标志位
while(1)
{
ADCR (ADCR&0x00FFFF00)|0x01|(1 << 24) 设置通道1进行第次转换
while( (ADDR&0x80000000)0 ) 等转换结束
ADCR ADCR | (1 << 24) 次启运转换
while( (ADDR&0x80000000)0 ) 等转换结束
ADC_Data ADDR 读取ADC结果
ADC_Data (ADC_Data>>6) & 0x3FF 提取AD转换值
ADC_Data ADC_Data * 1001024 数值转换
dataADC_Data
return(data)
}
}
void PWM0(void)
{ IO0DIR1<<23|1<<8
IO0SET1<<23
PWMMR0Fpclk25 设置PWM周期
PWMMR40 设置PWM占空
PWMLER0x11
}
void PWM1(void)
{ IO0DIR1<<23|1<<8
IO0CLR1<<23
PWMMR0Fpclk25 设置PWM周期
PWMMR4Fpclk50 设置PWM占空
PWMLER0x11
}
void PWM2(void)
{ IO0DIR1<<23|1<<8
IO0CLR1<<23
PWMMR0Fpclk25 设置PWM周期
PWMMR4Fpclk10 设置PWM占空
PWMLER0x11
}
void PWM3(void)
{ IO0DIR1<<23|1<<8
IO0CLR1<<23
PWMMR0Fpclk25 设置PWM周期
PWMMR4Fpclk5 设置PWM占空
PWMLER0x11
}
void PWM4(void)
{ IO0DIR1<<23|1<<8
IO0CLR1<<23
PWMMR0Fpclk25 设置PWM周期
PWMMR4Fpclk33 设置PWM占空
PWMLER0x11
}
void PWM5(void)
{ IO0DIR1<<23|1<<8
IO0CLR1<<23
PWMMR0Fpclk25 设置PWM周期
PWMMR4Fpclk249 设置PWM占空
PWMLER0x11
}
void fuzzy(void)
{
uint8 U
uint8 setlevel
fp32 nowlevelc
IO0DIR1<<23
while(1) 温度设定值
{ if((IO0PIN&0x00300000)0x00300000)
delay(10)
if((IO0PIN&0x00300000)0x00300000)
{
if((IO0PIN&0x00300000)0x00200000) 加计数
temp++
if((IO0PIN&0x00300000)0x00100000) 减计数
temp
while((IO0PIN&0x00300000)0x00300000)
ShowInt(0xc6temp) 显示设定值
}
setleveltemp
nowlevelcAD_Convert()
etempnowlevelcsetlevel
ectemp10*(nowlevelcprelevel)
prelevelnowlevelc
if(etemp>5){e5*ke+10 }
else if(etemp<5){e5*ke+10}
else {eetemp*ke+10}
if(ectemp>2) {ec2*kec+5}
else if(ectemp<2) {ec2*kec+5}
else
{
if(ectemp<15){ec2*kec+5}
else if(ectemp>15 && ectemp<05) {ec1*kec+5}
else if(ectemp>05 && ectemp<05){ec5}
else if(ectemp>05 && ectemp<15) {eckec+5}
else {ec2*kec+5}
}
Ufuzzycode[e][ec] 输出占空控制
if (U0){PWM0()}
if (U1){PWM1()}
if (U2){PWM2()}
if (U3){PWM3()}
if (U4){PWM4()}
if (U5){PWM5()}
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档