登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 单片机学习第三周(上)

[复制链接]
发表于 2019-2-9 21:26:55 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 学习蜂鸣器,UART串口通信,编写实例练习程序
开始时间: 2019-02-04
结束时间: 2019-02-09
/* 下载程序后按键K1按下就会触发蜂鸣器门铃“叮咚”响  */
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
sbit k1=P3^1;
u8 ding,dong,flag,stop;
u16 n;
void delay(u16 i)
{
while(i--);
}
void time0init()   //定时器0初始化
{
TMOD=0X01;  //定时器0 方式1
TH0=0Xff;
TL0=0X06; //定时250us
// TR0=1;
EA=1;
TR1=1;     //打开计数器
}
/*******************************************************************************
* 函 数 名       : main
* 函数功能   : 主函数
* 输    入       : 无
* 输    出      : 无
*******************************************************************************/
void main()
{
UsartInit();  // 串口初始化
while(1);  
}
/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能    : 串口通信中断函数
* 输入           : 无
* 输出           : 无
*******************************************************************************/
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI);    //等待发送数据完成
TI=0;       //清除发送完成标志位
}

ET0=1;
}
void biaohaoinit()    //各个标号初始化
{
ding=0;  //叮声音  计数标志
dong=0;  //咚声音  计数标志
n=0;  //定时0.5s标志
flag=0;
stop=0;    //结束标志
}
void main()
{
time0init();
biaohaoinit();
while(1)
{
  if(k1==0)    //判断按键是否按下
  {
   delay(1000);  //消抖
   if(k1==0)
   {
    TR0=1; //打开定时器0
    while(!stop);
   }
  }
}
}
void time0() interrupt 1
{
n++;
TH0=0Xff;
TL0=0X06; //250us
if(n==2000)  //定时0.5s  叮响0.5秒,咚响0.5秒
{
  n=0;
  if(flag==0)
  {
   flag=~flag;
  }
  else
  {
   flag=0;
   stop=1;
   TR0=0;   //关闭定时器0
  }
}
if(flag==0)
{        //通过改变定时计数时间可以改变门铃的声音
  ding++;     //叮
  if(ding==1)
  {
   ding=0;
   beep=~beep;
  }
}
else
{
  dong++;
  if(dong==2)    //咚
  {
   dong=0;
   beep=~beep;
  }
}
}

              串口通信实验  

#include "reg52.h"   
typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;

/*******************************************************************************
* 函数名         :UsartInit()
* 函数功能     :设置串口
* 输入           : 无
* 输出           : 无
*******************************************************************************/
void UsartInit()
{
SCON=0X50;   //设置为工作方式1
TMOD=0X20;   //设置计数器工作方式2
PCON=0X80;   //波特率加倍
TH1=0XF3;    //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1;      //打开接收中断
EA=1;      //打开总中断
TR1=1;     //打开计数器
}
/*******************************************************************************
* 函 数 名       : main
* 函数功能   : 主函数
* 输    入       : 无
* 输    出      : 无
*******************************************************************************/
void main()
{
UsartInit();  // 串口初始化
while(1);  
}
/*******************************************************************************
* 函数名         : Usart() interrupt 4
* 函数功能    : 串口通信中断函数
* 输入           : 无
* 输出           : 无
*******************************************************************************/
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI);    //等待发送数据完成
TI=0;       //清除发送完成标志位
}

几个实例练习代码过长就不发送了。
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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