STC8H1K28单片机课程设计串口控制亮灯

a是全亮,rgb分别红绿蓝,以下代码是发一次亮一下,不发数据就熄灭,也可以自行更改,在while循环里面修改变量即可。

以下是uart.c

//#include "reg51.h"
#include "intrins.h"

//程序代码及注释:
#include<stc8h.h>
char s_data='x';//初始化变量

void Uart1Init(void)		//9600bps@11.0592MHz
{
  
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xE0;			//设置定时初始值
	TH1 = 0xFE;			//设置定时初始值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
}

void UART_R(void) interrupt 4 using 1//串口1中断服务子函数
{
 if(RI)//接受成功时进入if
 {
s_data = SBUF;//接收数据,CPU从SBUF读数据
  	RI =0;//接受成功清零标志位,保证下次接收
 	 switch(s_data)
{
//P00=0;
case 'b'://发送‘b’蓝灯亮
P00=0;
break; //跳出整个循环
case 'r': //发送‘r’红灯亮
P01=0;
break; //跳出整个循环
case 'g': //发送‘g’绿灯亮
P02=0;
break; //跳出整个循环
case 'o': //发送‘o’灯不亮
P0=0xff;
break; //跳出整个循环
case 'a': //发送‘a’灯都亮
P0=0;	
break; //跳出整个循环
default: //除了以上情况外,
SBUF = 'n'; //发送数据‘n’。CPU向SBUF写入数据
while(!TI); //等待发送成功
break;//跳出整个循环
}
	 	SBUF =s_data ; //发送数据。CPU向SBUF写入数据
   		while(!TI);//等待发送成功
}

if(TI)//发送成功进入if
	TI=0;//发送标志位清零
}
 void setup()
 {
  	P0M1 &=0xF8;//(P0M1=0x00)//P0低三位设置为准双向口模式
P0M0 &=0XF8;//(P0M0=0x00)//P0低三位设置为准双向口模式
  	ES=1;//打开串口1中断允许控制位
	EA=1; //打开总中断

 }
void main(void)//万年不变主函数三段式
{
//P00=0;
	setup();//初始化函数
	Uart1Init();
	while(1)
	{
	
				 P00=1;
				 P01=1;
				 P02=1;


	
	}//耗时
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值