找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1023|回复: 1
收起左侧

串口通信控制开发板小灯和蜂鸣器

[复制链接]
ID:826607 发表于 2020-10-18 11:03 | 显示全部楼层 |阅读模式
/**************************************************************************************                                                                                                                        
实现现象:串口通信控制开发板小灯和蜂鸣器
注意事项:无
编写人:  王瑶
编写时间:2020年10月16日

修改日志:

说明:本次编写的基础程序是,为综合实验提供基础
***************************************************************************************/
#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件
typedef unsigned int;          //对数据类型进行声明定义
typedef unsigned char;

u8 receiveData;
u8 n[]="ABCDEFGH";

sbit beep=P1^5;           // 将单片机的P1.5端口定义为蜂鸣器beep
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;

/*******************************************************************************
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函数功能 : 峰器响一声函数
* 参    数 : u16 num;
* 定义端口 :sbit beep=P1^5;
*******************************************************************************/
void beepon()
{
   u16 num;
   for(num=0;num<600;num++)   //蜂鸣器响一声
   {                                                  
         beep=~beep;                   //蜂鸣器响一声
         delay(11);                          
   }
}

/*******************************************************************************
* 函数功能  : 串口中断的配置
* 配    置  :  EA ES   RT1 TH1 TL1 TMOD    SCON   PCON(波特率加倍=0x80)   
* TMOD寄存器:GATE C/T M1 M0  GATE C/T M1 M0
* 工作方式  :00 方式0  13位定时计数器         01 方式1  16位定时计数器
                        10 方式2  8位自动重装载        11 方式3  T0分成2个独立的计数器
* GATE=0 软件启动定时器    GATE=1 软件启动+外部中断高电平
* C/T=0 为定时模式        C/T =1为计数模式。
* SCON寄存器: SM0 SM1 SM2 REN TB8 RB8 TI RI
* 工作方式  :00 方式0  移位寄存器                fosc/12      
              01 方式1  10位异步收发(8位数据)          可变
                        10 方式2  11位异步收发(9位数据)          fosc/64  fosc/32   
                          11 方式3  11位异步收发(9位数据)          可变
* SM2 多机通信控制位  REN允许串行接收位  
* TI:发送中断标志位  RI:接受中断标志位
*******************************************************************************/
void UsartInit()
{
        EA=1;                    //打开总中断
        ES=1;                        //打开接收中断
        TR1=1;                        //打开计数器
        TH1=0XF3;                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;                //计数器参数  {方式2 12M 波特率 加倍否}
        TMOD=0X20;                //设置计数器工作方式2 自动重新装载       
        SCON=0X50;                //设置为工作方式1
        PCON=0X80;                //波特率加倍

}

/*******************************************************************************
* 函数功能  : 主函数
*******************************************************************************/
void main()
{
        UsartInit();  //        串口初始化
        while(1);               
}

/*******************************************************************************
* 函数功能  : 串口通信中断函数
*******************************************************************************/
void Usart() interrupt 4
{
        u8 m;
        m=SBUF;
        if(m==n[0]){led1=~led1;beepon();}      
        if(m==n[1]){led2=~led2;beepon();}
        if(m==n[2]){led3=~led3;beepon();}      
        if(m==n[3]){led4=~led4;beepon();}

        receiveData=SBUF;       //出去接收到的数据
        RI = 0;                 //清除接收中断标志位
        SBUF=receiveData;       //将接收到的数据放入到发送寄存器
        while(!TI);                            //等待发送数据完成
        TI=0;                                   //清除发送完成标志位
}



/*******************************************************************************
sbit led1=P2^0;           //将单片机的P2.0端口定义为led1
sbit beep=P1^5;           // 将单片机的P1.5端口定义为蜂鸣器beep
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件
#define led P2

sbit LSA=P2^2;         // 75595的管脚定义
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

LSA=0;
LSB=0;
LSC=0;        //控制38译码器的Y0输出低电平

sbit k1=P3^1;       
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;

sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;
sbit led7=P2^6;
sbit led8=P2^7;

#define GPIO_DIG P0         //数码管的段码
#define GPIO_KEY P1         //矩阵按键的扫描
u8 KeyValue;        //用来存放读取到的键值

* 函数功能 : 峰器响一声函数
* 参    数 : u16 num;
* 定义端口 :sbit beep=P1^5;
void beepon()
{
   for(num=0;num<600;num++)   //蜂鸣器响一声
   {                                                  
         beep=~beep;                   //蜂鸣器响一声
         delay(11);                          
   }
}

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



































回复

使用道具 举报

ID:820507 发表于 2020-11-1 21:37 | 显示全部楼层
这是要用串口调试助手吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表