串口通信-数据发送到PC加1后接收到单片机在数码管上显示

发布者:cloudy德德最新更新时间:2015-04-29 来源: 51hei关键字:串口通信  数据发送到  单片机  数码管 手机看文章 扫描二维码
随时随地手机看文章
本程序的完整原理图下载: http://www.51hei.com/f/ks51.pdf 


/**
*功能:串口通信-数据发送到PC加一后接收到单片机在数码管上显示
*时间:2014年3月2日10:04:07
*作者:寒竹子
*备注:波特率:19200bps
*总结:串口通信时需要发送和接收数据时可以用到串口中断,在中断中进行数据的发送和接收,
*    数码管显示时必须要放在while (1)中,只有这样才可以正常显示数字!
**/

#include

typedef unsigned int uint;
typedef unsigned char uchar;

//数码管段选和位选声明
sbit WELA = P2^7;
sbit DULA = P2^6;

//数码管编码
uchar code table[] = {
0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F   //"9"
};
uint num = 254;

void UART_init();
void UART_init();
void display(uint num);

int main(void)
{
UART_init();
WELA = 1;
P0 = 0xFF;
WELA = 0;
DULA  = 1;
P0 =  0x00;
DULA = 0;

while (1)//等待串口发送和接收数据中断
{
//在数码管上显示
display(num);//数码管显示是动态显示的,所以必须要放在while (1)循环中,这样才可以动态显示!
P1 = num;
}

return 0;
}

//串口通信初始化(定时器T1初始化和串口通信方式的选择)
void UART_init()
{
//设定T1定时器工作方式2,八位自动重装,用于设定串口通信波特率
TMOD = 0x20;//T1: GATE C/!T 0 0 M1 M0:10 T0:0000
//设定波特率19200bps 初值 X = 2^8 - 11059200 / 19200 / 12 /32; X = 254.5 0xFE
TH1 = TL1 = 0xFE;
TR1 = 1;//打开定时器T1
SCON = 0x50;//设定串口通信方式1,八位异步传输波特率可设定
/*
SM0 = 0;
SM1 = 1;//方式1
REN = 1;//允许接收
*/
//因为要进行发送和接收,需要用到串口中断
EA = 1;//开总中断
ES = 1;//开定时器T1中断
}

//延时xms
void delayms(uint xms)
{
uint i, j;

for (i = 0; i < xms; i++)
for (j = 0; j < 110; j++);
}

//数码管显示
void display(uint num)
{
//将num分解
uchar bai, shi, ge;

bai = num / 100 % 10;
shi = num / 10 % 10;
ge  = num % 10;

//先段选后位选
DULA = 1;//打开段选锁存器
P0 = table[ge];//送入个位
DULA = 0;//关闭段选锁存器
P0 = 0xFF;//先关闭所有数码管的显示,避免乱码
WELA = 1;//打开位选锁存器
P0 = 0xDF;//1101 1111
WELA = 0;//关闭位选锁存器
//延时3毫秒
delayms(3);
P0 = 0x00;//消影

//十位
DULA  = 1;
P0 = table[shi];
DULA = 0;
P0 = 0xFF;
WELA = 1;
P0 = 0xEF; //1110 1111
WELA = 0;
delayms(3);
P0 = 0x00;

//百位
DULA = 1;
P0 = table[bai];
DULA = 0;
P0 = 0xFF;//关闭所有数码管,避免段选数据的影响
WELA = 1;
P0 = 0xF7; //1111 0111
WELA = 0;
delayms(3);
P0 = 0x00;//消影
}

//串口通信中断
void UART_sendAndReceive_int() interrupt 4//串口中断号4
{
//判断发送和接收的完成
if (TI)//硬件置位,发送数据完成
{
TI = 0;//TI清零,等待发送下一位数据
//允许接收数据
REN = 1;
}
//接收
if (RI)//接收完成
{
RI = 0;//RI清零,等待接收下一位数据
//取出SBUF中的数据
num = SBUF;
//num++
num++;
//禁止接收数据
REN = 0;
SBUF = num;//发送num
}
}

关键字:串口通信  数据发送到  单片机  数码管 引用地址:串口通信-数据发送到PC加1后接收到单片机在数码管上显示

上一篇:单片机矩阵按键定时器消抖程序源码
下一篇:51单片机舵机控制程序

推荐阅读最新更新时间:2024-03-16 14:00

