振动传感器的c语言程序,单片机红外对射传感器实验详解 附程序源码
#include
#define BUF_LENTH 128 //定义串口接收缓冲长度
#define uint unsigned int
#define uchar unsigned char
unsigned char uart1_wr; //写指针
unsigned char uart1_rd; //读指针
unsigned char xdata RX0_Buffer[BUF_LENTH]; //接收缓冲
unsigned char flag;
unsigned char i;
unsigned char xdata mbus_buffer[255];
unsigned char xdata mbus_Sendbuf[255];
unsigned char xdata Crc_buf[2]; //声明存储CRC校验值的高8位及低8位的缓存
unsigned int Crc_return_data; //声明CRC校验值
bit B_TI; //发送完成标志
sbit P1_0 = P1^0;//定义P1.0端口
// 7 6 5 4 3 2 1 0 Reset Value
//sfr ADC_CONTR = 0xBC; ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000 //AD 转换控制寄存器
#define ADC_OFF() ADC_CONTR = 0
#define ADC_ON (1 << 7)
#define ADC_90T (3 << 5)
#define ADC_180T (2 << 5)
#define ADC_360T (1 << 5)
#define ADC_540T 0
#define ADC_FLAG (1 << 4) //软件清0
#define ADC_START (1 << 3) //自动清0
#define ADC_CH0 0
#define ADC_CH1 1
#define ADC_CH2 2
#define ADC_CH3 3
#define ADC_CH4 4
#define ADC_CH5 5
#define ADC_CH6 6
#define ADC_CH7 7
uint adc10_start(uchar channel);
void uart1_init(void);
void Uart1_TxByte(unsigned char dat);
void Uart1_String(unsigned char code *puts);
void delay_ms(unsigned char ms);
unsigned int cal_crc(unsigned char *snd, unsigned char num);
/*************** 用户定义参数 *****************************/
#define MAIN_Fosc 11059200UL
#define Baudrate0 9600UL
/**********************************************************/
/************** 编译器自动生成,用户请勿修改 *****************************/
#define BRT_Reload (256 - MAIN_Fosc / 16 / Baudrate0) //Calculate the timer1 reload value ar 1T mode
/**********************************************************/
//**********************************************************************
//函数名:main(void)
//输入 :无
//输出 :无
//功能描述:检测红外对射传感器中间有无物体,用AD量表示,当返回值大于
//500判定有物体
//**********************************************************************
void main(void)
{
uint j;
uart1_init();//初始化串口
P1ASF = (1 << ADC_CH0); //STC12C5A16S2系列模拟输入(AD)选择ADC1(P1.0)
ADC_CONTR = ADC_360T | ADC_ON;
while(1)
{
j = adc10_start(0); //(P1.0)ADC1转换
delay_ms(5);
if(flag==1)
{ delay_ms(5);
if(RX0_Buffer[0x03] == 0x2C)
{
mbus_Sendbuf[3] = 0x00;
mbus_Sendbuf[4] = 0x00;
if(j>500)
mbus_Sendbuf[4] = 0x01;
mbus_Sendbuf[2] = (((RX0_Buffer[0x04] * 16) + RX0_Buffer[0x05]) * 2);
mbus_Sendbuf[0] = RX0_Buffer[0];
mbus_Sendbuf[1] = 0x03;
Crc_return_data=cal_crc(mbus_Sendbuf, 5); //取得将要发送数据的CRC值
Crc_buf[0]=((Crc_return_data >> 8)&0xff); //取得CRC值的高8位
Crc_buf[1]=(Crc_return_data & 0xff); //取得CRC值的低8位
mbus_Sendbuf[5]=Crc_buf[1]; //CRC值低8位赋值给将要发送的数据的倒数第二个字节
mbus_Sendbuf[6]=Crc_buf[0]; //CRC值高8位赋值给将要发送的数据的最后一个
for(i = 0; i < 7; i++)
{
Uart1_TxByte(mbus_Sendbuf[i]);
}
flag=0;
uart1_wr=0;
}
}
}
}
//**********************************************************************
//函数名:adc10_start(uchar channel)
//输入 :ADC转换的通道
//输出 :ADC值
//功能描述:ADC转换
//**********************************************************************
uint adc10_start(uchar channel) //channel = 0~7
{
uint adc;
uchar i;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
i = 250;
do{
if(ADC_CONTR & ADC_FLAG)
{
ADC_CONTR &= ~ADC_FLAG;
adc = (uint)ADC_RES;
adc = (adc << 2) | (ADC_RESL & 3);
return adc;
}
}while(--i);
return 1024;
}
/*****************************CRC校验计算函数********************************/
unsigned int cal_crc(unsigned char *snd, unsigned char num)
{
unsigned char i, j;
unsigned int c,crc=0xFFFF;
for(i = 0; i < num; i ++)
{
c = snd[i] & 0x00FF;
crc ^= c;
for(j = 0;j < 8; j ++)
{
if (crc & 0x0001)
{
crc>>=1;
crc^=0xA001;
}
else crc>>=1;
}
}
return(crc);
}
//**********************************************************************
//函数名:uart1_init(void)
//输入 :无
//输出 :无
//功能描述:串口初始化函数,通信参数为9600 8 N 1
//**********************************************************************
void uart1_init(void)
{
PCON |= 0x80; //UART0 Double Rate Enable
SCON = 0x50; //UART0 set as 10bit , UART0 RX enable
AUXR |= 0x01; //UART0 使用BRT
AUXR |= 0x04; //BRT set as 1T mode
BRT = BRT_Reload;
AUXR |= 0x10; //start BRT
ES = 1;
EA = 1;
}
//**********************************************************************
//函数名:Uart1_TxByte(unsigned char dat)
//输入 :需要发送的字节数据
//输出 :无
//功能描述:从串口发送单字节数据
//**********************************************************************
void Uart1_TxByte(unsigned char dat)
{
B_TI = 0;
SBUF = dat;
while(!B_TI);
B_TI = 0;
}
//**********************************************************************
//函数名:Uart1_String(unsigned char code *puts)
//输入 :字符串首地址
//输出 :无
//功能描述:从串口发送字符串
//**********************************************************************
void Uart1_String(unsigned char code *puts)
{
for(; *puts != 0; puts++)
{
Uart1_TxByte(*puts);
}
}
//**********************************************************************
//函数名:UART1_RCV (void)
//输入 :无
//输出 :无
//功能描述:串口中断接收函数
//**********************************************************************
void UART1_RCV (void) interrupt 4
{
if(RI)
{
RI = 0;
RX0_Buffer[uart1_wr++] = SBUF;
//if(++uart0_wr >= BUF_LENTH) uart0_wr = 0;
flag = 1;
}
if(TI)
{
TI = 0;
B_TI = 1;
}
}
void delay_ms(unsigned char ms)
{
unsigned int i;
do{
i = MAIN_Fosc /1400;
while(--i);
}while(--ms);
}
振动传感器的c语言程序,单片机红外对射传感器实验详解 附程序源码相关推荐
- 微信小程序开发【前端+后端(Java)】附完整源码,拿来接私活简直不要太香
一.前言 现在微信小程序越来越火了,相信不少人都通过各种途径学习过微信小程序或者尝试开发,作者就是曾经由于兴趣了解开发过微信小程序,所以现在用这篇博客记录我之前开发的一些经验和一些心得吧. 二.主要内 ...
- 【C语言】练手游戏项目:天天酷跑1.0代码详解,包括源码,素材,第三方文件。
C语言手写天天酷跑代码详解 项目总览: 一.项目开发日志 二.引入库与宏编译 三.全局变量与结构体的定义 四.主函数中的内容 五.逐个自定义函数拆解分析 1.初始化init()函数 2.处理用户按键输 ...
- C语言二叉树总和等于k的所有路径的算法(附完整源码)
C语言二叉树总和等于k的所有路径的算法 C语言二叉树总和等于k的所有路径的算法完整源码(定义,实现,main函数测试) C语言二叉树总和等于k的所有路径的算法完整源码(定义,实现,main函数测试) ...
- C语言字符串中最后一个单词的长度的算法(附完整源码)
C语言字符串中最后一个单词的长度的算法 C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) ...
- C语言将向量中的所有0移至末尾(附完整源码)
C语言将向量中的所有0移至末尾 将向量中的所有0移至末尾 C语言将向量中的所有0移至末尾完整源码(定义,实现,main函数测试) 将向量中的所有0移至末尾 example: intout vec = ...
- C语言数组中找到第一个重复元素的算法(附完整源码)
C语言数组中找到第一个重复元素的算法 C语言数组中找到第一个重复元素的算法完整源码(定义,实现,main函数测试) C语言数组中找到第一个重复元素的算法完整源码(定义,实现,main函数测试) #in ...
- C语言判断是否为happy number快乐数字的算法(附完整源码)
C语言判断是否为happy number快乐数字的算法 C语言判断是否为happy number快乐数字的算法完整源码(定义,实现,main函数测试) C语言判断是否为happy number快乐数字 ...
- C语言从已排序的链表中删除重复项(附完整源码)
C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...
- C语言已排序链表插入新节点保持排序状态(附完整源码)
C语言已排序链表插入新节点保持排序状态 C语言已排序链表插入新节点保持排序状态完整源码(定义,实现,main函数测试) C语言已排序链表插入新节点保持排序状态完整源码(定义,实现,main函数测试) ...
最新文章
- iOS 10 SceneKit 新特性 – SceneKit 制作 3D 场景框架
- php运行代码运行退出为0,php – Selenium测试用例返回进程以退出代码0结束
- 115个Java面试题和答案——终极列表(下)
- 并发–执行程序和Spring集成
- java桥_java 泛型--桥方法
- 网页错误排查 如何?
- linux man 手册翻译,close (linux man) 翻译
- 报错:content type application/x-www-form-urlencoded;
- APP架构师必看:面对爆发流量如何进行架构调整
- 2016/2/24 1,dotctype有几种? 2,了解html的发展历史
- 深入浅出 Python Decorators
- fm核武破解 java出错_关闭Java时后台的FM无法恢复
- vmware linux虚拟机网络配置
- 元素周期表排列的规律_化学元素周期表的规律 元素周期表的规律
- JixiPix Romantic Photo for Mac(照片浪漫效果软件)
- 全景图转换为天空盒图
- 和外国bi相比,国产bi软件更适合中国企业
- 腾讯一面,发现自己就是个渣渣
- TQ2440与Ubuntu进行TFTP传输
- OVA转OVF部署到vsphere上
热门文章
- 五家共井 穷举法_经典算法题——五家共井
- 计算机动画制作专业软件,电脑动画制作我想学动画制作用什么样的软件比较好呢 爱问知识人...
- pyrosim2016 Windows10安装教程 以及无法打开的解决办法
- 上市首日市值超过福特汽车,Rivian能否成下一个“特斯拉”?
- 20220714 三相异步交流电动机基础学习
- adobe acrobat pro dc 无法打开PDF_Adobe acrobat好用吗?pdf编辑器到底哪个好用?
- 个人计算机培训校本研修总结,网络研修与校本研修整合培训总结范文
- 基于 Element-ui 的简单后台模板
- 电子元器件简介——三极管功放
- 分数计算器(C++课设)