久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
求助,,關于單片機代碼的問題
[打印本頁]
作者:
zha
時間:
2017-5-2 12:28
標題:
求助,,關于單片機代碼的問題
寫了兩部分的代碼,一部分是led屏顯示數字的,另一部分是藍牙控制RBG的,單獨的可以用,為什么合在一起,藍牙那部分用不了了,求助
#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 = P2^3;
sbit GG = P2^4;
sbit BB = P2^5;
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";
red = 1;
red1 = 1;
TMOD = 0x01;
TL0 = 0xC9; //設置定時初值
TH0 = 0xFF;
TR0 = 1;
EA = 1;
ET0 = 1;
InitLcd1602();
sec = 0;
itoa(sec, s);
LcdShowStr(8, 0, x);
while(1)
{
if(RI==1) // 是否有數據到來
{
RI = 0;
tmp = SBUF;
ctrl();
delay(5); // 暫存接收到的數據
}
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
{
LED = 1;
itoa(sec, s);
memset(s, '\0', 5);
delay(50);
}
if(RI == 0)
{
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 19:02
大神在哪里
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人午夜免费视频
|
999久久久久久久
|
久久精品综合
|
中文一区
|
一级做a爰片久久毛片
|
精品欧美一区二区在线观看视频
|
蜜桃av一区二区三区
|
久久精彩视频
|
91视视频在线观看入口直接观看
|
国产精品成人品
|
久久综合久久久
|
日韩成人免费视频
|
国产一区高清
|
国产一级网站
|
久久国产精品无码网站
|
国产乱码精品1区2区3区
|
国产精品视频免费观看
|
日韩精品久久
|
国产精品爱久久久久久久
|
亚洲欧洲成人av每日更新
|
国产一区二区三区四区
|
久久网亚洲
|
精品国产乱码久久久久久闺蜜
|
亚洲在线一区二区三区
|
色毛片
|
av一区二区三区在线观看
|
国产一区中文
|
99精品一区二区
|
亚洲欧美日韩高清
|
热re99久久精品国产99热
|
国产精品久久九九
|
欧美久久久久久久久中文字幕
|
欧美午夜精品
|
国产精品久久久久aaaa樱花
|
亚洲欧美在线一区
|
免费一区二区三区
|
一区二区三区网站
|
国产在线观
|
中文字幕日韩一区
|
热re99久久精品国产99热
|
欧美久久久久久
|