51单片机串口通信数码管显示

发布者:DreamySerenity最新更新时间:2021-12-23 来源: eefocus关键字:51单片机  串口通信  数码管显示 手机看文章 扫描二维码
随时随地手机看文章

/*********************************************************************************

* 【外部晶振】: 11.0592MHZ

* 【主控芯片】: STC89C52

* 【程序功能】: 串口工作方式1,8位UART,比特率9600,接收串口数据,数码管以十         进制格式显示,并且把接收到的数据加1后通过串口发出                  

**********************************************************************************/

#include

#include


typedef unsigned int uint;

typedef unsigned char uchar;


sbit duanxuan = P2^6;//数码管段选

sbit weixuan = P2^7;//数码管段选

uchar num;//数码管显示的值


//共阴数码管段选表0-9

uchar code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};

//数码管位选码

uchar code SMGwei[] = {0xfe, 0xfd, 0xfb};

/*====================================

函数:数码管显示

====================================*/

void display(uchar i)

{

static uchar wei;

P0 = 0XFF;//清除断码

weixuan = 1;//打开位选锁存器

P0 = SMGwei[wei];

weixuan = 0;//锁存位选数据

switch(wei)

{

case 0: duanxuan = 1; P0 = SMGduan[i / 100]; duanxuan = 0; break;

case 1: duanxuan = 1; P0 = SMGduan[i % 100 / 10]; duanxuan = 0; break;

case 2: duanxuan = 1; P0 = SMGduan[i % 10]; duanxuan = 0; break;

}

wei++;

if(wei == 3)

wei = 0;

}

//定时器0初始化

void timer0Init()

{

EA = 1; //打开总中断

ET0 = 1;//打开定时器0中断

TR0 = 1; //启动定时器0

REN = 1;//允许串口接收

TMOD |= 0X01; //定时器工作模式1,16位定时模式

TH0 = 0xED;

TL0 = 0xFF; //定时5ms

}

//串口初始化

void UARTInit()

{

EA = 1; //打开总中断

ES = 1; //打开串口中断

SM0 = 0; SM1 = 1;//串口工作方式1,8位UART波特率可变

REN = 1;//串口允许接收

TR1 = 1;//启动定时器1

TMOD |= 0x20;//定时器1,工作模式2 8位自动重装

TH1 = 0xfd;

TL1 = 0xfd;//设置比特率9600

}

void main()//main函数自身会循环

