51单片机心形灯实现串口通信编程

发布者:心有归属最新更新时间:2021-08-12 来源: eefocus关键字:51单片机  心形灯  串口通信 手机看文章 扫描二维码
随时随地手机看文章

在这里插入图片描述
心形灯原理图
在这里插入图片描述

编译软件:Keil uVision5

(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174)

单片机程序下载软件:STC-ISP

(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157)


程序代码:

灯状态处于0亮1灭

发送方:

#include


sbit k1=P3^2;

sbit k2=P3^3;

sbit k3=P3^4;

sbit k4=P3^5;


#define LED1  P0

#define LED2  P2


void UsartInit(){

SCON=0x50;

TMOD=0x20;

PCON=0x80;

TH1=0xF4;

TL1=0xF4;

ES=1;

EA=1;

TR1=1;

}


void delay(unsigned int ms)

{

unsigned int i,j;

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

}



unsigned char keyscan(void){

unsigned char key='.';

if (k1==0)

{

delay(1);

if(k1==0)

{

key='1';

while(!k1);

}

}

if (k2==0)

{

delay(1);

if(k2==0)

{

key='2';

while(!k2);

}

}

if (k3==0)

{

delay(1);

if(k3==0)

{

key='3';

while(!k3);

}

}

if (k4==0)

{

delay(1);

if(k4==0)

{

key='4';

while(!k4);

}

}

return key;

}


void Tras(unsigned char key)

{

SBUF=key;

while(!TI);

TI=0;

}


void main()

{

unsigned char key;

UsartInit();

while(1)

{

key=keyscan();

if(key!='.')

{

Tras(key);

key='.';

}

}

}


接收方:


#include

#define uchar unsigned char;

#define uint unsigned int;


uchar receiveData;

uchar flag;

uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};

sbit LED17=P3^6;

void UsartInit(){

SCON=0x50;

TMOD=0x20;

PCON=0x80;

TH1=0xF4;

TL1=0xF4;

ES=1;

EA=1;

TR1=1;

}


void Delay(unsigned int a){

unsigned char b;

for(;a>0;a--){

for(b=110;b>0;b--);

}

}


void AllOn(){

P0=0x00;

P2=0x00;

LED17=0;

}


void AllDown(){

P0=0xff;

P2=0xff;

LED17=1;

}


void RFlow(){

int i;


for(i=0;i<=7;i++){


P2=table[i];

Delay(300);

}

P2=table[8];

for(i=7;i>=0;i--){

P0=table[i];

//P2=table[i];

Delay(300);

}

P0=table[8];

LED17=0;

Delay(300);

LED17=1;

}


void LFlow(){

int i;


for(i=0;i<=7;i++){

P0=table[i];

//P2=table[i];

Delay(300);

}

P0=table[8];

for(i=7;i>=0;i--){

//P0=table[i];

P2=table[i];

Delay(300);

}

P2=table[8];

LED17=0;

Delay(300);

LED17=1;

}

void main(){

UsartInit();

while(1)

{

switch(receiveData)

{

case '1': AllOn();break;

case '2': AllDown();break;

case '3': LFlow();break;

case '4': RFlow();break;

default:break;

}

}

}



void Usart() interrupt 4{

receiveData=SBUF;

RI=0;

P0=0xff;

P2=0xff;

LED17=1;

}

关键字:51单片机  心形灯  串口通信 引用地址:51单片机心形灯实现串口通信编程

上一篇:51单片机心形灯实现旋转呼吸灯流水编程
下一篇:基于51单片机的8个LED流水灯的设计

推荐阅读最新更新时间:2024-11-09 11:35

