单片机流水灯串口控制流水灯
单片机流水灯串口控制的功能要求【从PC通过串口发送字符(‘R’,’L,‘S),分别控制流水灯向右流动、向左流动、停止】:
(1)编写完整的C语言程序实现功能要求,采用循环轮询结构;
答:循环轮转结构是在main函数中,按事先编写好的顺序进行执行,其缺点是实时性差,不适合有外部驱动的情况在这里不展示代码了。
(2)考虑采用前后台结构编程的话,程序的大体结构是什么样子的?用程序框图或文字描述一下;
答:前后台系统相比轮询系统,前后台系统在轮询系统的基础上加入了中断的概念,外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断我们称之为前台,main()函数中的无限循环称为后台。
其详细代码如下:
#include<reg51.h>
#include <absacc.h>
#include <intrins.h>
void UsartConfiguration();
void delay(int z);
void led_r();
void led_l();
void led_die();
void main()
{UsartConfiguration();while(1){}
}
void UsartConfiguration()//硬件初始化
{SCON=0X50; TMOD=0X20; PCON=0X80; TH1=0XF3; TL1=0XF3;ES=1; EA=1; TR1=1;
}void Usart() interrupt 4串行通信中断函数
{unsigned char receiveData;receiveData=SBUF;if(receiveData=='S'||receiveData=='s'||receiveData==83||receiveData==115){led_die();}if(receiveData=='L'||receiveData=='l'||receiveData==76||receiveData==108){led_l();}if(receiveData=='R'||receiveData=='r'||receiveData==82||receiveData==114){led_r();}RI = 0;SBUF=receiveData;while(!TI); TI=0;
}
void led_r()//又流水灯
{char temp,num;temp=0x7f;for(num=0;num<8;num++){ P2=temp;delay(1000);temp=_cror_(temp,1); }
}
void led_l()//左流水灯
{char temp,num;temp=0xfe;for(num=0;num<8;num++){ P2=temp;delay(1000);temp=_crol_(temp,1);}
}
void led_die()//灯熄灭
{P2=0x00;
}void delay(int z)//延时函数
{int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}
(3)如果可以采用多任务方式编程的话,程序的大体结构是什么样子的?用程序框图或文字描述一下。
答:多任务系统相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中,任务与中断一样,也具有优先级,优先级高的任务会被优先执行。但一个紧急事件在中断中被标志之后,如果事件对应的任务优先级足够高,就会立刻得到响应,相比前后台系统,多任务系统的实时性又被提高了。
其大致框架如下:
int flag1 = 0 ;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
//硬件相关初始化
HardWareInit();
//OS初始化
RTOSInit();
//OS启动,开启多任务调度,不再返回
RTOSStart();
}
void ISR1(void)
{
flag1=1;//置标志位
}
void ISR2(void)
{
flag2=1;//置标志位
}
void ISR3(void)
{
flag1=3;//置标志位
}
void DoSomething1(void)
{
//无限循环,不能返回
for(;;)
{
if(flag1) {}
}
}
void DoSomething2(void)
{
//无限循环,不能返回
for(;;)
{
if(flag2) {}
}
}
void DoSomething3(void)
{
//无限循环,不能返回
for(;;)
{
if(flag3) {}
}
}
单片机流水灯串口控制流水灯相关推荐
- 51单片机电脑通过串口控制LED灯
Hex模式:底层传输的实际数据 文本模式:把数据进行编码,显示ASCII码char字符,带括号的是控制字符,无法显示出来 代码 UART.c #include <REGX52.H>/** ...
- 单片机-四个按键控制流水灯
单片机-四个按键控制流水灯 代码 代码 代码片. #include "reg51.h" sbit key1 = P2 ^ 0; sbit key2 = P2 ^ 1; sbit k ...
- 单片机:电脑通过串口控制LED灯
题目概述: 电脑通过串口控制LED灯. 编程: #include<REG52.h> void delay(unsigned int xms) { unsigned int i,j; for ...
- CC2530串口控制LED灯奇怪玩法
CC2530串口控制LED灯奇怪玩法 实验目的:CC2530用串口从上位机发送16进制命令代码来控制LED3.4.5.6并返回相应动作 文章目录 CC2530串口控制LED灯奇怪玩法 一.串口设置 二 ...
- 51单片机红外通信及控制LED灯(LCD1602显示)
51单片机红外通信及控制LED灯(LCD1602显示) 大家好,又和大家见面了,离上一次DS18B20传感器的文章已经过去了一个星期了,这期我将给大家带来,基于STC89C52芯片和HS0038红外接 ...
- 【GD32F427开发板试用】-01-UART1 串口控制LED灯亮灭
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:智能家居-九俊楚子 今天用GD32F427R开发板先测试了UART1的通信功能,然后通过 ...
- 51单片机_7-1独立按键控制流水灯方向
文章目录 要求 资源 效果 main函数 要求 1.使用单片机内部定时器做为延时函数 2.独立按键K1控制流水灯左移 3.独立按键K2控制流水灯右移 资源 工程文件压缩包 链接:https://pan ...
- AVR单片机实践--ATmega16按键控制流水灯
一.实验目的 1.掌握AVR单片机开发平台的搭建方法. 2.掌握GPIO的编程方法. 二.实验内容及结果 1.设计程序 自行设计电路,包括流水灯和4个按键,完成"按键控制流水灯样式" ...
- 单片机基础:开关控制LED灯的亮灭
(一) 单片机的初级运用.通过两个开关来控制LED灯的亮灭.首先要使用Proteus来绘制电路原理图.图中的LED灯为共阴接法.如图: (二)当单片机P3口做输入时,首要让其端口输出1.如图中的P3^ ...
最新文章
- 2022-2028年中国阻燃纤维行业市场研究及前瞻分析报告
- 什么是智能仓储?一文带你彻底搞懂!
- String[]转化暴露“思维误区”
- 萌新的Linux的学习之路(十) --ip设置管理
- 串行并行程序在效率上的简单比较
- Nginx--虚拟主机
- medium font size in reuse project sapUiFontSize
- 工厂利用计算机实现温度调节属于,工厂利用计算机系统实现温度调节、阀门开关,该应用属于()。A.过程控制B.数据处理C.科学计算D.C...
- linux笔记_防止ddos攻击
- MATLAB实现三边定位
- 关于ireport中文不显示问题
- 理解浏览器的历史记录
- 离散数学及其应用复盘 | 第3版第4章——谓词逻辑思维导图梳理(复习专用)
- STM32f107 CAN滤波器设置
- DSP篇--C6701功能调试系列之 FLASH测试
- 对 oc 学习的 阶段反思
- ubuntu更新源修改更新源
- java web热区链接_HTML图片热区map area的用法
- 鸿蒙系统为国,华为发布鸿蒙系统,国人为之骄傲
- 《地理信息系统导论》第6章 几何变换 复习题
热门文章
- [Redis]怎么查看以xx开头的所有key?有什么坑?BigKey问题?
- 安卓开源项目周报0315
- 【剑指Offer(专项突破)】002. 二进制加法(Java实现) 详细解析
- PVCBOT【15号A版】机械昆虫--六足爬行机器人
- 水彩风职业规划PP模板
- Linux文本处理自定义,Linux中文本处理命令sed的使用示例分享
- 专访肖佳:写一本技术图书是水到渠成的
- Google Play市场包体大小判断
- 算法笔记_图算法专题_关键路径 AOV网和AOE网
- 你应该知道的一个PyTorch小技巧