{

timer0Init();//定时器0初始化

UARTInit();//串口初始化

while(1);


//定时器0中断函数

void timer0() interrupt 1

{

TH0 = 0xED;

TL0 = 0xFF; //定时5ms

display(num); //数码管显示函数

}

//串口中断函数

void UART() interrupt 4

{

uchar temp;

if(RI)//判断接收是否完成

{

num = SBUF;//读SBUF,读出串口接收到的数据

RI = 0;//软件清零接收标志位

temp = num;//

SBUF = ++temp;//写SBUF,把要发送的数据送给发送缓存器

}

if(TI)//判断是否发送完成

TI = 0;//清零发送完成标志位

关键字:51单片机  串口通信  数码管显示 引用地址:51单片机串口通信数码管显示

上一篇:51单片机 16X192点阵程序动态显示汉字
下一篇:基于51单片机的串口通信(PC发字符)

推荐阅读最新更新时间:2024-11-04 04:01

8051单片机串口通信中的检错方法研究
0 引言 对于基于flash控制器的8051的芯片结构,一般在进行数据传输时,都是先通过串口将数据传送到flash控制器的buffer中。由于buffer的大小为512 bytes,所以每次传输的最大数据量为512bytes。本文中所讨论的三种检错方法的传输数据量均为512 bytes。 1 检错方式 基于8051的串口数据通信系统的硬件开发平台框图如图1所示。利用该平台进行数据传输时,通常有三种数据检错方式。 1.1 奇偶校验 奇偶校验是检错中比较常见的一种方法。它利用数据中的1的个数作为检错的标志位,若1的个数为奇数个,则错误检测的标志位为1,若1的个数为偶数,则错误检测的标志位为0。在发送端和接收端
[单片机]
51单片机开发原则知识介绍
1.尽可能让变量使用占用代码空间最小的变量类型。例如无符号字符型和位操作(8051作为一款8位处理器提供了位操作支持,而且大多数操作指令都是8位或者位操作的通常用小的数据类型去编写代码其效率更高) 2.尽可能使用无符号类型数据(8051单片机不直接支持有符号的数据类型,有符号的操作需要额外的指令来支持,但是无符号的数据类型是直接就能被8051支持的) 3.尽可能选择小的存储模式即small(绝大多数的应用采用small存储模式都能满足,也可以选择large存储模式,将一些数组和结构体存入xdata或者pdata存储空间的话选择极大存储模式,注意的是keil c51实时库使用的基本指针可以工作在任何存储模式) 4.当应用
[单片机]
51单片机 独立键盘控制
键盘部分原理图: 历程里面设计到数码管,这个参考前面的文章《 51单片机 数码显示数字 》。 代码如下: 注释很详细。 //按键key1显示数字加1,按键key2显示数字减1,按键key3清零,按键key4数字每秒加1. #include //头文件 #define uint unsigned int //宏定义 #define uchar unsigned char //按键标示声明 sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7; sbit duanxuan=P2^6; sbit weixuan=P2^7;
[单片机]
51单片机 1602液晶显示控制代码
引脚的连接方式 _ :下面是对其各个引脚进行说明: 1 /*-- 2 REG52.H 3 4 Header file for generic 80C52 and 80C32 microcontroller. 5 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. 6 All rights reserved. 7 --*/ 8 9 #ifndef __REG52_H__ 10 #define __REG52_H__ 11 12 /* BYTE Registers */ 13 s
[单片机]
<font color='red'>51单片机</font> 1602液晶<font color='red'>显示</font>控制代码
STM32和ROS的串口通信
1 前言 之前有不少小伙伴,因为不知道如何使用这里分享的代码、或者是对系统结构不太清楚等等,导致调用不成功的,这里我深表歉意。下面我会对整个通信方案的部署进行详细的说明,确保每一个看到这篇文章的小伙伴,都能解决自己的问题。 2 本方案解决的问题 解决以STM32做ROS机器人底层驱动的串口通信问题、其他需要stm32和ros通信的小伙伴也可以使用。 -1- 介绍 1 最终协议的样子 我这里实现的STM32和ROS的串口通信协议如下图: STM32端和ROS端都有一个数据发送函数和一个数据接收函数,发送和接收的内容就是如上图所示的数据包,该数据包含有数据头(55aa)、数据尾(0d0a)、校验(crc8),
[单片机]
STM32和ROS的<font color='red'>串口通信</font>
51单片机-超声波模块
1.超声波模块型号 超声波模块是一种常用的测距工具,一般用在避障小车,水位监控系统中,本教程使用的模块型号为HC-SR04,外观形状大体如下 模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P2.0和P2.1。 工作原理就是起初先给这两个引脚都拉低,然后让TRIG引脚拉高10微秒以上再拉低产生一个脉冲起始信号(程序中我们是拉高20微秒)。起始信号一开启,ECHO引脚就会被拉高的同时,超声波开始发射,ECHO引脚检测到反射回来的信号时就会被拉低,因为声速为340m/s。那么测出的距离就是 (ECHO引脚高电平持续的时间*340m/s)/2。 中学学过用声波测海底深度,时间*声速=来回的距离,所以
[单片机]
<font color='red'>51单片机</font>-超声波模块
基于51单片机的室内多功能检测仪的研究
0 引言:   随着人们生活水平的提高,全装修住宅的日益扩展,其室内环境质量控制越来越引起社会各界的广泛关注。同时人们也需要安全、舒适的家居。现市场也有对室内环境的检测仪器,但存在有体积大、价格贵、功能少等原因,根据市场调查非常需要家居用室内安全、温湿度和室内甲醛的检测。本文设计的是家用集环境污染(甲醛)、安全、温度和湿度为一体的多功能便携式测试仪。   城市居民的气体燃料主要是液化石油、煤气和天然气。液化石油气的主要成分是丙烷、煤气的主要成分是CO和H2,天燃气主要成分是甲烷。   该设计主要包含两大部分功能,第一,空气质量包括温度、湿度、甲醛的检测。第二,室内安全测量包括CO、甲烷。 1 总体结构设计   总体结构图
[单片机]
基于<font color='red'>51单片机</font>的室内多功能检测仪的研究
C51单片机的中断号以及中断向量
一、中断号 二、interrupt 和 using 在C51中断中的使用 8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。8051的中断向量表如下:
[单片机]
C<font color='red'>51单片机</font>的中断号以及中断向量
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved