#include "reg52.h"
#include "intrins.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P0 //P0口数据显示
sbit LCD1602_RS=P3^5; //1602引脚定义
sbit LCD1602_RW=P3^6;
sbit LCD1602_E=P3^4;
sbit k1=P3^2; //开
sbit k2=P3^3; //关
sbit led=P1^0;
uchar led_flag=0;
uchar reseve_flag=0;//接收标志位
void UART_Init();//串口初始化
void uartSendByte(unsigned char dat);//发送数据
void uartSendStr(unsigned char *s,unsigned char length);//发送字符串
void Lcd1602_Delay1ms(uint c) //延时函数,延时1ms
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void delay_ms(unsigned int t) //毫秒延时
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 0; //选择写入命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void LcdClean(void)// 清屏
{
LcdWriteCom(0x01);
}
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x32); //将8位总线转为4位总线
LcdWriteCom(0x28); //在四位线下的初始化
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针起点
LcdClean();
}
void LcdWritestr(uchar *dat) //向LCD写入多个字节的数据
{
while(*dat != '\0')
{
LcdWriteData(*dat);
dat++;
}
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void key()//按键操作函数
{
if(k1==0) //判断
{
Delay1ms(); //消抖处理
if(k1==0) //在判断
{ //设置
led_flag=1;
P1=0X00;
}while(k1==0);
}
if(k2==0)
{
Delay1ms();
if(k2==0) //加
{
led_flag=0;
P1=0XFF;
}while(k2==0);
}
}
void display_data(void)///显示
{
if(led_flag==1)
{
LcdWriteCom(0x80); //第一行
LcdWritestr("LED:ON ");
uartSendStr("LED:ON ",7);
}
else if(led_flag==0)
{
LcdWriteCom(0x80); //第一行
LcdWritestr("LED:OFF");
uartSendStr("LED:OFF",7);
}
}
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL1 = TH1;
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
void uartSendByte(unsigned char dat)
{
unsigned char time_out;
time_out=0x00;
SBUF = dat; //将数据放入SBUF中
while((!TI)&&(time_out<100)) //检测是否发送出去
{time_out++;DelayUs2x(10);} //未发送出去 进行短暂延时
TI = 0; //清除ti标志
}
void uartSendStr(unsigned char *s,unsigned char length)
{
unsigned char NUM;
NUM=0x00;
while(NUM<length) //发送长度对比
{
uartSendByte(*s); //放松单字节数据
s++; //指针++
NUM++; //下一个++
}
}
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
reseve_flag = SBUF;
}
if(TI) //如果是发送标志位,清零
TI=0;
switch(reseve_flag)
{
case (0+0x30): led_flag=1;
P1=0X00; break;
case (1+0x30): led_flag=0;
P1=0XFF;break;
default: break;
}
}
void main()
{
LcdInit();//1602初始化
UART_Init();//串口初始化
while(1)
{
display_data();
delay_ms(1000);
key(); //调用按键
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于51单片机的蓝牙点灯实验代码
共12个文件
uvproj:1个
uvopt:1个
hex:1个
需积分: 5 0 下载量 155 浏览量
2024-05-23
16:37:20
上传
评论
收藏 31KB ZIP 举报
温馨提示
基于51单片机的蓝牙点灯实验是一个常见的嵌入式系统项目,主要用于教学或DIY爱好者的学习实践。这个实验的目标是通过手机蓝牙控制51单片机上的LED灯,实现远程开关灯的功能。以下是进行此类实验的基本步骤和要点: 所需材料 51系列单片机(如AT89C51或STC89C51等)。 蓝牙模块(常用的是HC-05或HC-06,这些模块通常支持串行通信)。 LED灯及限流电阻。 面包板、杜邦线用于电路搭建。 电源供应(如USB转5V电源)。 电脑与开发环境(如Keil uVision用于编程单片机)。 蓝牙调试APP(用于手机端发送控制指令)。 硬件连接 将51单片机的VCC和GND分别连接到电源的正负极。 LED的一端(阳极,通常较长的一端)通过一个限流电阻(如220欧姆)连接到单片机的一个I/O口(如P1.0),LED的另一端连接到GND。 蓝牙模块的VCC和GND也连接到电源的正负极。 蓝牙模块的RXD连接到单片机的TXD(例如P3.1),TXD连接到RXD(例如P3.0),实现串行通信。 软件编程 使用Keil uVision编写51单片机的控制程序。程序需要监听蓝牙模块传来的数据,并
资源推荐
资源详情
资源评论
收起资源包目录
基于51单片机的蓝牙点灯代码.zip (12个子文件)
基于51单片机的蓝牙点灯代码
Bluetooth.hex 2KB
Bluetooth.OBJ 12KB
Bluetooth.uvopt 5KB
Bluetooth.uvproj 14KB
Bluetooth.LST 10KB
Bluetooth.c 4KB
Bluetooth.uvgui.liwei 89KB
Bluetooth_uvproj.bak 0B
Bluetooth.plg 7KB
Bluetooth.lnp 50B
Bluetooth 10KB
Bluetooth.M51 15KB
共 12 条
- 1
资源评论
科创工作室li
- 粉丝: 4411
- 资源: 142
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 打包和分发Rust工具.pdf
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功