标题:
L298N风扇调速OLED显示占空比的单片机源程序
[打印本页]
作者:
q916151989
时间:
2017-8-13 11:05
标题:
L298N风扇调速OLED显示占空比的单片机源程序
新人报道 发个PWM风扇程序 OLED显示占空比 高手勿喷
0.png
(54.79 KB, 下载次数: 32)
下载附件
2017-8-14 01:06 上传
单片机源程序如下:
#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; //计数变量
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; //脉宽设置成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); //指针旋转
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黑下载附件…………
复制代码
所有资料51hei提供下载:
L298N调速OLED显示占空比.zip
(61.84 KB, 下载次数: 32)
2017-8-13 11:06 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
持勤补拙
时间:
2017-8-18 10:04
学习一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1