新人報道 發(fā)個PWM風扇程序 OLED顯示占空比 高手勿噴
單片機源程序如下:
- #include<reg51.h>
- #include "oled.h"
- #include "bmp.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit MOTOR_A_1=P2^2;
- sbit MOTOR_A_2=P2^3;
- sbit k1=P1^0; //速度+
- sbit k2=P1^1; //速度-
- sbit k3=P1^2; //停止
- uchar T=0; //定時標記
- uchar W=0; //脈寬值0~32
- uchar k=0; //按鍵標記
- uchar i=0; //計數(shù)變量
- uchar a,b;
- /*******************延時***************************/
- void delayMs(uint a)
- {
- uint i, j;
- for(i = a; i > 0; i--)
- for(j = 100; j > 0; j--);
- }
- /**********************************************************************
- 定時器變量定義
- **********************************************************************/
- void init(void)
- {
- //啟動中斷
- TMOD=0x01;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256; //0.5ms中斷一次
-
- EA=1;
- ET0=1;
- TR0=1;
- }
- void timer0() interrupt 1
- {
- //重置定時器時間
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- T++; //定時標記加1
- if(T==16)
- {
- T=0;
- }
-
- if(T>=W)
- MOTOR_A_1 =0;
- else
- MOTOR_A_1 =1;
- }
- /**********************************************************************
- 獨立按鍵檢測
- **********************************************************************/
- void key(void) //按鍵判斷程序
- {
- if(k1==0) //按鍵1按下
- {
- while(k1==0); //按鍵1抬起
- if(W==16) //如果脈寬為100
- W=0; //脈寬置0
- else
- W+=1; //否則加1
- }
- else if(k2==0) //按鍵2按下
- {
- while(k2==0); //按鍵2抬起
- if(W==0) //如果脈寬為0
- W=16; //脈寬設(shè)置成100
- else
- W-=1; //否則減1
- }
- else if(k3==0) //按鍵3按下
- {
- while(k3==0); //按鍵3抬起
- W=0; //脈寬清0
- }
- }
- void display1()
- {
- if(a == 0 && b == 0)
- {
- OLED_ShowString(0,2," ",16);
- OLED_ShowString(96,2," ",16);
- OLED_ShowString(0,4," ",16);
- OLED_ShowString(96,4," ",16);
- }
- else
- {
- OLED_ShowChar(0,2,' '+95,16); //指針旋轉(zhuǎn)
- OLED_ShowChar(8,2,' '+0,16);
- OLED_ShowChar(8,4,' '+0,16);
- OLED_ShowChar(0,4,' '+0,16);
- OLED_ShowChar(96,2,' '+95,16);
- OLED_ShowChar(104,2,' '+0,16);
- OLED_ShowChar(104,4,' '+0,16);
- OLED_ShowChar(96,4,' '+0,16);
- delayMs(100);
- OLED_ShowChar(0,2,' '+0,16);
- OLED_ShowChar(8,2,' '+15,16);
- OLED_ShowChar(8,4,' '+0,16);
- OLED_ShowChar(0,4,' '+0,16);
- OLED_ShowChar(96,2,' '+0,16);
- OLED_ShowChar(104,2,' '+15,16);
- OLED_ShowChar(104,4,' '+0,16);
- OLED_ShowChar(96,4,' '+0,16);
- delayMs(100);
- OLED_ShowChar(0,2,' '+0,16);
- OLED_ShowChar(8,2,' '+0,16);
- OLED_ShowChar(8,4,' '+95,16);
- OLED_ShowChar(0,4,' '+0,16);
- OLED_ShowChar(96,2,' '+0,16);
- OLED_ShowChar(104,2,' '+0,16);
- OLED_ShowChar(104,4,' '+95,16);
- OLED_ShowChar(96,4,' '+0,16);
- delayMs(100);
- OLED_ShowChar(0,2,' '+0,16);
- OLED_ShowChar(8,2,' '+0,16);
- OLED_ShowChar(8,4,' '+0,16);
- OLED_ShowChar(0,4,' '+15,16);
- OLED_ShowChar(96,2,' '+0,16);
- OLED_ShowChar(104,2,' '+0,16);
- OLED_ShowChar(104,4,' '+0,16);
- OLED_ShowChar(96,4,' '+15,16);
-
- // OLED_ShowString(0,2,"> ",16); //>符號跳動
- // OLED_ShowString(0,4,"> ",16);
- // OLED_ShowString(96,2," <",16);
- // OLED_ShowString(96,4," <",16);
- // delayMs(100);
- // OLED_ShowString(0,2," >",16);
- // OLED_ShowString(0,4," >",16);
- // OLED_ShowString(96,2,"< ",16);
- // OLED_ShowString(96,4,"< ",16);
- // delayMs(100);
- }
- }
- void display2()
- {
- if(W == 0)
- {
- OLED_ShowString(0,6," ",16);
- }
- else if(W == 1)
- {
- OLED_ShowString(0,6,"> ",16);
- }
- else if(W == 2)
- {
- OLED_ShowString(0,6,">> ",16);
- }
- else if(W == 3)
- {
- OLED_ShowString(0,6,">>> ",16);
- }
- else if(W == 4)
- {
- OLED_ShowString(0,6,">>>> ",16);
- }
- else if(W == 5)
- {
- OLED_ShowString(0,6,">>>>> ",16);
- }
- else if(W == 6)
- {
- OLED_ShowString(0,6,">>>>>> ",16);
- }
- else if(W == 7)
- {
- OLED_ShowString(0,6,">>>>>>> ",16);
- }
- else if(W == 8)
- {
- OLED_ShowString(0,6,">>>>>>>> ",16);
- }
- else if(W == 9)
- {
- OLED_ShowString(0,6,">>>>>>>>> ",16);
- }
- else if(W == 10)
- {
- OLED_ShowString(0,6,">>>>>>>>>> ",16);
- }
- else if(W == 11)
- {
- OLED_ShowString(0,6,">>>>>>>>>>> ",16);
- }
- else if(W == 12)
- {
- OLED_ShowString(0,6,">>>>>>>>>>>> ",16);
- }
- else if(W == 13)
- {
- OLED_ShowString(0,6,">>>>>>>>>>>>> ",16);
- }
- else if(W == 14)
- {
- OLED_ShowString(0,6,">>>>>>>>>>>>>> ",16);
- }
- else if(W == 15)
- {
- OLED_ShowString(0,6,">>>>>>>>>>>>>>> ",16);
- }
- else if(W == 16)
- {
- OLED_ShowString(0,6,">>>>>>>>>>>>>>>>",16);
- }
- }
- void main()
- {
-
- OLED_Init();
- OLED_Display_Off();
- OLED_Clear();
- OLED_Display_On();
- OLED_ShowCHinese(0,0,12);
- OLED_ShowCHinese(16,0,5);
- OLED_ShowCHinese(32,0,6);
- OLED_ShowCHinese(48,0,7);
- OLED_ShowCHinese(64,0,8);
- OLED_ShowCHinese(80,0,9);
- OLED_ShowCHinese(96,0,10);
- OLED_ShowCHinese(112,0,11);
- OLED_DrawBMP(4,2,124,8,BMP1);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
L298N調(diào)速OLED顯示占空比.zip
(61.84 KB, 下載次數(shù): 32)
2017-8-13 11:06 上傳
點擊文件名下載附件
|