串口通信(郭天祥)
- 格式:ppt
- 大小:1.38 MB
- 文档页数:47
郭天祥单片机C语言课后答案郭天祥十天学通单片机 TX-1C单片机实验板所有课作业+答案,特别整理,供单片机爱好与学习者使用讲次内容细节第一讲学单片机预备知识、如何点亮一个发光管单片机能做什么,基本电子知识,如何用TX-1C单片机学习板学习单片机,C51知识简介,如何申请免费芯片样品。
点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。
第三讲数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、外部中断试验、定时器中断应用第四讲数码管的动态显示原理及应用实现动态扫描概念、定时器、中断加深用单片机的定时器及中断设计一个60秒定时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、如何键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA的工作原理及实现、运放电路模拟电压与数字电压的关系、为什么要使用AD及DA、ADC0804的操作方法、DAC0832的操作方法第七讲串口通讯原理及操作流程串口通讯工作方式、10位数据通讯、波特率概念、如何根据波特率计算定时器初值、串口打印在调试程序中的应用。
第八讲1602液晶、12864液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、目前非常通用的一种通信机制第十讲利用51单片机的定时器设计一个时钟综合运用51单片机知识设计一个可以随意调节时间、带整点闹铃的时钟。
(其中用到定时器、中断、按键、蜂鸣器、数码管或串口通信)第十一讲用DS12C887时钟芯片设计一个高精度时钟D S12C887内部带有锂电池,系统掉电情况下可自行精确走10年,并带有闹钟功能、年、月、日、时、分、秒等。
应用型本科高校思政元素融入单片机原理及应用课程的探索作者:田芳明席桂清孟艳君杨立来源:《中国教育技术装备》2023年第23期摘要为了实现专业课与思政课同向同行,形成育人合力,以单片机原理及应用课程为例,分析了课程建设现状和存在问题,明晰了该课程的思政建设目标和隐含的思政元素,结合课程内容和教学目标设计了课程思政案例,讨论了实施的具体办法与细节,为应用型本科高校的其他工科专业课程思政的实施提供了有益的参考和借鉴。
关键词课程思政;单片机原理及应用;思政元素;三全育人中图分类号:G642.0 文献标识码:B文章编号:1671-489X(2023)23-0080-040 引言2019年,习近平总书记在学校思想政治理论课教师座谈会上强调,高校思想政治工作关系高校培养什么样的人、如何培养人以及为谁培养人这个根本问题[1]。
要坚持把立德树人作为中心环节,把思想政治工作贯穿教育教学全过程,实现全程育人、全方位育人,努力开创我国高等教育事业发展新局面[2]。
中共中央、国务院印发的《关于加强和改进新形势下高校思想政治工作的意见》明确提出,要强化思想理论教育和价值引领,推进高校思想政治工作改革创新,坚持全员全过程全方位育人(以下简称“三全育人”)[3]。
深入学习领会习近平总书记有关重要讲话精神,进一步提高教育主体思想认识、促进教育环节无缝对接、协调教育资源有效整合,成为提增“三全育人”工作质效的迫切要求。
高校作为人才培养的主阵地,落实立德树人的根本任务,实现“三全育人”,对于落实国家政策、提升人才培养质量和综合素质等方面具有重要意义。
“三全育人”的出发点是培养人,中心在“育”,重心在“全”。
在高校,正在从“教”走向“育”的进程中,由于高校思政课门数有限,除了高校思政课程这个主阵地外,应该充分发挥其他育人载体的作用,深入挖掘其他理论课、实践课、第二课堂等环节潜在的育人资源,使各类课程与思政课程相互配合,形成协同育人效应,专业课是各高校各专业教学计划中根据培养目标设置的专业知识和专业技能课程,往往是学生毕业后从事专业相关工作使用的主要技能,在培养计划和学生心中都具有举足轻重的地位,因此,在专业课程中深入挖掘思政元素,构建全覆盖和相互支撑的课程体系,对于高校实现“三全育人”目标,深入落实《关于深化新时代学校思想政治理论课改革创新的若干意见》和《高等学校课程思政建设指导纲要》等文件要求势在必行[4-5]。
单片机在船舶油水分离器监控技术的应用摘要:人为故意排放船舶舱底污水是造成海洋环境污染的最主要的污染源之一,为了制止人为故意排放船舶舱底污水,本文研究了一种新的油水分离器监控技术,即单片机的船舶油水分离器监控技术上的应用。
该技术将单片机强大的数据采集记录功能应用于海船油水分离器的监控。
在油水分离器运行时采集油水分离器的启动和停止时间、油份浓度、出海阀流量等参数,PSC检查人员可以在现场查验并通过U 盘把数据从系统中拷贝带走。
为查处违规船舶提供强有力理论依据和为海洋的更清洁提供了有力的保障。
关键词:油水分离器单片机GPS全球定位系统流量传感器上位机串口传输海洋占地球表面积的71%,是孕育生命的摇篮。
海洋在为人类发展提供丰富资源的同时,也为人类提供了最为经济的运输环境。
海洋运输成本低,运输量大,是世界各国人民经济、文化交流的最主要手段。
但是随着船舶的数量和总吨位大幅度增加,船舶对海洋所排放的各类有害物质也日渐增多,严重威胁海洋的生态环境,其中因船舶运营造成的海洋石油污染是船舶污染海洋的最主要形式。
为保护海洋环境,防止油污染,IMO制定了MARPOL73/78海洋防污染公约,该公约附则Ⅰ规定船舶机舱水必须经油水分离器处理才能向海洋排放。
但目前对于油水分离器的监控存在很大的缺陷,许多船员通过各类手段将未经处理的舱底污油水直接排放到海洋。
因此,亟需一种有效的船舶油水分离器监控装置,来提高PSC检查效果,增强船员环保意识,从而更好地保护海洋环境。
1 方案与原理介绍1.1 系统原理介绍该系统为船舶油水分离器运行监控系统,以流量传感器、GPS、开关传感器等为基础,以单片机(STC5A60S2)为核心,以上位机作为终端。
传感器传送信号到单片机中,然后经过单片机对信号进行处理,最终单片机通过串口把信号传送到上位机中,并在上位机中储存信号(记录)。
1.2 设计方案(如图1)系统的具体工作流程为:(1)当油水分离器启动时,开关传感器作用,发送信号给单片机,唤醒单片机和其他传感器,同时监控系统自动把油水分离器的启动时间记录下来。
基于 STC 单片机的智能语音控制小车一、实验目的1.随着科技的进步和社会的发展, 汽车技术的发展越来越智能化。
本次接口实验 设计就是基于简单智能化的基础上, 采用LD3320 语音单元和 STC 单片机和L298N 机电驱动, 开辟出基于语音无线控制与智能避障的小车, 实现非特定人声语音控 制小车, 以及小车超声波自动避障行驶的功能, 同时液晶显示出超声波前方障碍 物的距离。
2.掌握用 Altium Designer10 软件绘制原理图和 PCB 电路,以及电路板的制作 过程(包括转印、腐蚀,焊接,下载与调试),熟练 Keil uVision4 环境以及单 片机 C 代码的编写、 调试和 hex 文件的生成并下载到单片机芯片内, 掌握软硬联 调技巧与方法。
3.掌握 基于 LD3320 的语音单元的编程、语音处理及与单片机间的通信。
二、系统总体方案本次设计的小车采用 STC89C52 单片机作为主控芯片, 通过 LD3320 语音单元 接单片机控制小车行驶状态(包括前进、后退、左转、右转及停车);小车行驶 过程中遇到障碍物, 如果没有接收到语音信号而超声波检测模块检测周围障碍物 小于安全距离 40cm ,小车自动转向, 距离通过 LCD1602 液晶显示出来; 采用 L298 作为机电驱动芯片驱动小车行驶。
系统总体框图如图 2.1:图 2.1 系统总体框图LCD1602 液晶显示STC89C52 单片机7805 稳压电路18650 锂电池电源HC-SR04 超声波模块L298N 机电驱动直流减 速机电降压模块扬声器LD3320 语音单元三、硬件设计3.1 主控系统本次设计采用 STC89C52 单片机作为控制芯片, STC89C52RC 是 STC 公司生产的一种低功耗、高性能 CMOS8 位微控制器,具有 8K 字节系统可编程 Flash 存储器。
单片机系统电路图 2:图 3.1 单片机最小系统原理图复位电路:手动复位,按下复位按钮,复位脚得到 VCC 的高电平,单片机复位,按钮松开后,单片机开始工作。
北京理工大学智能车俱乐部程序培训K60各模块入门前言这个小文档是对k60单片机的各模块进行了初步的介绍,以便大家在之后车队的k60实际培训演示中能更好地理解,能更快的上手单片机,另外说一下车队用的K60单片机型号是MK60DN512ZVLL10,不同型号的k60单片机各模块基本操作有些小区别。
本文档是基于给大家实际演示的各模块功能来撰写的,里面讲的各个模块在以后的做车过程中基本上都会用到。
实际上一个智能车上所实现的功能都是由这些最基本的小模块组合而成的,把这些小模块各个击破了,都理解了,以后看智能车的整体程序也就容易得多了~另外注意:在我没实际操作讲解之前,大家看这些模块的时候可以不用纠结一些细节的问题,大致有个概念即可~在我讲的时候好好听我讲各个模块的例程,做好笔记,然后看实验现象,进行进一步的理解。
之后自己再回去仔细看例程、笔记和这个文档,并且自己可以对程序进行一些改动,然后烧写程序看现象仔细研究。
PS:我们第十届包括之前的学长们都没有进行这样专门的比较系统的单片机各模块的培训,也没有学长们亲自给我们写这些入门的学习文档,基本都是自己去查资料学习,所以你们这一届算是很走运的了!不要错失良机不好好学习哦~话说回来,毕竟车队是一年比一年进步嘛,培训会慢慢地变得更加有条理!还有你们明年培训下一届的时候也是哦学完了单片机各个模块后,以后你们要是想对车进行哪个模块的调试不会出现不知道程序在哪、不知道怎样去调试这些最基本、较Low的问题~你们对各个模块理解透了,智能车整体的程序架构你们会轻而易举的掌握。
以后想调那个模块调哪个,整个程序也不会乱,以后要在车上增加新模块新功能也会容易得多!所以......仓鼠们打起精神~好好学吧!!!第十届摄像头游清目录一、GPIO模块 (5)1、GPIO概述 (5)2、I/O口的使用方法 (6)二、FTM占空比(PWM)模块 (9)1、PWM概述 (9)2、PWM程序讲解 (10)三、中断模块 (13)1、中断概述 (13)2、GPIO(I/O)口外部中断 (13)2.1I/O口外部中断概述 (13)2.2I/O口外部中断程序讲解 (14)3、PIT定时器中断 (16)3.1PIT定时器中断概述 (16)3.2PIT定时器中断程序讲解 (16)四、A/D(模数)转换模块 (18)1、A/D模块概述 (18)2、A/D模块程序讲解 (19)五、串口通信(UART)模块 (21)1、串口(UART)模块概述 (21)1、串口(UART)模块程序讲解 (22)后记 (25)一、GPIO模块车队用的K60单片机有100个引脚,如下图:其中大部分引脚有GPIO模块的功能,GPIO模块可以输出指定的高低电平,或读入输入电平,在实际智能车上可以用于调试用的小灯、蜂鸣器、拨码开关和摄像头信号数据采集及外部中断等。
单片机实验心得体会5篇单片机实验心得体会篇1单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在单片机里面的应用很多。
由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。
在大二的时候,我就听学长介绍过单片机,当时感觉很神奇,从此就对单片机特别感兴趣,也感觉它特别有用。
于是经学长推荐,在大二上学期我利用学习之余在图书馆借书,学习了kile和proteus软件,刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。
通过学习才大体知道了单片机的一些知识。
由中央处理器cpu、随机存储器ram、只读存储器rom、i/o接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。
也算给我正式学习单片机打下一个基础。
在大二下学期,我购买了一套单片机学习开发板和郭天祥主编的《新概念51单片机c语言教程》,从此正式开启我的单片机学习之路。
在刚开始学时,就完全模仿郭天祥主编的这本书再结合开发板一步一步的学,从点亮一个发光二级管,流水灯,数码管,定时器,中断,矩阵键盘,ad、da,串口通行,i2c总线等一步一步的深入学习。
此时,我虽然能看懂程序,一些简单的程序可以自己编写,但一些比较复杂的自己编不出来。
在大二暑假,我发现了郭天祥主讲的《十天学会单片机》视屏,于是我坚持天天看视屏,然后在自己根据视屏内容结合开发板写程序,调程序,就这样学了一个暑假。
通过这个视屏,我初步了解了单片机的硬件结构,编程方法及调试方法(用kile软件调试和用开发板调试),寄存器的使用,学会了如何看芯片资料,初步开始利用芯片时序图来编程。
可以说这个视屏对我学习单片机有巨大的帮助,更夸张的说是这个视屏将我带进了单片机的世界,让我尽情的体验单片机带给我的快乐!在大三上学期,我有幸参加了教改班的单片机课程学习。
郭天祥十天学通单片机TX-1C单片机实验板所有课作业+答案,特别整理,供单片机爱好与学习者使用讲次内容细节第一讲学单片机预备知识、如何点亮一个发光管单片机能做什么,基本电子知识,如何用TX-1C单片机学习板学习单片机,C51 知识简介,如何申请免费芯片样品。
点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。
第三讲数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、外部中断试验、定时器中断应用第四讲数码管的动态显示原理及应用实现动态扫描概念、定时器、中断加深用单片机的定时器及中断设计一个60 秒定时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、如何键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA 的工作原理及实现、运放电路模拟电压与数字电压的关系、为什么要使用AD 及DA、ADC0804 的操作方法、DAC0832 的操作方法第七讲串口通讯原理及操作流程串口通讯工作方式、10 位数据通讯、波特率概念、如何根据波特率计算定时器初值、串口打印在调试程序中的应用。
第八讲 1 602液晶、12864 液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、目前非常通用的一种通信机制第十讲利用51 单片机的定时器设计一个时钟综合运用51 单片机知识设计一个可以随意调节时间、带整点闹铃的时钟。
(其中用到定时器、中断、按键、蜂鸣器、数码管或串口通信)第^一讲用DS12C887时钟芯片设计一个高精度时钟DS12C887内部带有锂电池,系统掉电情况下可自行精确走10 年,并带有闹钟功能、年、月、日、时、分、秒等。
/****************************************************************************** **Copyright(c)2010, GUILIN UNIVERSITY OF ELECTRONIC TECHNOLOGYAll rights reserved文件名称:Slave Machine.c程序功能:接口实验的下位机程序:通过AD7862采集温湿度信号,通过串口传递给上位机,控制继电器开关调整现场温湿度。
******************************************************************************* */#include<reg52.h>#include<stdio.h>//#include"1WrieDriver.h"typedef unsigned char uchar;typedef unsigned int uint;#define DATALSB P2#define DATAMSB P0#define STATUS 200//发送的数据状态码存放位置#define DSTMCount 201#define DSTLCount 202//数字温度数据存储位置定义#define DSHMCount 203#define DSHLCount 204//数字湿度数据存储位置定义#define CRCMCount 205#define CRCLCount 206//CRC校验数据存储位置定义#define onDS 0x01//温湿度数据有效状态#define offDS 0x02//温湿度数据无效状态sbit CONVEST=P0^3;sbit BUSY=P0^0;sbit CS=P0^2;sbit READ=P0^1;//AD7862的输入端直接接低电平,这里就不用定义A0端了。
单片机实训总结(实用版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的实用范文,如工作计划、工作总结、演讲稿、合同范本、心得体会、条据文书、应急预案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of practical sample essays for everyone, such as work plans, work summaries, speech drafts, contract templates, personal experiences, policy documents, emergency plans, teaching materials, complete essays, and other sample essays. If you want to learn about different formats and writing methods of sample essays, please stay tuned!单片机实训总结单片机实训总结(通用3篇)单片机实训总结篇1《单片机》这门课程我已经学了一个学期了,在这一个学期的学习过程中,我一开始不怎么懂得编程,但慢慢的我现在已经不仅会读程序还会写程序了。
湖南科技大学信息与电气工程学院《单片机课程设计报告》题目:基于STCSTC15F2K60S2单片机的串口通讯专业:自动化班级:一班姓名:罗永恒学号: 1209010303指导教师:范小春2015年 6月 30日单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能〔可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路〕集成到一块硅片上构成的一个小而完善的电脑系统。
本文将具体介绍单片机与PC机进行串口通信的实现方法和编程方法,并且在最后给出一个实用的单片机与电脑通过串口通信的程序。
关键词:单片机串口通信第一章 STCSTC15F2K60S2的简介 01.1 STCSTC15F2K60S2的内部结构框图 01.2 STC15F2K60S的DIP封装图 01.3 STC15F2K60S的各引脚简介 (1)第二章单片机通过USB与PC机的通信设计 (3) (3)2.1.1 PC机同单片机通信存在的问题 (3)2.1.2 USB接口同RS-232(DB-9)串口的比较 (3)USB转接芯片的选择 (3)2.2 通信功能要求 (4)第三章硬件电路图的设计 (4) (4)3.2 USB与单片机连接主电路 (5)3.3 总电路图 (5)3.4 PCB图 (5)第四章程序设计 (6)4.1 串口初始化 (6)4.2 主程序 (6)4.3 中断服务程序 (7)4.4 总程序 (7)第五章总结与体会 (9)第六章参考文献 (10)第一章 STCSTC15F2K60S2的简介1.1 STCSTC15F2K60S2的内部结构框图1.2 STC15F2K60S的DIP封装图1.3 STC15F2K60S 的各引脚简介〔1〕电源引脚Vcc :一般接电源的+5V 。
具体的电压幅度应参考单片机的手册。
Rf905通信资料及程序本程序仅供初学者使用本人建议参考资料网站:/view/0d3f3473f242336c1eb95e12.html:/view/ffe7d12458fb770bf78a55ac.html/link?url=QWTFG9hOZrnlZo0oeHhbH7bo7Q7 V628OoMy0t_M2u_1WCCQc02ryn07RA55kDF0lzBe8vwSeDu1Lt1VN_LE06q以上三份资料对于初学者个人认为非常不错如果程序解释上以及程序问题不对的可通过百度账号与我联系本人试验经验:此次试验本人使用的开发板是郭天祥的51单片机如果有使用相同的同学请小心了本人使用的io口是P2口供电方式直流稳定电源(调到3.3v)目前经本人试验P3,P0口不可使用原因是电流过大如果一定要使用就要加入限流电阻在资料中rf905最大电流是10ma 但本人建议最多不要超过5ma (io口电流)个人建议如果想做rf905试验的同学不要用集成开发板最好自己动手焊一个板子尤其是郭天祥的板子由于io口使用复杂可能会导致你无法使用P1口小灯来检测是否接收到信号其余的rf905的重要细节信息会在程序中给出各个引脚功能图当rf905发送完数据时就会将dr置为高电平当接受到数据时dr也会被置高但当所有数据都接受完毕时dr会变为低电平Rf905要先进性寄存器配置问题一共分9个字节其中包括接受和发送配置时要将接收端与发送端一样每个字节有8位数据具体功能代表在上面的资料中百度中的资料配置上有一处是错误的正常是0x20,0x20#include <reg52.h>#define uchar unsigned char//宏定义#define uint unsigned int#define WTP 0X20//定义寄存器地址向TX-Payload寄存器写入发送有效数据#define RTP 0X21//从TX-Payload寄存器读取发送有效数据#define WTA 0x22//向TX-Address寄存器写入发送地址#define RAT 0X23//向TX-Address寄存器写入发送地址#define RRP 0x24//从RX-Payload寄存器读取接收到的有效数据sbit led = P1^1;//检测数据是否已经发完sbit csn = P2^0;//功能io口定义具体功能上面表格已经给出sbit sck = P2^1;sbit miso = P2^2;sbit mosi = P2^3;sbit dr = P2^4;sbit pwr = P2^5;sbit ce = P2^6;sbit en = P2^7;uchar txbuf[4]={0xf9,0x77,0xee,0x11};//要发送的数据uchar conf[11]={0x00,0x4c,0x0c,0x44,0x20,0x20,0xcc,0xcc,0xcc,0xcc,0x58};//寄存器配置具体//配置功能自行去资料中了解void delay(uint z)//延时{uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void writedate(uchar date)//向spi中写数据spi在工作时必须是掉电模式或stanbdy{uchar i;for(i=0;i<8;i++) //写入八位有效数据{delay(1);sck=0;mosi=(bit)(date&0x80); //将数据从mosi进入date<<=1;delay(10);sck=1; //时钟只有在从高到底变化时才能将进入spi中的数据锁存住delay(10);sck=0;}sck=0;}void initspi()//spi初始化{uchar i;delay(1);csn=1; //关闭spisck=0;pwr=1;//设置为掉电spi可编程模式ce =0;en =0;delay(10);csn=0;//打开spifor(i=0;i<11;i++){writedate(conf[i]);//将上面的配置数据写入到spi内部}delay(10);csn=1;//关闭spi}void txdate()//发送部分{pwr=1;//设置为standby与spi可编程模式ce =0;en =1;csn=0;//打开spiwritedate(0x22);//先写入寄存器地址具体功能上面已经给出writedate(0xcc);writedate(0xcc);writedate(0xcc);writedate(0xcc);csn=1;//关闭spidelay(10);csn=0;//打开spiwritedate(0x20);//写入寄存器地址具体功能上面已经给出writedate(txbuf[0]);writedate(txbuf[1]);writedate(txbuf[2]);writedate(txbuf[3]);csn=1;//关闭spidelay(10);pwr=1;//设置为发送模式ce=1;en=1;delay(3000);//等待一会//led=0;ce=0;结束发送while(!dr);//如果发送完毕dr会被置1//led=0;//同时小灯会点亮}void s()//发送模式{pwr=1;en=1;ce=1;delay(1000);}void main(){led=1;//关闭小灯initspi();//初始化while(1){s();//发送模式txdate();发送数据led=0;}}以上就是发送模式具体要结合说明去看接受端include <reg52.h>#define WTP 0x20 //定义寄存器位置具体功能在发送端已经给出了#define RTP 0x21#define WTA 0x22#define RTA 0x23#define RRP 0x24#define uchar unsigned char#define uint unsigned intsbit led = P1^1; //小灯sbit csn = P3^0; //功能io口定义sbit sck = P3^1;sbit miso = P3^2;sbit mosi = P3^3;sbit dr = P3^4;sbit pwr = P3^5;sbit ce = P3^6;sbit en = P3^7;//sbit cd = P3^3;//sbit am = P3^4;uchar rxbuf[4]; //接受数据uchar conf[11]={0x00,0x4c,0x0c,0x44,0x20,0x20,0xcc,0xcc,0xcc,0xcc,0x58};//寄存器配置void delay(uint z){uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void writedate(uchar date) //向spi中写入数据{uchar i;for(i=0;i<8;i++){delay(1);sck=0;mosi=(bit)(date&0x80);date<<=1;delay(10);sck=1;delay(10);sck=0;}sck=0;}unsigned char spiread(void) //读取rf905接收到的数据{uchar i,dat;for(i=0;i<8;i++){dat<<=1;sck=0;delay(1);dat|=miso; //将接受到的数据传给dat()sck=1;delay(1);}sck=0;return(dat);}void rxdat(void) //将数据写入接受数组内部(写入单片机中){uchar j=0;ce=0;pwr=1;csn=0;writedate(RRP);for(j=0;j<4;j++){rxbuf[j]=spiread();}csn=1;}void initspi()//spi初始化{uchar i;csn=1; //关闭spien=0;ce=0;delay(10);csn=0; //打开spifor(i=0;i<11;i++){writedate(conf[i]); //将配置写入spi内部}csn=1;}void spirecivemode() //设置rf905为接收模式{pwr=1;ce=1;en=0;}void main(){initspi();spirecivemode();while(1){spiread();rxdat();while(!dr);//当接受到数据时dr会被置高//dr=0;led=0; //小灯点亮}}若果是使用郭天祥单片机的小灯将不会亮因为受到P2^7与P2^6的影响但请放心程序仅供参考绝对好用。
怎么学好单片机作者:郭天祥来源:原创更新时间:2008-10-10 21:57:59 浏览次数:35767 很多单片机初学者问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机、如何开始上手、如何开始熟练这个过程给大家讲讲。
先说说单片机,我们现在用的比较多的是8051单片机,它的资料比较多,用的人也较多,市场也很大,51单片机内部结构比较简单,非常适合初学者学习,建议初学者将51单片机做为入门级芯片。
单片机属于硬件,我强烈不推荐大家使用单片机仿真软件来学习单片机,也可以肯定的告诉大家,使用仿真软件是学不会单片机的,硬件只有把它摆在你的面前,亲自操作它,才会有深刻的体会,才能学明白它。
单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书,我们需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,尤其是现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。
简单的说,当我们使用单片机时,实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器,再简单些,就是控制单片机哪些引脚的电平什么时候输出高,什么时候输出低。
由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。
关于看书,大家只需大概了解单片机各引脚的功能,了解下寄存器。
第一次、第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。
所以我总是说,学单片机看书看两三天就够了,而我们要把更多的时间放到实践中去,这才是最关键的,在实践的过程有不懂之处再查书,这样记忆才深刻。
关于实践有两种方法你可以选择,方法一、你自己花钱买一块单片机的学习板,不要求那种价格上千块功能太太全的,对于初学者来说你买功能太全的板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘、矩阵键盘、AD 和DA、液晶、蜂鸣器、IIC总线、有USB 扩展也最好,这些就差不多了。
关于郭天祥51单片机C语言教程里面的利用VC(MSCOMM)与单片机通信实现温度显示的程序的修改。
郭天祥的源程序在书本P388页。
在这里面我就不添加了。
很多人想接受许多的数据,并且把以前接收到的数据“屏蔽掉”,但是根据韩天祥的程序。
并不会删除以前的缓存。
下面是我的解决方法:1.在初始化函数里面定义一个线程函数:m_pReceiveHandle = AfxBeginThread(ReceiveHandle,this,0,0,0,NULL);//开启一个线程2.下面来修改OnOnCommMscomm1()函数里面的代码。
int flagS = 0;void CDelStudentDlg::OnOnCommMscomm1(){ // TODO: Add your control notification handler code herestatic unsigned int count = 0;VARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata[2048];CString strtemp;if(m_ctrlComm.GetCommEvent()==2){count++;variant_inp=m_ctrlComm.GetInput(); //读取缓冲区//AfxMessageBox("执行到这一步!");safearray_inp=variant_inp;len=safearray_inp.GetOneDimSize();for(k=0;k<len;k++){safearray_inp.GetElement(&k,rxdata+k);}for(k=0;k<len;k++){BYTE bt=*(char*)(rxdata+k);strtemp.Format("%c",bt);if(strtemp == 'L'||'W'||'H'||'G') flagS = 1;if(flagS == 1){Text+=strtemp;if(strtemp == '*') //收到结束符{//m_StdName = Text;//MessageBox(Text);flagCheck=1; //通知线程接收成功!//Text="";flagS = 0;}}}}UpdateData(FALSE);}2.下面是被调用的线程函数的代码。