|
哪位大佬可以把里面的正反轉(zhuǎn)改為只有正轉(zhuǎn)啊
單片機(jī)源程序如下:- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- void displaym();
- void displayj();
- sbit en=P2^5; //1602 6管腳
- sbit rs=P2^7; //1602端口 4管腳
- sbit rw=P2^6;//lcd1602控制端口 5管腳
- sbit num1=P1^0; //占空比加1
- sbit num2=P1^1; //占空比減一
- sbit num3=P1^2; //正傳
- sbit num4=P1^3; //反轉(zhuǎn)
- sbit num5=P1^4; //開始停止切換
- sbit beep=P2^4;
- sbit out=P3^4; //PWM輸出用于正傳
- sbit out1=P3^7; //PWM輸出用于反轉(zhuǎn)
- uint zhuansu,flag,z1,z2,m,flag_1,zheng,fan,kai,j,su,qian,bai,shi,ge;
- void delay(uint z)//延時(shí)1ms函數(shù)
- {
- uint x,y;
- for(x=0;x<z;x++)
- for(y=0;y<110;y++);
- }
- void write_com(uchar com)//向1602寫一字節(jié)(控制指令)
- {
- rs=0;
- P0=com;
- delay(5);
- en=1;
- delay(10);
- en=0;
- }
- void write_data(uchar date)//向1602寫一字節(jié)(數(shù)據(jù))
- {
- rs=1;
- P0=date;
- delay(5);
- en=1;
- delay(5);
- en=0;
- }
- void init()//初始化函數(shù)
- {
- en=0;
- rw=0;
- write_com(0x38); //5X7顯示
- write_com(0x0c); //關(guān)閉光標(biāo)
- write_com(0x01); //lcd初始化
- TMOD=0x11; //定時(shí)器方式1
- TH0=0xdc;
- TL0=0x00; //定時(shí)器裝入初值
- EA=1; //開總中斷
- ET0=1; //定時(shí)器0開中斷
- TR0=1;
- EX1=1;
- IT1=1; //定時(shí)器啟動(dòng)
- TH1=0xfc;
- TL1=0x66;//定時(shí)100us
- ET1=1; //定時(shí)器1開中斷
- TR1=1;
- write_com(0x80);
- write_data('V');
- write_data(':');
- write_com(0x87); //第一行顯示轉(zhuǎn)速
- write_data('m');
- write_data('/');
- write_data('m');
- write_data('i');
- write_data('n');
- write_com(0xc0);
- write_data('z');
- write_data('k');
- write_data('b');
- write_data(':');
- displaym();
- write_com(0xc8);
- write_data('s');
- write_data('d');
- write_data(':');
- displayj();
- }
-
- void keyscan() //鍵盤掃描函數(shù)
- {
- if(num1==0)
- {
- delay(5); //消除抖動(dòng)
- if(num1==0)
- {
- if(m<=199)
- m++;
- displaym(); //設(shè)定占空比加一
- }
- }
- if(num2==0)
- {
- delay(5);
- if(num2==0)
- {
- if(m>=1)
- m--;
- displaym(); //設(shè)定占空比減一
-
- }
- }
- if(num3==0)
- {
- delay(5);
- if(num3==0)
- {
- j=j+1;
- displayj();
- }
-
- }
- if(num4==0)
- {
- delay(5);
- if(num4==0)
- {
- j=j-1;
- displayj();
-
- }
- }
- if(num5==0)
- {
- delay(5);
- if(num5==0)
- {
- while(num5==0) ;
- kai=1-kai;
-
- }
- }
-
- }
- void display()
- {
- write_com(0x82);
- zhuansu=zhuansu*30; //將兩秒內(nèi)的計(jì)數(shù)乘以30得到轉(zhuǎn)每分
-
- su=zhuansu*0.01*2*3.14/2;
- qian=(su/1000)%100;
- write_data(qian+0x30);
- bai=(su/100)%10;
- write_data(bai+0x30);
- shi=(su/10)%10;
- write_data(shi+0x30);
- write_data('.');
- ge=su%10;
- write_data(ge+0x30);
- write_com(0xd0);
- }
- void displaym()
- {
- write_com(0xc4);
- if(m/200%10!=0)
- write_data(m/200%10+0x30); //如果占空比百位不為0則顯示百位否則顯示空格
- else
- write_data(' ');
-
- if(m/200%10==0&&m/20%10==0)
- write_data(' ');
- else
- write_data(m/20%10+0x30); //如果占空比小于10 十位正常顯示 否則顯示空格
-
- write_data(m/2%10+0x30); //顯示個(gè)位
- }
- void displayj()
- {
- write_com(0xcb);
- if(j/100%10!=0)
- write_data(m/100%10+0x30);
- else
- write_data(' ');
-
- if(j/100%10==0&&j/10%10==0)
- write_data(' ');
- else
- write_data(j/10%10+0x30);
-
- write_data(j/1%10+0x30);
- write_com(0xd0);
- }
- void main()
- {
- flag_1=0;
- m=100; //占空比為100
- zhuansu=0; //轉(zhuǎn)速初值0
- flag=0;
- zheng=1; //初始化電機(jī)正轉(zhuǎn)動(dòng)
- fan=0;
- j=67;
- init(); //初始化
- while(1)
- {
- keyscan(); //鍵盤掃描程序
- if(su>j*10)
- {
- kai=0;
- beep=~beep;
- delay(500);
- kai=1;
- m-50;
- }
-
-
- }
- }
- void int1()interrupt 2 //外部中斷1脈沖技術(shù)記錄電機(jī)的轉(zhuǎn)速 電機(jī)轉(zhuǎn)一圈zhuansu加一
- {
- zhuansu++;
- }
- void int2()interrupt 1 //定時(shí)器0顯示轉(zhuǎn)速
- {
-
- TH0=0xdc;
- TL0=0x00;//定時(shí)10ms
- flag++;
-
- if(flag==200) //計(jì)時(shí)到達(dá)2s
- {
- display(); //顯示轉(zhuǎn)速
- zhuansu=0; //轉(zhuǎn)速置0
- flag=0;
- }
- }
- void int3()interrupt 3 //產(chǎn)生PWM
- {
-
- TH1=0xff;
- TL1=0x00;//定時(shí)100us
-
- flag_1++;
- if(flag_1>199)
- flag_1=1;
- if(kai==1) //如果kai==1電機(jī)啟動(dòng)
- {
- if(zheng==1) //電機(jī)正轉(zhuǎn)
- {
- if(flag_1<m) //小于占空比m輸出PWM=0輸出電壓為1
- {out=0;
- out1=1;}
- else
- {
- out=1;
- out1=1;
- }
- }
- if(fan==1) //電機(jī)反轉(zhuǎn)
- {
- if(flag_1<m) //小于占空比m輸出PWM=0輸出電壓為1
- {
- out=1;
- out1=0;
- }
- else //大于m輸出PWM=1輸出電壓為0
- {
- out=1;
- out1=1;
- }
- }
- }
- if(kai==0) //kai=0電機(jī)停止轉(zhuǎn)動(dòng)
- {
- out=1;
- out1=1;
-
- }
-
-
- }
復(fù)制代碼
|
-
-
仿真程序.7z
2024-3-3 22:47 上傳
點(diǎn)擊文件名下載附件
216.69 KB, 下載次數(shù): 4
|