C51单片机中断函数的修饰方法
interruptm修饰符 C51中断函数必须通过该修饰符进行修饰。在C51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按51系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。 【例】编写一个用于统计外中
[单片机]
C<font color='red'>51单片机</font>中断函数的修饰方法
51单片机的内存映射(二)
本篇主要讲述单片机的FLASH内存映射,首先来看一下FLASH的内存映射表: 上图中启动地址是0x0000,也就是单片机上电后PC指向的这个位置,我们把需要执行的程序的首地址放在其中,对应的汇编语言如下图所示: 0地址去执行内部RAM的初始化工作,后面的代码控制寄存器指挥PC去取地址,以此来决定程序的运行! 在这里大家有没有觉得很奇怪:51单片机里面为什么没有时钟的初始化和中断向量表的初始化呢?其实原因很简单, 51单片机对12M晶振的时钟进行12分频,它就是固定的1M,因此就不需要设置时钟了。而STM32就不一样了,用户可以随意配置单片机的工作时钟。另外还有一个问题,单片机为什么不去中断向量表的注册呢?这是因
[单片机]
51单片机——定时计数器中断
先写IE寄存器中断允许寄存器,再写中断处理函数就行 定时模式下触发一次中断后TH和TL的值会默认复位为0,需要在中断服务函数里重新设定初值。 例 void timer0() interrupt 1 { TH0 = 0x4b; TL0 = 0xfd; } 应用 数码管动态扫描,按键按下也能继续执行扫描
[单片机]
<font color='red'>51单片机</font>——定时计数器中断
51单片机在wave6000下编程如何实现几个模块的结合
本文主要是关于wave6000的相关介绍,并着重对51单片机在wave6000下编程如何实现几个模块的结合进行了详尽的阐述。 wave6000 wave6000,这个软件是南京伟福公司的单片机开发软件,一般就是用在C51单片机。不需要购买仿真器,使用软件模拟器就可以了,使用很方便的。 也支持KEILC,但最好不要在WAVE内使用C,如果想用C编写,还是用KEIL C方便。 WAVE6000编译软件,采用中文界面。用户源程序大小不受限制,有丰富的窗口显示方式,能够多方位、动态地展示程序的执行过程。其项目管理功能强大,可使单片机程序化大为小,化繁为简,便于管理。另外,其书签、断点管理功能以及外设管理功能等为51单片机的仿真带来
[单片机]
AT89S51单片机多路开关控制发光二极管显示的设计
1. 如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。 2. 电路原理图 图4.3.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上; (2. 把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上; 4. 程序设计内容 (1. 开关状态检测 对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的
[单片机]
AT89S<font color='red'>51单片机</font>多路开关控制发光二极管显示的设计
51单片机玩转物联网基础篇09-串口通信
前言 串口通信在嵌入式开发中占据非常重要的低位,串口经常被用来调试系统,打印必要的调试信息,帮助我们分析定位问题,同时很多常见的外设也支持串口协议,如WIFI模块、蓝牙模块、4G模块、指纹模块、PM2.5传感器、甲醛传感器等诸多元器件,本节开始,我们正式学习51单片机的串口。 一、基础知识 1. 通信方式简介 串口使用的通信方式是串行通信,串口通信是相对于并行通信来说的,所谓并行通信的是数据的各位同时传送,其特点是传输速度快、效率高,但是使用数据线较多,传输成本较高,适合近距离通信,其示意图如下: 所谓串行通信其实是指数据通过一根数据线一位一位依次传送给目标设备,其特点是至少只需要一根传输线即可完成,成本低但传输速断慢,其
[单片机]
<font color='red'>51单片机</font>玩转物联网基础篇09-<font color='red'>串口通信</font>
基于51单片机的电梯控制系统设计
一.系统概述 系统使用的模块有AT89C51单片机+LCD1602显示屏+ADC0832+按键+小灯。 本次设计的智能路灯控制系统以AT89C51单片机为控制核心,使用LCD1602显示屏显示ADC采集回来的光照强度的数字电压信号,系统程序内设置光照强度阈值,在默认状态下为自动模式,此时调节电位器就能实现光照强度的调节,按下自动按键就会切换到手动模式,此时按下手动开和手动关按键就能控制小灯的亮灭。 二.仿真概述 1.使用LCD1602显示光照强度电压信号值。 2.为电梯的内外都设置了上下楼按键,按下就开始执行上下楼程序,左侧的指示灯会根据电梯上行和下行高亮,到达指定楼层后状态灯会直接亮起。 3.当按下上下楼按键后
[单片机]
基于<font color='red'>51单片机</font>的电梯控制系统设计
51单片机的中断响应原理
1.中断概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。 2.中断系统结构 引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。 89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。 (P3.2)可由IT0(TCON.0)选择其为
[单片机]
<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