模仿http://bbs.mydigit.cn/read.php?tid=300653里面的手势控制,在ST188接收部分遇到了一些问题;不知道是原理错了,还是程序有问题??、
原帖的ST188原理图是这样的:
IMG_20121120_233954.jpg (148.03 KB, 下载次数: 1)
下载附件
接收
2012-11-21 10:55 上传
接收部分根本没什么电阻,,这样能行吗??
进行调试时,ST188顺利发出红外线,手机拍到了,可是当我进行打开串口,收到了的全是0X80,遮住传感器也无反应;也就是说ADC结果都是0x80;不解啊 ;贴上测试程序:
#include <STC12C2052AD.H>//单片机头文件
#include <intrins.h> //51基本运算(包括_nop_空函数)
/*********************************************************************************************
函数名:毫秒级CPU延时函数
备 注:22.1184M-1T
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 150; i++);
}
}
/*********************************************************************************************
函数名:UART串口初始化函数
备 注:振荡晶体为22.1184MHz,PC串口端设置 [ 4800,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
//EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
//ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0x3c; //定时器初值高8位设置
TL1 = 0xb0; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动
}
/*********************************************************************************************
函数名:UART串口发送函数
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定义串口发送数据变量
SBUF = UART_data; //将接收的数据发送回去
while(TI == 0); //检查发送中断标志位
TI = 0; //令发送中断标志位为0(软件清零)
}
/*********************************************************************************************
函数名:8位A/D转换初始化函数
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转换标志
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x02; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
DELAY_MS(1); //使输入电压达到稳定(1ms即可)
}
/*********************************************************************************************
函数名:8位A/D转换函数
/**********************************************************************************************/
unsigned char Read (void){
unsigned char AD_FIN=0; //存储A/D转换标志
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等待A/D转换结束
AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,
return (ADC_DATA); //返回A/D转换结果(8位)
}
/*********************************************************************************************
函数名:主函数
/**********************************************************************************************/
void main (void){
unsigned char R;
UART_init();//串口初始程序
Read_init(0);//ADC初始化
P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)
P1M1 = 0x00; //P1.7~.0:0000 0000(强推)
while(1){
P1=0x20; //0010 0000 P1^5 NPN基极,置高打开ST188发射端
R = Read ();
UART_T (R); //串口小秘书,将ADC读出值送入串口显示
}
}
望各位大虾指正
25号,我要上交项目了,有点紧,这个关系到我能不能去竞争选拔赛名额
一周热门 更多>