久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
求助,兩個單片機定時器之間的沖突問題
[打印本頁]
作者:
zha
時間:
2017-5-2 20:56
標題:
求助,兩個單片機定時器之間的沖突問題
用一個光電傳感器計數,還有藍牙控制RGB燈的顏色,兩個代碼合在一起,
分開代碼都能用,合起來之后發現藍牙這部分呢收不到數據,自己覺得是兩個定時器之間存在沖突,
求教哪里出了問題!!!!
代碼如下 大神幫指點下
[code]
作者:
zha
時間:
2017-5-2 21:05
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#define LCD1602_DB P0
unsigned char tmp;
unsigned int c=0;
unsigned char flag1s = 0;
unsigned char flag2s = 0;
unsigned char counter = 0;//jishu
unsigned char str[] = "COUNT: ";
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;
sbit red = P2^0;
sbit LED = P2^2;
sbit red1 = P2^1;
sbit RR = P3^5;
sbit GG = P3^6;
sbit BB = P3^7;
int PWM_0 = 0;
int PWM_1 = 0;
int PWM_2 = 0;
void InitLcd1602();
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void itoa (unsigned int n,unsigned char s[5]);
void keepred();
void init(); //串口初始化
void send(unsigned char a); //單字節發送函數
void ctrl(); //接收處理函數
void color();
void keepPWM();
void delay (unsigned char t) //延時
{
unsigned char i;
while(t--)
{
for(i=0; i<114; i++);
}
}
void main()
{
unsigned int sec = 0, i=0, j = 0;
unsigned char s[5] ;
unsigned char x[6] = "none";
init();
red = 1;
red1 = 1;
TMOD = 0x01;
TL0 = 0xC9; //設置定時初值
TH0 = 0xFF;
TR0 = 1;
TR1 = 1;
EA = 1;
ET0 = 1;
InitLcd1602();
sec = 0;
itoa(sec, s);
LcdShowStr(8, 0, x);
while(1)
{
if(RI==1) // 是否有數據到來
{
LED = 0;
RI = 0;
tmp = SBUF;
ctrl();
delay(5); // 暫存接收到的數據
}
else
LED = 1;
keepPWM();
if(flag1s == 1 )
{
flag1s = 0;
sec++;
}
if(flag2s == 1 )
{
flag2s = 0;
if(sec > 0)
sec--;
}
if(sec<=0)
{
sec = 0;
//LED = 0;
LcdShowStr(8, 0, x);
}
else
{
itoa(sec, s);
memset(s, '\0', 5);
delay(50);
}
if(RI == 0)
{
//LED = 1;
PWM_0 = PWM_0;
PWM_1 = PWM_1;
PWM_2 = PWM_2;
delay(5);
}
}
}
void keepred()
{
}
void LcdWaitReady()
{
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do {
LCD1602_E = 1;
sta = LCD1602_DB;
LCD1602_E = 0;
}while(sta & 0x80);
}
void LcdWriteCmd(unsigned char cmd)
{
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
void LcdWriteDat(unsigned char dat)
{
LcdWaitReady();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
LCD1602_E = 0;
}
void LcdSetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if(y == 0)
addr = 0x00 + x;
else
addr = 0x40 + x;
LcdWriteCmd(addr | 0x80);
}
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
LcdSetCursor(x, y);
while(*str != '\0')
{
LcdWriteDat(*str++);
}
}
void InitLcd1602()
{
LcdWriteCmd(0x38);
LcdWriteCmd(0x0C);
LcdWriteCmd(0x06);
LcdWriteCmd(0x01);
}
void itoa (unsigned int n,unsigned char s[])
{
unsigned char temp;
unsigned int i = 0;
unsigned int len = 0;
while(n != 0)
{
s[i] = (n % 10) + '0' ;//算出字符
n = n / 10;
i++;
}
s[i] = '\0';
len = strlen(s);
for(i = 0; i < len / 2; i++) //前后換順序
{
temp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = temp;
}
LcdShowStr(1, 0, str);
LcdWriteCmd(0x01);
LcdShowStr(1, 0, str);
LcdShowStr(8, 0, s);
s[0] = '\0';
}
void keepPWM()//保持輸出
{
if(PWM_0 <=0)
PWM_0 =0;
if(PWM_1 <=0)
PWM_1 =0;
if(PWM_2 <=0)
PWM_2 =0;
if(PWM_0 >=255)
PWM_0 =255;
if(PWM_1 >=255)
PWM_1 =255;
if(PWM_2 >=255)
PWM_2 =255;
}
void init() //串口初始化
{
ES=0; //關中斷
SCON = 0x50; // REN=1允許串行接受狀態,串口工作模式1,
//10位UART(1位起始位,8位數據位,1位停止位,無奇偶校驗),波特率可變
TMOD = 0x20; // 定時器1工作于方式2,8位自動重載模式, 用于產生波特率
TH1=TL1=0xFD; // 波特率9600 (本次測試采用晶振為11.0592)
PCON &= 0x7f; // 波特率不倍增
TR1 = 1; //定時器1開始工作,產生波特率
//發送標志位置0
TI=0; //接收標志位置0
RI=0;
//EA=0;
ES=1;
}
/*void send(unsigned char a) //單字節數據發送
{
//注意:若單片機TXD(P3.1)無上拉能力,必須在P3.1端接上拉電阻。本次測試需要接上拉電阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2) //發送指示燈標志,每接收一次,此燈亮滅交替
led=1;
else
led=0;
c++;
}*/
void ctrl() //接收處理函數
{
switch(tmp)
{
case '1': //白
PWM_0 = 0;
PWM_1 = 0;
PWM_2 = 0;
//delay(3000);
//send(tmp);
break;
case '2':
PWM_0 = 255-128; //紫
PWM_1 = 255;
PWM_2 = 255-128;
//delay(3000);
// send(tmp);
break;
case '3':
PWM_0 = 255; //藍色
PWM_1 = 255;
PWM_2 = 0;
//delay(3000);
// send(tmp);
break;
case '4':
PWM_0 = 30; // 淺藍
PWM_1 = 100;
PWM_2 = 255;
//delay(3000);
// send(tmp);
break;
case '5':
PWM_0 = 255-33; // 灰
PWM_1 = 255-33;
PWM_2 = 255-33;
//delay(3000);
// send(tmp);
break;
case '6':
PWM_0 = 254; // 白
PWM_1 = 254;
PWM_2 = 254;
//delay(3000);
// send(tmp);
break;
case 'a':
PWM_0=PWM_0+5; // jiaqiang
PWM_1=PWM_1+5;
PWM_2=PWM_2+5;
break;
case 'b':
PWM_0=PWM_0-5; // jianruo
PWM_1=PWM_1-5;
PWM_2=PWM_2-5;
keepPWM();
break;
case 'c': //shanshuo
color();
break;
default: //其他,燈全滅
PWM_0 = 0; //hei
PWM_1 = 0;
PWM_2 = 0;
// send(tmp);
break;
}delay(5);
}
void color()
{
while(RI==0)
{
PWM_0 = rand()%255;
delay(2);
PWM_1 = rand()%255;
delay(2);
PWM_2 = rand()%255;
delay(2);
}
}
void InterruptTimer0() interrupt 1
{
TH0 = 0xFC; //重新加載初值
TL0 = 0x67;
if (red == 0&&red1==1)
{
delay(99);
if(red1==0)
flag1s = 1;
}
if (red1 == 0&&red == 1)
{
delay(99);
if(red == 0)
flag2s = 1;
}
counter++;
if(counter >= 255) counter = 0;
if(counter >= PWM_0) RR = 0; else RR = 1;
if(counter >= PWM_1) GG = 0; else GG = 1;
if(counter >= PWM_2) BB = 0; else BB = 1;
}
復制代碼
作者:
zha
時間:
2017-5-2 21:06
問題就在藍牙發送的數據接收不到
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久久亚洲精品
|
国产视频精品视频
|
欧美日韩在线一区二区
|
美女在线一区二区
|
91人人爽
|
亚州无限乱码
|
日韩欧美大片在线观看
|
精久久
|
国产一区二区在线看
|
亚洲视频一区在线
|
国产精品永久免费视频
|
日韩无
|
中文字幕在线免费
|
久久免费视频观看
|
中文字幕在线电影观看
|
在线日韩视频
|
九一视频在线观看
|
久久久美女
|
亚洲综合字幕
|
99免费看
|
国产一区二区在线免费观看
|
精品一区国产
|
在线一区
|
午夜影院操
|
精品久久久久国产
|
欧美一区二区在线播放
|
99re6在线视频精品免费
|
亚洲精品国产一区
|
欧美一区二不卡视频
|
欧美一区二区三区日韩
|
国产亚洲精品久久午夜玫瑰园
|
国产精品视频一二三区
|
中文字幕久久精品
|
亚洲国产精品久久
|
国产精品美女久久久久aⅴ国产馆
|
日韩在线不卡
|
欧美综合色
|
97视频在线观看网站
|
国产a一区二区
|
成人福利网站
|
在线视频一区二区三区
|