PIC18系列单片机I/O端口操作寄存器及应用
试验芯片:Microchip PIC 18F4550 集成开发环境:MPLAB IDE v8.53 编译器:Microchip C18 PIC18系列单片机是美国微芯公司(Microchip)8位单片机系列中的高档系列,其任一I/O引脚允许的最大灌电流或最大拉电流达25mA,可以直接驱动LED和继电器。PORTA、PORTB 和PORTE 的最大灌电流或最大拉电流总和为200mA,PORTC和PORTD的最大灌电流或最大拉电流总和为200mA,PORTF和PORTG的最大灌电流或最大拉电流总和为100mA(注:PIC18F4550没有这两个端口)。 单片机和外设的交互都是通过I/O端口进行,每个I/O端口均有三个操作寄存器:
[单片机]
PIC18系列<font color='red'>单片机</font>I/O端口操作寄存器及应用
51 单片机串行通讯中波特率的自动检测
本文介绍一种在 80C51 串行通讯应用中自动检测波特率的方法。按照经验,程序起动后所接收到的第1个字符用于测量波特率。 这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率的定时间隔。 显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是多少。可是,在 RS-232 模式下,许多 ASCII 字符并不能测量出一个单独位时间。对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率)
[单片机]
51 <font color='red'>单片机</font>串行通讯中波特率的自动检测
51单片机综合学习系统之 红外线遥控篇
大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了12864点阵型液晶显示的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习红外线遥控的基本原理与使用方法。 先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。 上图是我们将要使用的51单片机综合学习系统硬件平台,本期实验我们用到了综合系统主机,1602液晶屏、超薄型红外线遥控
[单片机]
51<font color='red'>单片机</font>综合学习系统之 红外线遥控篇
驱动永磁无刷直流电机的嵌入式微控制器
    摘要: 本文介绍了一种适用于控制永磁无刷直流电机的廉价嵌入式微控制器,并结合实例给出了软件和硬件两种控制方法。     关键词: 永磁无刷直流电机  控制  嵌入式微控制器 一、 概述 永磁无刷直流电机(Permanent Magnet Brushless DC Motor以下简称PMBLDC)由于其固有的特点,在家用消费类产品(空调、冰箱、洗衣机)和IT周边产品(打印机、软驱、硬驱)中得到广泛的应用。它具有结构简单、高效、低噪声、高功率密度、启动扭矩大、寿命长等其它种类直流电机无法比拟的特性。我国是稀土大国,稀土永磁材料经过这几年的发展,已经有了一定的规模,质量和数据都有较大的提高,价格已不断
[传感技术]
单片机常用名词解释
总线: 指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信。 地址总线: 它是传送由CPU发出的用于选择要访问的器件或部件的地址。 数据总线: 它是用来传送微型机系统内的各种类型的数据。 汇编: 是能完成一定任务的机器指令的集合。 二进制数: 只有0和1两个数码,基数为二。 十六进制数: 采用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等16个数码,其中A-F相应的十进数为10-15,基数是16。 指令: 是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。 存储器: 用来存放计算机中的所有信息:包括程序、原始数据、运算的中间结果及最终结果等。 暂存器: 用来暂存由数据
[单片机]
物联网藏商机 MCU厂商数次并购疯抢市场
  近两年,各大 MCU 厂商为争夺 物联网 市场可谓是杀红了眼,几大巨头接连发起了数起大规模并购。凭借收购整合带来的效应,NXP、Microchip及Cypress的销售额在去年均出现了大幅增长。其中,NXP表现最为惹眼,营收爆涨了116%。下面就随网络通信小编一起来了解一下相关内容吧。   由于瑞萨、三星以及意法半导体等厂商未发起行业并购,所以2016年微控制器业务营收仅有小幅成长,有些甚至还出现下跌。譬如,三星去年 MCU 业务就出现大幅跌落,是前8大 MCU 厂商唯一下滑超过10%的厂商。   物联网藏商机 MCU厂商数次并购疯抢市场   根据调研机构IC Insights最新报告,2016年NXP赶超日本瑞萨,成为
[网络通信]
AT89S51单片机开发板的设计
1 引言 单片机系统传统的编程方式是将单片机先从电路板上取下,放入专用的编程器进行编程,再放人电路板进行调试。其缺点是频繁的拔插器件容易损坏器件的引脚;如果频繁的调试程序,必须重复拔插,大大降低了开发效率。ISP技术是未来发展的方向,其优势是无需编程器就可进行单片机的实验和开发,单片机器件可直接焊接到电路板上,调试结束即为成品,免去调试时由于频繁插入取出对器件和电路板造成的损坏和带来的不便。 ISP可降低研发成本;缩短从设计、制造到现场调试的时间,简化生产流程,大大提高工作效率;在试验新品或学生试验等常需用不同的程序调试器件的场合中,在线编程技术尤为重要。 设计AT89S51单片机开发板,采用ISP下载线实现在Keil C
[单片机]
AT89S51<font color='red'>单片机</font>开发板的设计
八位微控制器有哪些可以节约代码空间的代码优化技巧?
本文将介绍一些优化技术,帮助设计人员节约多达 10% 的代码空间,从而让容量有限的程序存储器支持更多新特性和补丁。 良好的操作方法 许多程序员在 32 位处理器上学习编写软件,如 Intel 的 Pentium 处理器或某种 ARM 平台。不过,嵌入式领域的软件编写需要不同的思路。在 32 位 CPU 上,存储比特位的最佳方法通常是使用 32 位变量。对 8 位处理器而言,最好的办法就是采用单字节。像增强型 8051s 等某些处理器可能提供特殊的 1 位变量。 嵌入式处理器通常会超出标准的哈佛架构将存储器分散到不同的存储器空间中,有的相互重叠,有的又是相互分离。例如,8051 中常见的存储器空间包括 CODE、XDATA、DA
[单片机]
八位<font color='red'>微控制器</font>有哪些可以节约代码空间的代码优化技巧?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved