欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
一個電機+藍牙+按鍵+PWM控制的小作品,大家看看可以給我什么建議
[打印本頁]
作者:
221
時間:
2017-6-3 20:12
標題:
一個電機+藍牙+按鍵+PWM控制的小作品,大家看看可以給我什么建議
無標題.png
(231.84 KB, 下載次數: 105)
下載附件
2017-6-3 20:12 上傳
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar ch,temp=0;
uchar news[]="gdmec--G1-717";
uchar speed[14]="Speed: r/s";
sbit K1=P1^1;//減速
sbit K2=P1^2;//加速
sbit K3=P1^3;//啟動
sbit K4=P1^4;//停止
sbit RS=P2^0; //指示命令、狀態或數據的引腳
sbit RW=P2^1; //讀寫引腳
sbit EN=P2^2; //使能引腳
sbit LED=P1^0;
sbit motor=P2^4;
uchar motornum=50;
bit stratflag;
//----------------------------------------------
void delay(uchar x)
{
while(x--);
}
void delay_ms(uchar x)
{
uchar i,y;
for(i=0;i<x;i++)
for(y=0;y<200;y++);
}
//----------------------------------------------
bit lcd1602_read_status()
{//讀取LCD1602的狀態,結果為0說明不忙,可以對LCD1602寫入數據或命令
uchar temp;
RW = 1; //RW=1為讀操作:單片機將LCD1602中的數據讀出來
delay(2);
RS = 0; //RS=0為讀寫命令或狀態,=1讀寫數據
delay(2);
EN = 1; //使能LCD1602
delay(2);
temp = P0;//將從LCD1602讀到的信息存入臨時變量temp中
delay(2);
EN = 0; //關LCD1602
delay(2);
return (bit)(temp&0x80);//返回讀到數據的最高位也即狀態位
}
//----------------------------------------------
void lcd1602_write_cmd(uchar cmd)
{//對LCD1602寫入命令的函數
while(lcd1602_read_status()!=0);
RW = 0;
delay(2);
RS = 0;
delay(2);
EN = 1;
delay(2);
P0 = cmd;
delay(2);
EN = 0;
delay(2);
}
//---------------------------------------------
void lcd1602_write_dat(uchar dat)
{//對LCD1602寫入數據的函數
while(lcd1602_read_status()!=0);
RW = 0;
delay(2);
RS = 1;
delay(2);
EN = 1;
delay(2);
P0 = dat;
delay(2);
EN = 0;
delay(2);
}
//---------------------------------------------
void lcd1602_init()
{
lcd1602_write_cmd(0x38);//設置LCD1602的數據位數
lcd1602_write_cmd(0x0c);//設置LCD1602的顯示開關和光標
lcd1602_write_cmd(0x01);//清屏,將光標置于第1行第1列
lcd1602_write_cmd(0x06);//設置光標移動的方式并確定整體顯示是否移動
delay(200); //仿真中這里的延時要足夠長,否則有可能出錯
}
void motor_init(uchar num)
{
motor=1;
delay_ms(num);
motor=0;
delay_ms(100-num);
}
/*串口初始化程序*/
void Uart_init()
{
PCON|=0X80;
TMOD=0X20;
SCON = 0x50; //8位數據,可變波特率
TL1 = 0xFA; //設定定時初值 0xFA為11.0592MHz的晶振頻率
TH1 = 0xFA; //設定定時初值 0xFD為12MHz的晶振頻率
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
EA=1;
ES=1;
}
uchar key_init()
{
if(stratflag)
{
if(K1==0)
{
delay_ms(2000);
if(K1==0)
{
delay_ms(2000);
motornum=motornum-5;
if((motornum<1)||(motornum>230))
motornum=1;
}
}
if(K2==0)
{
delay_ms(2000);
if(K2==0)
{
delay_ms(2000);
motornum=motornum+5;
if(motornum>=99)
motornum=99;
}
}
}
if(K3==0)
{
delay_ms(2000);
if(K3==0)
{
delay_ms(2000);
stratflag=1;
}
}
if(K4==0)
{
delay_ms(2000);
if(K4==0)
{
delay_ms(2000);
stratflag=0;
}
}
return motornum;
}
/*液晶顯示函數*/
void display()
{
uchar i;
speed[6]=temp/100+'0';
speed[7]=temp%100/10+'0';
speed[8]=temp%10+'0';
lcd1602_write_cmd(0x80+1);
for(i=0;i<14;i++)
{
lcd1602_write_dat(news[i]);
}
lcd1602_write_cmd(0xC0+1);
for(i=0;i<14;i++)
{
lcd1602_write_dat(speed[i]);
}
}
/*主函數*/
void main()
{
lcd1602_init();
Uart_init();
while(1)
{
key_init();
if(stratflag)
{
LED=0;
temp=key_init();
display();
motor_init(temp);
}
else
{
LED=1;
display();
motor=1;
}
}
}
/*串口外部中斷函數*/
void Uart_server() interrupt 4
{
if(RI==1)
{
ch=SBUF;
RI=0;
}
switch(ch)
{
case'a':
if(stratflag)
{
motornum=motornum-5;
if((motornum<1)||(motornum>230))
motornum=1;
};break;
case's':
if(stratflag)
{
motornum=motornum+5;
if(motornum>=99)
motornum=99;
};break;
case'd':stratflag=1;break;
case'f':stratflag=0;break;
temp=motornum;
}
}
復制代碼
作者:
lovesbboy
時間:
2017-12-12 14:18
大哥,有成品嗎
作者:
lovesbboy
時間:
2017-12-12 14:18
大哥,有成品嗎
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1