IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于STC89C52单片机的远程控制系统 -> 正文阅读

[嵌入式]基于STC89C52单片机的远程控制系统

1.设计要求

????????利用串口技术,控制数码管、LED、小车的启停

2.设计概述

????????本实验所用芯片为STC89C52,所用硬件是由华清远见基于STC89C52开发的智能小车,该小车具有流水灯模块、蜂鸣器模块、独立键盘模块、矩阵键盘模块等。本实验使用串口技术远程控制小车,串口传输数据格式为? ?L/G/C? + 指令 + ‘ ;’。如,控制小车数码管显示1314,则通过串口发送‘G1314;’;控制小车启动则通过串口发送‘CY;’控制小车停止则通过串口发送‘CN;’;控制led灯开启则发送‘LY;’;控制LED灯关闭则发送‘LN;’。

3.原理图以及线路连接

????????

J10-EN1接C52-P1.4? ? ? ? ? ? ? ? ? ? ? ? //EN1为左电机的使能端,只有当EN1为1时,左电机才能启动

J10-EN2接C52-P1.5????????????????????????//EN2为右电机的使能端,只有当EN2为1时,右电机才能启动

J10-IN1接C52-P1.2? ? ? ? ? ? ? ? ? ? ? ? ?//IN1控制左电机反转,当IN1为1,IN2为0时,左电机反转

J10-IN2接C52-P1.3????????????????????????//IN2控制左电机正转,当IN2为1,IN1为0时,左电机正转

J10-IN3接C52-P1.6????????????????????????//IN3控制右电机正转,当IN3为1,IN4为0时,左电机正转

J10-IN4接C52-P1.7????????????????????????//IN4控制右电机反转,当IN4为1,IN3为0时,左电机反转

4.软件设计

串口通信设置

1.配置SCON寄存器的SM0和SM1位,使串口以模式1的方式工作。 ? ? ?SM0 = 0,SM1 = 1

2.配置SCON寄存器的REN位,使能串口接收(REN = 1)

3.配置PCON寄存器的SMOD位,使波特率不加倍(SMOD = 0)

4.配置定时器1的相关寄存器,使定时器工作在模式2,且TH1 = TL1 = 0xfd

5.配置IE寄存器,开启串口中断

6.编写串口中断服务函数,在函数中对中断请求标志位TI和RI清零

模式0:同步通信

模式1:异步通信,8位数据位,波特率可变(常用)

模式2:异步通信,9位数据位,波特率固定

模式3:异步通信,9位数据位,波特率可变

波特率通过定时器1配置 当单片机为12T模式且SMOD位为0时

波特率 = 系统时钟/12/32/(256 – TH1)

假设我们要得到9600的波特率 那么

TH1 = 256 – 11059200/12/32/9600 = 256-3=253

然后启动定时器1即可(不用开定时器1中断)

void uartInit()
{
   SM0 = 0;
   SM1 = 1;//配置串口工作在模式1
   REN = 1;//使能接收

   PCON &= ~(1<<7);//使SMOD = 0;

   ES = 1;//开启串口中断
   EA = 1;//开总中断
}

void timer1Init()
{
	TMOD = 0x20;//配置定时器1工作在模式2
	TH1 = TL1 = 0XFD;//配置波特率为9600
	ET1 = 0;//禁止timer1中断
	TR1 = 1;//启动定时器1	
}

接收信息处理

(数码管相关知识在计数器中有详细解释,小车的fornt函数等在寻迹小车中有详细解释)

串口开始运行后开始逐个字符向C52的SBUF寄存器发送,然后逐个处理数据

字符串的第一个数据设置为模式选择位,即通过向SBUF发送G/L/C选择控制小车的不同功能

在G模式下:G后面的字符串表示要在数码管显示的数字,以;结束字符串,由于数码管数字显示是动态显示,所以需要在主函数中不断显示,否则在没有信息传输时会只显示最后一位数字。

在L/C模式下:L/C后面的字符Y/N表示开/关,以;结束。

void uart1() interrupt 4
{
	char temp = 0;
	/*	接收到数据后将数据传给temp,将RI置0,等待下一次接收	*/
	if(RI)							 
	{
		temp = SBUF;
		RI = 0;
		/*	如果模式选择位没有选择,则选择模式,L控制led灯开关;G控制数码管开关;C控制小车开关*/
		if(mflag == 0)
		{
			mflag = temp;
		}
		else
		{
			switch(mflag)
			{
				/*	模式G下,逐个输入数字,以';'结束*/
				case 'G':
					if(temp != ';')
					{
							t = t*10+(temp-48);	 //接收到的是字符,字符数字-48则为数值
					}
					if(temp == ';')
						{
							flag = 1;
							mflag = 0;
							p = t;
							t = 0;
						}
					break;
				/*	模式L,输入Y开启LED灯,N关闭LED灯,;结束输入*/
				case 'L':
						if(temp == 'Y')
							P1 = 0x00;
						if(temp == 'N')
							P1 = 0xFF;
						if(temp == ';')
							mflag =0;
							break;
				/* 	模式C下,输入Y小车前进,输入N停止,;结束*/
				case 'C':
					if(temp == 'Y')
						fornt();
					if(temp == 'N')
						stop();
					if(temp == ';')
					{
						mflag = 0;
					}
					break;
				default:break;
			}
		}
	}
	if(TI)
	{
	 TI = 0;
	 txflag = 0;
	}			
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:30:35  更:2021-08-28 09:30:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:57:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码