(整理)基于DS8B20的温度测试仪
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
苏州大学应用技术学院《电子技术综合设计》
实验报告
《电子技术综合设计》实验报告
实验名称:基于DS18B20温度测试仪
苏州大学应用技术学院
10信息/09组
王兆奇/1016407003 臧寿池/1016407019
马泽鑫/1016407043 季伟/1016407049
2013年10月24
目录
1. 任务 (4)
1.1. 描述 (4)
1.1.1. 组成 (4)
1.1.2. 功能 (4)
1.2. 要求 (4)
1.2.1. 基本要求 (4)
1.2.2. 分工 (4)
2. 方案 (4)
2.1. 可选方案 (4)
2.1.1. 方案1 (4)
2.1.2. 方案2 (5)
2.2. 方案确定 (5)
2.2.1. 主要思路 (5)
3. 设计 (5)
3.1. 硬件设计 (5)
3.1.1. 单元1 (5)
3.1.2. 微控制器STM32F103ZET6等单元说明: (6)
3.1.3. 温度传感器DS18B20的工作原理 (7)
3.1.4. 显示模块的设计 (8)
3.1.5. LCD液晶显示屏与单片机接口电路设计 (8)
3.1.6. 软件结构 (9)
3.1.7. 主要函数说明 (10)
4. 制作 (10)
4.1. 制作 (10)
4.1.1. 过程 (10)
4.1.2. 分工 (10)
4.2. 实物外形 (10)
5. 测试 (11)
5.1.1. 系统仿真 (11)
5.1.2. 系统硬件调试 (11)
5.1.3. 系统软件调试 (11)
5.2. 结果 (11)
6. 总结 (13)
参考文献 (13)
附录 (14)
附录1: (14)
主程序: (14)
子程序: (18)
1.任务
1.1.描述
本文在基于DS18B20温度测试仪及微控制器工作原理的基础上,详细介绍了该系统的硬件和软件设计过程。
其中,硬件设计是以微控制器STM32F103ZET6和DS18B20数字温度传感器为核心器件,主要由温度采集、微控制器、LCD温度显示、串口显示四部分组成。
软件设计采用模块化编程方法,使得程序易于调试和维护,并利用C语言实现数据处理、LCD显示、串口显示等各功能子程序的编写。
该系统结构简单、抗干扰性强、实用性强,具有一定的工程应用价值。
1.1.1.组成
硬件设计是以微控制器STM32F103ZET6和DS18B20数字温度传感器为核心器件,主要由温度采集、微控制器STM32F103Z数据处理、LCD温度显示、串口显示四部分组成。
1.1.
2.功能
该测温系统应用测温传感器DS18B20,通过DS18B20把温度值转换成数字量,把数字量送给微处理器,并在液晶显示器上以及串口助手上显示出来。
1.2.要求
1.2.1.基本要求
该测温系统应用测温传感器DS18B20,通过DS18B20把温度值转换成数字量,把数字量送给微处理器,并在液晶显示器上显示出来。
1.2.2.分工
总体设计臧寿池
软件设计王兆奇
硬件设计马泽鑫
文档编辑季伟
2.方案
2.1.可选方案
2.1.1.方案1
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,可满足40摄氏度至90
摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的。
而且在温度测量系统中,采用单片温度传感器,比如AD590,LM35等。
但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使得测温装置的结构较复杂。
另外,这种测温装置的一根线上只能挂一个传感器,不能进行多点测量。
即使能实现,也要用到复杂的算法,一定程度上也增加了软件实现的难度。
2.1.2.方案2
基于DS18B20温度测试仪,传统的测温方法是将模拟信号远距离采样进行A/D转换,而为了获得较高的测温系统,就必须采用措施解决由长线传输,多点测量切换及放大电路零点漂移等造成的误差补偿问题。
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
在0-100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STM32F103ZET6构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
本次采用温度芯片DS18B20测量温度,可以体现系统芯片化的这个趋势。
部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。
而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。
所以集成芯片的使用将成为电路发展的一种趋势。
本方案应用这一温度芯片,也是顺应这一趋势。
2.2.方案确定
2.2.1.主要思路
综上所述,方案使用了STM32F103ZET6作为控制核心,以智能温度传感器DS18B20为温度测量元件,显示电路采用LCD显示模块以及串口调试助手显示。
3.设计
3.1.硬件设计
3.1.1.单元1
(1)电路
基于DS18B20的多点温度采集系统采用了STM32F103ZET6作为控制核心,以智能温度传感器DS18B20为温度测量元件,显示电路采用LCD数码管模块。
电路方案如下图3.1.1:
3.1.1电路方案
3.1.2.微控制器STM32F103ZET6等单元说明:
3.1.2.1微控制器STM32F103ZET6原理图
3.1.1.2 USART1接口模块原理图
3.1.2.3 ONEWIRE原理图
3.1.3.温度传感器DS18B20的工作原理
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
3.1.3 DS18B20温度传感器
●独特的单线接口仅需要一个端口引脚进行通信;
●DS18B20可以并联在惟一的三线上;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
3.1.
4.显示模块的设计
1. LCD主要技术参数
显示点阵数 240*RGB*320 DOTS;
LCD尺寸48.60(W) x 64.80(H) mm ;
LCD模式 262K TFT;
动态显示区 43.2*57.6 mm ;
象素成分 a-Si TFT;
LCM外型尺寸 55.94(W) x77.60(H) x 3.70(D) mm;
象素尺寸 0.153*0.153mm。
3.1.5.LCD液晶显示屏与单片机接口电路设计
本系统的显示部分采用LCD显示模块,与采用数码管相比,硬件连接和软件调试上都由优势。
只要把要显示的内容放进液晶模块的显示存储器里面就可以直观的显示出指定的内容,操作方便。
LCD原理图,如图所示:
3.1.5 LCD原理图
3.1.6.软件结构
3.1.6 软件结构
3.1.7.主要函数说明
见附录
4.制作4.1.制作
4.1.1.过程
第一步:根据总体方案,确定软件设计与以及硬件设计;
第二步:分别进行硬件设计与软件设计,实现所需功能;
第三步:完成软件设计与硬件设计,进行最后调试;
4.1.2.分工
总体设计臧寿池
软件设计王兆奇
硬件设计马泽鑫
文档编辑季伟
4.2.实物外形
4.2.1 实物图
5.测试
5.1.1.系统仿真
其实仿真的概念其实使用非常广,但是最终的含义就是使用可控的手段来模仿真实的情况。
单片机系统开发中的仿真包括软件仿真和硬件仿真。
软件仿真这种方法主要是使用计算机软件来模拟实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。
用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。
软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最后的设计;
硬件仿真使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。
使用了附加硬件后用户就可以对程序的运行进行控制,例如单步、全速、查看资源断点等。
在单片机应用系统的开发过程中,程序的设计是最为重要的但也是难度最大的工作,一种最简单和原始的开发流程是:编写程序,烧写芯片并验证功能,这种方法对于功能简单的小系统是可以对付的,但在比较大的系统中使用这种方法则是完全不可能的。
此时就需要用到仿真器。
在本系统软件设计调试的过程中使用的是PROTEL DXP型仿真软件。
5.1.2.系统硬件调试
系统软硬件调试的目的是通过控制程序和硬件电路的配合工作,进行一些操作,以验证系统的软、硬件是否能够完成设计的功能。
调试的过程是按照系统的设计功能来划分的。
硬件电路系统测试首先是保证各个元件之间以及各个模块之间的连接正确并且接触良好,这是整个硬件电路系统正常工作的前提。
接着分别测试各个硬件模块的性能。
按照测试性质的不同可分为电压测试和信号测试两种。
单片机输入输出接口主要是信号测试。
根据理论计算和软件仿真的预期结果,再通过对响应的信号进行测试。
测试结果与预期结果基本一致,保证了系统按照设计的思路正常运行。
通过测试硬件电路系统中的几个测试点,确保关键的电压信号满足要求,确保各个引脚连接正确,确保系统正常运行。
5.1.3.系统软件调试
本次在计算机上使用的是keil 系列软件对本次设计进行软件的调试,Keil软件引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。
新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。
多显示器和灵活的窗口管理系统,系统浏览器窗口的显示设备外设寄存器信息,调试还原视图创建并保存多个调试窗口布局,多项目工作区简化与众多的项目。
5.2.结果
5.2.1串口显示
5. 2. 2 LCD显示温度界面
6.总结
本文所研究的以微控制器STM32F103ZET6和DS18B20数字温度传感器为核心器件,主要由温度采集、微控制器STM32F103Z数据处理、LCD温度显示、串口显示四部分组成。
该测温系统应用测温传感器DS18B20,通过DS18B20把温度值转换成数字量,把数字量送给微控制器,并在LCD上以及串口助手上显示出来。
该测温系统应用智能温度传感器DS18B20,大大减弱了传统模拟信号在传输过程中衰减、干扰问题的影晌。
使测试系统具有更好的可靠性和精度。
实现了一种在非极端条件下(-50~125℃)的温度测量方法。
而且在硬件电路的设计上面更加简洁,不需要太多的外围电路,也降低了电路设计的要求。
但是该系统存在着一些不足:一般环境的测量仪器完全可以采用数字式的传感器,DS18B20是一款非常优秀的数字式温度传感器,在测量速度要求不高的情况下,将来可以实现更多点的温度测量。
而且系统需要结合机械结构设计,方便DS18B20的安装和更换。
数字式传感器使用中最大的缺点就是软件复杂,所以需要更加优化通用软件包的代码,提高代码效率和可移植性,这也是将来的工作重点。
这次电子综合设计是我们每个人必须面临的一项的考验,在过去三年里,我们的学习是一个专业知识的积累过程,那么这次设计就是对过去所学知识的综合运用,是对理论进行深化和重新认识的时间活动。
在这次设计中,我们努力的设计。
每个人的能力固然得到了巩固和提高,但我相信在实践中的切身体会将会使我在以后的工作和学习中终身受用。
我们学习能力得到了提高。
在设计中,完成硬件电路的设计、软件编写。
在这些过程中,遇到许多困难,但通过书籍或网络查阅了很多相关文章和向导师请教后终于解决了。
通过网上查询相关的资料,初步掌握了这些知识,并且把查到的应用到这次设计中。
通过这次电子综合设计,我们不仅对理论有了更深一步的认识,增强了和外界技术的沟通,同时还培养了自学能力和分析解决问题的能力,更重要的是,培养我们自身的能力。
这次电子综合设计让我们的观念有了很大的改变。
之前我们使用的51单片机,这次设计使用ARM。
我们想要跟上时代脚步。
如何在保证质量和完成同等功能的情况下,把产品的成本降到最低并符合用户的实际使用习惯。
是我们每个设计人员在作出方案时首要考虑的因素。
设计产品时要联系实际,实际情况有时候和我们的理解差距很大!
感谢学校这次出资购买ARM。
我们作为最先使用这套设备的人,大家还是比较紧张的。
但是这次设计大家收获还是相当大的。
不管对之后的毕业设计还是今后的工作都有很大的帮助!
参考文献
[1].亚荷毛尔等. 构建嵌入式LINUX系统.东南大学出版社,2009
[2].周立功. ARM嵌入式系统基础教程.北京航空航天大学出版社,2008
[3].杜春雷.ARM体系结构与编程. 清华大学出版社, 2003
[4].郑杰. ARM嵌入式系统开发与应用完全手册. 中国铁道出版社, 2013
[5].黄建华,欧阳宁.ARM嵌入式系统开发教程.西安电子科技大学出版社, 2012
[6].肖广兵.ARM嵌入式开发实例.电子工业出版社, 2013
[7].葛超,王嘉伟. ARM体系结构与编程.清华大学出版社, 2012
[8].谭云生.ARM嵌入式系统原理及应用开发. 西安电子科技大学出版社,2012
附录
附录1:
主程序:
/*************************************************************************************** *****************
*
* File : main.c
* Hardware Environment: Open103Z
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By : WaveShare
*
* (c) Copyright 2005-2011, WaveShare
*
* All Rights Reserved
*
**************************************************************************************** *****************/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>
#include "usart.h"
#include "OneWire.h"
#include "18B20.h"
#include "LCD.h"
#include "AsciiLib.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
void GPIO_Configuration(void);
void USART_Configuration(void);
void Delay (uint32_t nCount);
uint16_t n;
/* Private functions ---------------------------------------------------------*/
/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f10x_xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f10x.c file
*/
/* Add your application code here
*/
u8 i,tmp,*p,id[8];
char s3[64];
Onewire_Enable_GPIO_Port();
GPIO_Configuration();
USART_Configuration();
printf("\r\n****************************************************************\r\n");
/**----------------------Read ID------------------------*/
p=readID();
while(*p){id[i]=*p;p++;i++;}
printf("DS18B20's ID :");
i=0;
while(i!=8)
{printf("0x%x ",id[i]);i++;}
printf("\n\r");
/**----------------------Read Temp------------------------*/
LCD_Initializtion();
LCD_Clear(White);
while(1)
{
GUI_Chinese(127,20,"苏州大学",Red,White);
GUI_Chinese(110,40,"应用技术学院",Red,White);
GUI_Chinese(110,60,"电子综合设计",Blue,White);
GUI_Chinese(112,85,"电子信息工程",Blue,White);
GUI_Text(95,85,"10",Blue,White);
GUI_Text(150,158,"10",Blue,White);
GUI_Text(170,158,"25",Blue,White);
GUI_Text(115,158,"2013",Blue,White);
GUI_Chinese(90,108,"王兆奇",Black,White);
GUI_Chinese(175,108,"臧寿池",Black,White);
GUI_Chinese(90,128,"马泽鑫",Black,White);
GUI_Chinese(175,128,"季",Black,White);
GUI_Chinese(207,128,"伟",Black,White);
GUI_Text(3,3,"***************************************",Blue,White);
GUI_Text(3,222,"***************************************",Blue,White);
LCD_DrawLine(2,5,317,5,Yellow); //纵轴
LCD_DrawLine(2,5,2,224,Blue); //横轴
LCD_DrawLine(3,5,3,224,Blue); //横轴
LCD_DrawLine(317,5,317,224,Blue); //横轴
LCD_DrawLine(316,5,316,224,Blue); //横轴
// Delay(0xfffff);
while(!(GPIOG->IDR & 0x0040))
{
LCD_Clear(White);
while(1)
{
if(tmp != i)
{
n++;
printf("Temperture:%d度,第%d次测试\r\n ",i,n);
sprintf(s3,"%4d",i);
GUI_Text(160,100,s3,Red,White);
GUI_Chinese(100,100,"当前温度",Blue,White);
GUI_Chinese(70,20,"基于",Blue,White);
GUI_Chinese(160,20,"的温度测试仪",Blue,White);
GUI_Text(100,20,"DS18b20",Blue,White);
GUI_Chinese(200,100,"度",Blue,White);
tmp=i;
}
i = readTemp();
}
}
}
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : Configure GPIO Pin
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG , ENABLE);
/**
* LED1 -> PF6 , LED2 -> PF7 , LED3 -> PF8 , LED4 -> PF9
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/* Key */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOG, &GPIO_InitStructure);
}
/*******************************************************************************
* Function Name : Delay
* Description : Delay Time
* Input : - nCount: Delay Time
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void Delay (uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/*************************************** END OF FILE *************************************/
子程序usart.c:
/********************************************************************************* ************************
*
* File : usart.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
*
* All Rights Reserved
*
********************************************************************************** ***********************/
#include "usart.h"
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/******************************************************************************* * Function Name : USART_Configuration
* Description : Configure USART1
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/ void USART_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE); /*
* USART1_TX -> PA9 , USART1_RX -> PA10
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_ART_BaudRate = 115200;
USART_ART_WordLength = USART_WordLength_8b;
USART_ART_StopBits = USART_StopBits_1;
USART_ART_Parity = USART_Parity_No;
USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_ClearFlag(USART1,USART_FLAG_TC);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
USART_Cmd(USART1, ENABLE);
}
void UsartGPIO_CTRT_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_12;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void USART_CTRT_Configuartion(void)
{
USART_InitTypeDef USART_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 |
RCC_APB2Periph_AFIO,ENABLE);
USART_ART_BaudRate = 115200;
USART_ART_StopBits = USART_StopBits_1;
USART_ART_WordLength = USART_WordLength_8b;
USART_ART_Parity = USART_Parity_No;
USART_ART_HardwareFlowControl =
USART_HardwareFlowControl_RTS_CTS;
USART_ART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE);
UsartGPIO_CTRT_Configuration();
}
/* Use no semihosting */
#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
_sys_exit(int x)
{
x = x;
}
#endif
/**
* @brief Retargets the C library printf function to the USART. * @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
//USART_SendData(USART1,(u8)ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) //while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {}
return ch;
}
子程序LCD:
/********************************************************************************* ************************
*
* File : LCD.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
*
* All Rights Reserved
*
********************************************************************************** ***********************/
#ifndef __GLCD_H
#define __GLCD_H
/* Includes ------------------------------------------------------------------*/ #include <math.h>
#include "stm32f10x.h"
/* Private define ------------------------------------------------------------*/ #define USE_16BIT_PMP
/*********************************************************************
* Overview: Horizontal and vertical display resolution
* (from the glass datasheet).
*********************************************************************/
//#define DISP_HOR_RESOLUTION 320
//#define DISP_VER_RESOLUTION 240
//#define DISP_ORIENTATION 0
#define DISP_ORIENTATION 90
//#define DISP_ORIENTATION 180
//#define DISP_ORIENTATION 270
/* Private define ------------------------------------------------------------*/
#if ( DISP_ORIENTATION == 90 ) || ( DISP_ORIENTATION == 270 )
#define MAX_X 320
#define MAX_Y 240
#elif ( DISP_ORIENTATION == 0 ) || ( DISP_ORIENTATION == 180 )
#define MAX_X 240
#define MAX_Y 320
#endif
/*********************************************************************
* Overview: Horizontal synchronization timing in pixels
* (from the glass datasheet).
*********************************************************************/
//#define DISP_HOR_PULSE_WIDTH 20 /* 20 */
//#define DISP_HOR_BACK_PORCH 51 /* 48 */
//#define DISP_HOR_FRONT_PORCH 20 /* 20 */
/*********************************************************************
* Overview: Vertical synchronization timing in lines
* (from the glass datasheet).
*********************************************************************/
//#define DISP_VER_PULSE_WIDTH 2 /* 2 */
//#define DISP_VER_BACK_PORCH 12 /* 16 */
//#define DISP_VER_FRONT_PORCH 4 /* 4 */
/*********************************************************************
* Definition for SPI interface for HIMAX 8238-A relevant to hardware
* layout; Hardware dependent!
*********************************************************************/
#define GPIO3 3
#define GPIO2 2
#define GPIO1 1
#define GPIO0 0
#define LCD_RESET (1<<GPIO3) /* LCD Reset signal (Reset for display panel, NOT ssd1963) */
#define LCD_SPENA (1<<GPIO0) /* SPI EN signal */
#define LCD_SPCLK (1<<GPIO1) /* SPI CLK */
#define LCD_SPDAT (1<<GPIO2) /* SPI DATA */
/* LCD color */
#define White 0xFFFF
#define Black 0x0000
#define Grey 0xF7DE
#define Blue 0x001F
#define Blue2 0x051F
#define Red 0xF800
#define Magenta 0xF81F
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0
#define RGB565CONVERT(red, green, blue) (int) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))
/* Private function prototypes -----------------------------------------------*/ void LCD_Initializtion(void);
void LCD_Clear(uint16_t Color);
//void LCD_SetBacklight(uint8_t intensity);
uint16_t LCD_GetPoint(uint16_t Xpos,uint16_t Ypos);
void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t point);
void PutChar(uint16_t Xpos,uint16_t Ypos,uint8_t c,uint16_t charColor,uint16_t bkColor);
void LCD_DrawLine( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1 , uint16_t color ); void PutChinese(uint16_t Xpos,uint16_t Ypos,uint8_t *str,uint16_t Color,uint16_t bkColor);
void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor);
void GUI_Chinese(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor);
void LCD_DrawPicture(uint16_t StartX,uint16_t StartY,uint16_t EndX,uint16_t
EndY,uint16_t *pic);
__inline void LCD_WriteIndex(uint16_t index);
__inline void LCD_WriteData(uint16_t data);
__inline uint16_t LCD_ReadData(void);
__inline uint16_t LCD_ReadReg(uint16_t LCD_Reg);
__inline void LCD_WriteReg(uint16_t LCD_Reg,uint16_t LCD_RegValue);
static void LCD_SetCursor( uint16_t Xpos, uint16_t Ypos );
void delay_ms(uint16_t ms);
#endif
/********************************************************************************* ************************
END FILE
********************************************************************************** ***********************/。