|
|
{R[7ZYF[6Z7B2CL_IDK$[NB.png (12.13 KB, 下載次數(shù): 124)
下載附件
2017-6-13 13:16 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #define DATAOUT P0
- #define TH0_TL0 (65536-1000)//設(shè)定中斷的間隔時(shí)長(zhǎng)
- sbit Key_add=P1 ^ 0; //電機(jī)減速
- sbit Key_dec=P1 ^ 2; //電機(jī)加速
- sbit Key_turn=P1 ^ 1; //電機(jī)換向
- sbit PWM1=P2^6;//PWM 通道1,反轉(zhuǎn)脈沖
- sbit PWM2=P2^7;//PWM 通道2,正轉(zhuǎn)脈沖
- void LCD_write_char(unsigned char x,unsigned char y,char ch );
- sbit rs=P2^0;
- sbit rw=P2^1;
- sbit e=P2^2;
- void LCD_Writecmd(unsigned char cmd);
- void LCD_Writedata(unsigned char dat);
- void LCD_write_str(unsigned char x,unsigned char y,char str[]);
- void LCD_clear(void);
- void LCD_Init(void);
- void delay_us(unsigned char y);
- void delay_ms(unsigned char z);
- void Delay(unsigned char x);
- void Motor_speed_high(void);
- void Motor_speed_low(void);
- void Motor_turn(void);
- void Timer0_init(void);
- unsigned char count0 = 50;//低電平的占空比
- unsigned char Time_delay;
- unsigned char count1 = 0;//高電平的占空比
- bit Flag = 1;//電機(jī)正反轉(zhuǎn)標(biāo)志位,1正轉(zhuǎn),0反轉(zhuǎn)
- void Delay(unsigned char x)
- {
- Time_delay = x;
- while(Time_delay != 0);//等待中斷,可減少PWM輸出時(shí)間間隔
- }
- void Motor_speed_high(void)//
- {
- if(Key_add==0)
- {
-
- Delay(10);
- if(Key_add==0)
- {
-
- count0 += 10;
-
-
- if(count0 >= 100)
- {
-
- count0 = 100;
- }
- }
-
- while(!Key_add);//等待鍵松開(kāi)
- }
- }
- void Motor_speed_low(void)
- {
-
- if(Key_dec==0)
- {
-
- Delay(10);
- if(Key_dec==0)
- {
-
- count0 -= 10;
-
- if(count0 <= 0)
- {
-
- count0 = 0;
- }
- }
-
- while(!Key_dec );
- }
- }
- void Motor_turn(void)
- {
- if(Key_turn == 0)
- {
- Delay(10);
- if(Key_turn == 0)
- {
-
- Flag = ~Flag;
- }
- while(!Key_turn);
- }
- }
- void Timer0_init(void)
- {
- TMOD=0x01; //定時(shí)器0工作于方式1
- TH0=TH0_TL0/256;
- TL0=TH0_TL0%256;
- TR0=1;
- ET0=1;
- EA=1;
- }
- void Timer0_int(void) interrupt 1 using 1
- {
- TR0 = 0;//設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器
- TL0 = TH0_TL0 % 256;
-
- TH0 = TH0_TL0 / 256; //定時(shí)器裝初值
- TR0 = 1;
- if(Time_delay != 0)//延時(shí)函數(shù)用
- {
-
- Time_delay--;
- }
-
- if(Flag == 1)//電機(jī)正轉(zhuǎn)
- {
- PWM1 = 0;
-
- if(++count1 < count0)
- {
-
- PWM2 = 1;
- }
- else
- PWM2 = 0;
- if(count1 >= 100)
- {
- count1=0;
- }
- }
-
- else //電機(jī)反轉(zhuǎn)
- {
-
- PWM2 = 0;
-
- if(++count1 < count0)
- {
- PWM1 = 1;
- }
- else
- PWM1 = 0;
-
- if(count1 >= 100)
- {
-
- count1=0;
- }
- }
- }
- void delay_us(unsigned char j)/* 簡(jiǎn)易延時(shí)函數(shù) */
- {
- unsigned char k,i;
- for(k=j;j>0;j--)
- for(i=100;i>0;i--);
- }
- void delay_ms(unsigned char j) /* 簡(jiǎn)易延時(shí)函數(shù) */
- {
- unsigned char k,i;
- for(k=j;j>0;j--)
- for(i=256;i>0;i--);
- }
- void LCD_Writecmd(unsigned char cmd)//寫(xiě)指令到LCD1602
- {
- rs=0;
- delay_us(1);
- rw=0;
- delay_us(1);
-
- e=1;
- DATAOUT=cmd;
- delay_us(300);
- e=0;
- }
- void LCD_Writedata(unsigned char dat)//寫(xiě)數(shù)據(jù)到LCD1602
- {
- rs=1;
- delay_us(1);
- rw=0;
- delay_us(1);
- e=1;
- DATAOUT=dat;
- delay_us(300);
- e=0;
-
- }
- void LCD_write_char(unsigned char x,unsigned char y,char ch )//在指定位置顯示一個(gè)字符
- {
- if(y==0)
- LCD_Writecmd(0x80+x);
- else
- LCD_Writecmd(0xc0+x);
- LCD_Writedata(ch);
- }
- void LCD_write_str(unsigned char x,unsigned char y,char str[])//使LCD1602顯示一個(gè)字符串
- {
- unsigned char i=0;
- if(y==0)
- LCD_Writecmd(0x80+x);
- else
- LCD_Writecmd(0xc0+x);
- while(str[i]!='\0')
- {
- LCD_Writedata(str[i]);
- ++i;
- }
-
- }
- void LCD_clear(void)//清屏函數(shù)
- {
- LCD_Writecmd(0x01);
- delay_ms(5);
- }
- void LCD_Init(void)//LCD初始化
- {
- delay_ms(100);
- LCD_Writecmd(0x38);
- delay_ms(10);
- LCD_Writecmd(0x38);
- delay_ms(10);
- LCD_Writecmd(0x38);
- delay_ms(10);
- LCD_Writecmd(0x38);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
直流電機(jī).zip
(13.13 KB, 下載次數(shù): 217)
2017-6-13 13:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|