计算机与单片机串口程序,51单片机与电脑串口通信,并用数码管显示的两种方法...
实现功能:51单片机与电脑串口通信,电脑给单片机发送一个字符,单片机收到以后在数码管上进行显示,并且将此字符返回给电脑程序对应的电路图:
LDY-51学习板V2.0原理.pdf
(158.33 KB, 下载次数: 91
)
方法1,开启串口中断。
补充说明:电脑和单片机串口通信时,数据是以ASCII码形式存在的,所以在操作的 时候应该注意格式的问题,
(1)如果在串口助手中,以文本形式发送数据的话,单片机接收到的是相应的ASCII码,例如你写的是数字3,那么单片机接收到的却是3的ASCII码(对应:51),如果没有相应的转换的话,就会出错。此时就必须进行相应的转换才能正确显示,具体可应用switch case语句,进行查表(下面代码里有说明);
(2)如果在串口助手中,如果以16进制形式发送,,你发送的是什么,单片机接收到的就是什么,无需转换。
代码如下:
/*==========================================================
* 开发人员:laowang
* 当前版本:V1.0
* 创建时间:11/30/2013
* 修改时间:
* 功能说明:电脑通过串口助手给单片机发送字符,单片机接收到以后,在数码管上进行相应的显示
同时返给电脑一个字符串:“X"(X为电脑发给单片机的字符)
*==========================================================*/
#include //头文件
#include"Define.h" //包含宏定义的头文件
uchar a;
uchar flag;
sbit wela=P3^5;
sbit dula=P3^4;
uchar code table1[]="I receive ";
uchar code table2[]= //数码管编码0-F,共阴;
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
/*==========================================================
*函数名称:Init()
*功 能:串口初始化函数
*入口参数:
*出口参数:void
*说 明:第一步:设置定时器;第二部设置串口;第三部,设置中断
*==========================================================*/
void Init()
{
TMOD=0x20; //0010 0000 定时器1,工作方式2
TH1=0xfd; //初值,根据波特率的计算公式,备注晶振频率11.0592Mhz
TL1=0xfd;
TR1=1; //开始定时器计数,此处没必要开始定时器中断,开了中断没事做
REN=1; //允许串口接收
SM0=0; //串口工作方式1
SM1=1;
EA=1; //开总中断
ES=1; //开启串口中断
}
//主函数
void main()
{
P1=0; //对数码管进行初始设置,刚开始均不亮
wela=1;
wela=0;
dula=1;
dula=0;
Init(); //初始化
while(1)
{
if(flag==1) //说明接收到了数据
{
flag=0;
ES=0; //关闭中断
SBUF=a; //将接收到的数据发送
while(!ti);
TI=0; //重新开启中断
ES=1;
}
/***************************************************
switch(a) //备注:如果在串口助手中,以文本形式发送的话,单片机接收到的是相应的ASCII码
{ //此时就必须进行相应的转换才能正确显示;如果以16进制形式发送,则不需要这一部分
case '0':P1=table2[0];break;
case '1':P1=table2[1];break;
case '2':P1=table2[2];break;
case '3':P1=table2[3];break;
case '4':P1=table2[4];break;
case '5':P1=table2[5];break;
case '6':P1=table2[6];break;
case '7':P1=table2[7];break;
case '8':P1=table2[8];break;
case '9':P1=table2[9];break;
case 'a':P1=table2[10];break;
case 'b':P1=table2[11];break;
case 'c':P1=table2[12];break;
case 'd':P1=table2[13];break;
case 'e':P1=table2[14];break;
case 'f':P1=table2[15];break;
}
*************************************************************************/
P1=table2[a]; //将电脑发送来的数据传给P1
dula=1; //这一部分为数码管的显示的部分
dula=0;
P1=0x00; //八个全亮
wela=1;
wela=0;
}
}
//中断服务函数
void Serial() interrupt 4
{
flag=1;
RI=0;
a=SBUF;
}
方法2.不开启中断
代码如下:
/*==========================================================
* 开发人员:laowang
* 当前版本:V1.0
* 创建时间:12/1/2013
* 修改时间:
* 功能说明:电脑通过串口助手给单片机发送字符,单片机接收到以后,在数码管上进行相应的显示
同时返给电脑一个字符串:“X"(X为电脑发给单片机的字符)
*==========================================================*/
#include //头文件
#include"Define.h" //包含宏定义的头文件
uchar a;
sbit wela=P3^5;
sbit dula=P3^4;
uchar code table[]= //数码管编码0-F,共阴;
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
/*==========================================================
*函数名称:Init()
*功 能:串口初始化函数
*入口参数:
*出口参数:void
*说 明:第一步:设置定时器;第二部设置串口
此处没开中断
*==========================================================*/
void Init()
{
TMOD=0x20; //0010 0000 定时器1,工作方式2
TH1=0xfd; //初值,根据波特率的计算公式,备注晶振频率11.0592Mhz
TL1=0xfd;
TR1=1; //开始定时器计数,此处没必要开始定时器中断,开了中断没事做
REN=1; //允许串口接收
SM0=0; //串口工作方式1
SM1=1;
}
//主函数
void main()
{
P1=0; //对数码管进行初始设置,刚开始均不亮
wela=1;
wela=0;
dula=1;
dula=0;
Init(); //初始化
while(1)
{
while(RI==0); //程序一开始等待等待接受数据,当接收到数据后,RI=1,跳出循环,然后将RI置0
RI=0;
a=SBUF; //将接收到的数据送给a
SBUF=a; //将接收到的数据发送
while(!TI); //等待数据发送,一旦发送完毕,TI=1.
TI=0;
P1=table[a]; //将电脑发送来的数据传给P1
dula=1; //这一部分为数码管的显示的部分
dula=0;
P1=0x00; //八个全亮
wela=1;
wela=0;
}
}
方法1,源代码:
串口 接收字符并显示1.0.rar
(24.93 KB, 下载次数: 150
)
方法2,源代码:
串口 接收字符并显示2.0.rar
(19.93 KB, 下载次数: 80
)
计算机与单片机串口程序,51单片机与电脑串口通信,并用数码管显示的两种方法...相关推荐
- 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法
将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...
- Win10计算机首次使用时间,Win10系统如何查看开机用时?Windows10系统查看开机时间的两种方法...
一.系统自带功能 电脑接通电源进入Windows界面用时,实际上包括两个方面,一是BIOS所用时间,一是系统启动时间,所以Win10系统开机所用时间正确的算法是:BIOS启动用时+系统启动用时. 1. ...
- win7计算机收藏夹位置,win7中收藏夹在哪里 win7找到IE收藏夹的两种方法[多图]
在使用电脑的时候收藏夹对我们是很重要的,比如我们在使用win7旗舰版中的IE浏览器时,会把比较常用的网页添加到收藏夹.那收藏夹在哪呢?可能不太熟悉电脑的朋友会不太清楚,没关系,下面小编就给大家分享了如 ...
- 计算机u盘病毒清除方式,如何操作才能将U盘中的病毒彻底?两种方法即可清除...
可以说,U盘是最容易中毒的电脑外接设备之一,很多时候,咱们只是下载了一个软件,或者是将U盘拿到外面的打印店打印了一下文件,就很有可能发现自己的U盘中毒了.那么你确定你每次的操作都可以将U盘中的病毒彻底 ...
- c语言51单片机延时程序,51单片机c语言延时.doc
1,_nop_() 适用于us级的少量延时 标准的C语言中没有空语句.但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果.这在汇编语言中很容易实现,写几个nop就行了. 在keil C51 ...
- 计算机怎么禁止远程桌面,Windows电脑如何禁止远程连接?先来两种方法
很多时候,为了安全起见,办公室的电脑要求禁止远程桌面连接,这样可以有效保护文件安全,防止文件外泄.那么问题来了,Windows系统如何禁止远程桌面连接?请看文章详细说明. Windows系统如何关闭远 ...
- 计算机怎么建立共享网络打印机共享,电脑如何连接局域网中的共享打印机—两种方法...
多台电脑而只有一台打印机的时候可以通过连接局域网的方式共享打印机,这样就不需要给每一台电脑都配上打印机了.下面是学习啦小编收集整理的电脑如何连接局域网中的共享打印机-两种方法,希望对大家有帮助~~ 电 ...
- 【C语言程序】输出杜甫的《绝句》(有无返回值两种方法)
题出自-------------------------------零基础学C语言 1.没有返回值 #include<stdio.h> void jueju(); int main() { ...
- win10计算机桌面快捷方式,Win10程序快捷方式添加到桌面上的两种方法
在使用电脑的时候一般都是把程序快捷方式添加到电脑桌面上,因为打开电脑面对的就是桌面.在桌面打开程序也是最快的.那么在Win10系统中如何把应用程序 快捷方式 添加到桌面上呢?方法有两种,这里就为大家一 ...
- C# 检查当前系统已安装的程序app/两种方法检测
一.目的.构思 1.检测当前系统有没有安装某个程序,如果没有就重新安装. 2.在网上找到了两种方法,可惜都找不到需要检测的app. 二.code实现 1.查找注册列表方式.要在winform的proj ...
最新文章
- 2021年春季学期-信号与系统-第二次作业参考答案-第五小题
- C#压缩解压zip 文件
- JDK 14 里的调试神器了解一下?
- 【Java】BIO、NIO、AIO网络编程模型概述
- springboot实现拦截器
- Selenium-鼠标操作
- HashMap的底层结构和实现原理
- Database Design Best Practice (2)
- 计算机二级试题aoa,浙江省高校计算机二级AOA考试excel试题及解析
- Python 代码库之Tuple如何append添加元素
- MBR分区表格式与GPT分区表格式简介
- OpenCV基础——threshold函数的使用
- 判断字符是数字字符还是大写字符或者是小写字符
- ANSYS湿模态分析(一)_51CAE_新浪博客
- java开发基础知识学习总结
- 【NOIP2016提高A组五校联考4】ksum
- 记一次搜狐畅游后台开发笔试
- 百度网址安全中心拦截解除的办法分享
- Memory基本debug指令与基础知识(一)
- openOCD的使用1: 应用openOCD和Jlink仿真器连接Freescale K60系列 MCU