本帖最后由 sunmebaby 于 2021-8-4 21:55 編輯
要實現的功能是通過按鍵和藍牙兩種方式實現對風扇的調速,按鍵部分的程序調試過沒有問題,但是藍牙部分的程序不管怎么調試都沒有反應,串口助手上也可以接收到數據,但是數碼管和風扇都沒有反應,實在找不出來是什么問題,希望大神指點
51hei圖片20210804181512.png (83 KB, 下載次數: 44)
下載附件
2021-8-4 18:15 上傳
單片機源程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar time; //計時
char Data;
char count = 0; //占空比
uchar code smgduan[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};// 0-9段碼
sbit PWM = P1^0; //PWM通道
sbit key_speed_up = P3^1; //按鍵加檔
sbit key_speed_down =P3^0;//按鍵減檔
sbit smgwei1 = P2^2;
sbit smgwei2 = P2^3;
sbit smgwei3 = P2^4;
/*
void Motor_speed();//函數聲明
void timer0_init();
void UsarInit
void delay_ms();
void Motor_up();
void Motor_down();
void display();
*/
void delay_ms(uint z)//延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void display() //顯示當前占空比
{
P0=smgduan[count/100];smgwei1=1; smgwei2=1;smgwei3=1;delay_ms(1);P0=0X00;
P0=smgduan[count/10%10];smgwei1=0; smgwei2=1;smgwei3=1;delay_ms(1);P0=0X00;
P0=smgduan[count%10];smgwei1=1; smgwei2=0;smgwei3=1;delay_ms(1);P0=0X00;
}
void Motor_up() //加檔函數
{
if(key_speed_up==0)
{
delay_ms(2);
if(key_speed_up==0)
{
count += 25;
if(count > 100)
{
count = 0;
}
}
while(!key_speed_up);
}
}
void Motor_down() //減檔函數
{
if(key_speed_down==0)
{
delay_ms(2);
if(key_speed_down==0)
{
count -= 25;
if(count <0)
{
count = 0;
}
}
while(!key_speed_down);
}
}
void timer0_init() //定時器0初始化
{
TMOD = 0x01;
TH0 = 0xff;
TL0 = 0xf7;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void UsarInit() //串口初始化
{
TMOD = 0x20; //設置計數器工作方式2
SM0 = 0; //設置串口工作方式1
SM1 = 1;
REN = 1; //允許串口接收
TH1 = 0xfd; //設置波特率9600
TL1 = 0xfd;
TR1 = 1; //啟動定時器1
ES = 1; //開串口中斷
EA = 1; //開總中斷
}
void timer0_int() interrupt 1 //定時器0中斷處理函數
{
TR0 = 0;
TH0 = 0xff;
TL0 = 0xf7;
TR0 = 1;
PWM = 0;
time++;
if(time<=count) PWM = 1;
else PWM = 0;
if(time>100) time = 0;
}
void Usart() interrupt 4 //串口通信中斷處理函數
{
Data = SBUF;
RI = 0;
while(1)
{
switch(Data)
{case 'a':count = 0; break;
case 'b':count = 25;break;
case 'c':count = 50;break;
case 'd':count = 75;break;
case 'e':count =100;break;}
}
//while(!TI);
//TI = 0;
}
void main() //主函數
{
timer0_init();
UsarInit();
while(1)
{
display();
Motor_up();
Motor_down();
}
}
|