护花天使项目,51单片机代码分析第一次
来源:互联网 发布:淘宝图片的尺寸是多少 编辑:程序博客网 时间:2024/05/29 19:24
2017年5月7日左右,我们完成了项目第一次的雏形,我负责的是硬件部分,部分代码如下
#include "delay.h"
#include "temp.h"
#include "wind.h"
#include "warning.h"
#include "def.h"
#include "led.h"
void UsartConfiguration();
void Int0Init();
void sendmessage();
static u8 receiveData; //接受的数据
u16 num;
void datapros(int temp)
{
floattp;
if(temp<0) //小于零要先减一再取反
{
disp[0]=0x40;
//清除发送完成标志位
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5; //加0.5防止四舍五入的误差
}
else
{
disp[0]=0x00;
//清除发送完成标志位
tp=temp;
temp=tp*0.0625*100+0.5;
}
num = temp;
disp[1]=smg_duan[temp/10000]; //数据处理
disp[2]=smg_duan[temp%10000/1000];
disp[3]=smg_duan[temp%1000/100]; //通过或运算来显示小数点
disp[4]=smg_duan[temp%100/10]; //小数后一位
disp[5]=smg_duan[temp%10]; //小数后两位
datas[0]= temp / 10000;
datas[1]= temp % 10000 / 1000;
datas[2]= temp % 1000 / 100;
datas[3]= temp % 100 / 10;
datas[4]= temp % 10;
}
void main()
{
UsartConfiguration();
moto=0;
GPIO_TRAFFIC=0xff;
while(1)
{
//风扇
datapros(Ds18b20ReadTemp());
//DigDisplay();
}
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void Usart() interrupt 4 //串口中断号为4
{
receiveData=SBUF;
RI=0; //清零,停止接受
switch(receiveData)
{
case(0x30):sendmessage();break; //0
case(0x31):warning();break;
case(0x32):wind();break;
case(0x33):led();break;
}
}
void sendmessage()
{
u8 i;
SBUF='+';//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0;
SBUF = '0'+datas[0];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '0'+datas[1];//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI = 0;
SBUF = '0'+datas[2];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '.';//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '0'+datas[3];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '0'+datas[4];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
for(i=0; i<8; i++)
{
SBUF= CNCHAR[i];//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI= 0;
}
}
从main函数开始分析,首先设置串口通信,打开计数器,设置波特率等,然后打开中断,打开计数器。
然后编写串口中断,中断号为4,对sbuf区的值进行判断,为0时发送单片机返回当前温度值,为1时打开蜂鸣器,为2时打开风扇,为3时打开led灯。
发送信息是将所需要发送的值依次装入sbuf区,每装入一次,就返回一次,短时间内多次发送就可以达到所需显示的要求了。
风扇,led灯,和蜂鸣器都是简单的控制高低电平,就可以实现要求了。
然后对温度传感器采集到的信息进行处理,将个十百位和小数点后两位放进数组中,以便返回给电脑。温度传感器有读取ram数据和发送两大步骤。
差不多了,第一次就写这么多,目前还有很多没有完善的,比如说通信方面,应该向无线通信靠拢,其他的功能也应该更丰富。
- 护花天使项目,51单片机代码分析第一次
- 关于单片机的代码分析
- 单片机汇编代码分析示例
- 51单片机ucos ii任务切换汇编代码分析(1)
- 51单片机ucos ii任务切换汇编代码分析(2)
- 51单片机lcd代码
- 51单片机-TLC5615代码
- MSP430+nrf2401代码,第一次好好的分析
- 51单片机项目:多功能记录仪
- 51单片机项目 门禁系统
- 51单片机写LCD1602代码
- 51单片机I2C总线代码
- 51单片机之音乐代码
- 51单片机电子琴C代码
- 提高51单片机代码效率
- 51单片机体系结构初步分析
- 51单片机汇编延时分析:
- 天使
- [Algorithm]九章必背程序--stack:Non Recursion
- 什么是servlet
- 逻辑回归处理离散变量
- 利用ORACLE对数据权限进行控制
- 每日一题 No.46 输出素数的个数
- 护花天使项目,51单片机代码分析第一次
- UVA
- Android Zxing 的简单对接
- centos7 yum安装jjdk
- HDOJ 1285 确定比赛名次
- Redis windows php7
- mac下eclipse配置tomcat
- MAC使用技巧 (不定期补充)
- MacOS 系统显示隐藏文件