|
基于51單片機(jī)的藍(lán)牙串口控制電路原理圖
0.png (87.23 KB, 下載次數(shù): 214)
下載附件
2016-6-3 13:43 上傳
全部資料下載:
藍(lán)牙串口控制電路.zip
(15.8 MB, 下載次數(shù): 40)
2016-5-30 23:36 上傳
點(diǎn)擊文件名下載附件
藍(lán)牙串口控制電路 下載積分: 黑幣 -5
三按鍵模式控制程序:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- int Time[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰極數(shù)碼管0~9段碼
- int hour_shi=2,hour_ge=0,min_shi=1,min_ge=6;
- int NLh_shi=0,NLh_ge=0,NLm_shi=0,NLm_ge=0;
- int star_flag=1;
- int kk=4600; //一秒鐘是75,一分鐘是4500(用一個LED燈來做狀態(tài)指示),但是還是有點(diǎn)誤差
- char sbuf_in;
- sbit jdq=P1^0;
- sbit jdq1=P1^1;
- sbit jdq2=P1^2;
- sbit jdq3=P1^3;
- sbit fmq=P1^4;
- sbit button4=P2^7;
- sbit button3=P2^6;
- sbit button2=P2^5;
- sbit button1=P2^4;
- void delay(uchar i)
- {
- uchar j;
- while(i--)
- for(j=0;j<120;j++);
- }
- void BT_Uart_inti() //單片機(jī)串口初始化
- {
- //SCON=0X50; //串口工作方式1,允許串口接收
- SM0=0;
- SM1=1;
- REN=1;
- //RI=1; //接收標(biāo)志位,0:正在接收 1:接收完畢 (如果RI=1就一直執(zhí)行串口中斷)
- TMOD=0X20; //定時器T1工作方式2
- TH1=0XFD; //9600bit/s下的定時器初值
- TL1=0XFD;
- TR1=1; //啟動定時器T1
- EA=1; //開總中斷
- ES=1; //開串行口中斷
- }
- void smg_init() //數(shù)碼管初始化
- {
- uint n;
- for(n=0;n<4;n++)
- {
- P2=(0XFE<<n);
- P0=0X49;
- delay(500);
- P0=0X3F;
- delay(500);
- }
- fmq=0; //關(guān)閉蜂鳴器
- }
- /*void Send_char(uchar dat) //發(fā)送端
- {
- SBUF=dat; //將字符送入發(fā)送寄存器
- while(!TI); //T1為發(fā)送狀態(tài)標(biāo)志位,0:發(fā)送中 1:發(fā)送結(jié)束
- TI=0; //手動清零標(biāo)志位
- }*/
- void Smg_display()
- {
- P2=0XFE;
- P0=Time[hour_shi];
- delay(3);
- P2=0XFD;
- P0=Time[hour_ge];
- delay(3); //若延時大于此數(shù)值,則數(shù)碼管閃爍明顯
- P2=0XFB;
- P0=Time[min_shi];
- delay(3);
- P2=0XF7;
- P0=Time[min_ge];
- delay(3); //若延時大于此數(shù)值,則數(shù)碼管閃爍明顯
- }
- void Time_off()
- {
- uint k;
- for(k=0;k<20;k++) //不知為何只循環(huán)一半次數(shù)
- {
- Smg_display(); //如果不調(diào)用顯示函數(shù)則無法正常顯示數(shù)值
- jdq=~jdq;
- jdq1=~jdq1;
- jdq2=~jdq2;
- jdq3=~jdq3;
- fmq=~fmq;
- delay(33);
- Smg_display();
- delay(33);
- }
- }
- void Smg_display2()
- {
- P2=0XFE;
- P0=Time[NLh_shi];
- delay(3);
- P2=0XFD;
- P0=Time[NLh_ge];
- delay(3); //若延時大于此數(shù)值,則數(shù)碼管閃爍明顯
- P2=0XFB;
- P0=Time[NLm_shi];
- delay(3);
- P2=0XF7;
- P0=Time[NLm_ge];
- delay(3); //若延時大于此數(shù)值,則數(shù)碼管閃爍明顯
- }
- void Button4()
- {
- if(button1==0)
- {
- delay(15);
- if(button1==0)
- {
- star_flag++;
- if(star_flag>3)
- star_flag=1;
- }
- }
- if(star_flag==1) //啟動時鐘
- {
- jdq=0;jdq1=1;jdq2=1;jdq3=0; //用LED來做狀態(tài)顯示,靠邊的兩盞燈常亮表示正在工作
- Smg_display(); //調(diào)用數(shù)碼管顯示函數(shù)
- kk--;
- if(kk<0)
- {
- kk=4600;
- min_ge++;
- if(min_ge>9)
- {
- min_ge=0;
- min_shi++;
- if(min_shi>5)
- {
- min_shi=0;
- hour_ge++;
- if(hour_shi==2&&hour_ge>3)
- {
- hour_shi=0; hour_ge=0;
- min_shi=0; min_ge=0;
- }
- if(hour_ge>9)
- {
- hour_ge=0;
- hour_shi++;
- }
- }
- }
- }
- }
- if(star_flag==2) //暫停時鐘(用來校準(zhǔn)時間)
- {
- jdq=0;jdq1=0;jdq2=0;jdq3=0; //四盞燈全亮表示進(jìn)入暫停狀態(tài)
- Smg_display(); //調(diào)用數(shù)碼管顯示函數(shù)
- if(button2==0) //時位自增
- {
- delay(88);
- if(button2==0)
- {
- hour_ge++;
- if(hour_shi==2&&hour_ge>3)
- {
- hour_shi=0;
- hour_ge=0;
- }
- if(hour_ge>9)
- {
- hour_ge=0;
- hour_shi++;
- }
- }
- }
- if(button3==0) //分位自減
- {
- delay(88);
- if(button3==0)
- {
- min_ge--;
- if(min_ge<0)
- {
- min_ge=9;
- min_shi--;
- if(min_shi<0)
- min_shi=5;
- }
- }
- }
- }
- if(button4==0)
- {
- delay(88);
- if(button4==0)
- star_flag=3;
- }
- if(star_flag==3) //設(shè)置鬧鈴時間
- {
- jdq=1,jdq1=1;jdq2=1;jdq3=1; //四盞燈全滅表示進(jìn)入設(shè)置鬧鈴狀態(tài)
- Smg_display2();
- if(button2==0) //時位自增
- {
- delay(88);
- if(button2==0)
- {
- NLh_ge++;
- if(NLh_shi==2&&NLh_ge>3)
- {
- NLh_shi=0;
- NLh_ge=0;
- }
- if(NLh_ge>9)
- {
- NLh_ge=0;
- NLh_shi++;
- }
- }
- }
- }
- if(button3==0) //分位自減
- {
- delay(88);
- if(button3==0)
- {
- NLm_ge--;
- if(NLm_ge<0)
- {
- NLm_ge=9;
- NLm_shi--;
- if(NLm_shi<0)
- NLm_shi=5;
- }
- }
- }
- }
- /*void Add_Sub(void)
- {
- smg_ge--;
- if(smg_ge<0)
- {smg_shi--;smg_ge=9;}
- if(smg_shi<0)
- {smg_shi=9;smg_ge=9;}
- }*/
- void main()
- {
- BT_Uart_inti();
- Time_off();
- smg_init();
- while(1)
- {
- Button4();
- if(hour_shi==NLh_shi&&hour_ge==NLh_ge&&min_shi==NLm_shi&&min_ge==NLm_ge)
- Time_off();
- }
- }
- void BT_serial_smg() interrupt 4 //中斷編號4為串行口中斷
- {
- //Smg_display();
- if(RI) //接收標(biāo)志位,0:正在接收 1:接收完畢 (如果RI=1就一直執(zhí)行中斷)
- {//Smg_display();k--;if(k==0){Add_Sub();k=66;}
- RI=0; //同樣需要手動清零
- sbuf_in=SBUF; //將接收緩沖器接收的字符送入變量中
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|