📄 dcmotorspeed.txt
字号:
#include<16f877a.h>
#include<stdlib.h>
#include <string.h>
#include<ctype.h>
#use delay (clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,PUT,NOLVP
#define lcd 0x06
#define RS PIN_E0
#define E PIN_E1
#bit op1 = 0x07.0
#bit op2 = 0x07.1
#bit sw = 0x07.7
/* keypad */
#byte matkey=0x08
#define p PIN_D0 //row1
#define q PIN_D1 //row2
#define s PIN_D2 //row3
#define g PIN_D3 //row4
void speed();
void keyrelease();
void delay1();
void matrixkey();
void delayms(int);
void enableCommand();
void sendCommand(int);
void disableCommand();
unsigned char l=0,gs,gs1,gs2,gs3,gs4,psg1;
unsigned char dupnum;
int32 set;
unsigned int i,aa,gee=0;
unsigned long int gs5,q1;
int1 keypress,keyref;
unsigned char b[5],pas[5]={1,2,3,4};
char n,a,num,d,v,flag,R;
char disp[16] = {0x00,0x07,0x04,0x01,
0x4e,0x08,0x05,0x02,
0x00,0x09,0x06,0x03,
0x19,0x1F,0x20,0x23};
void cmd()
{
for(i=0;i<255;i++);
output_low(RS);
for(i=0;i<255;i++);
output_high(E);
for(i=0;i<255;i++);
output_low(E);
}
void dwr()
{
for(i=0;i<255;i++);
output_high(RS);
for(i=0;i<255;i++);
output_high(E);
for(i=0;i<255;i++);
output_low(E);
}
void LCDInit()
{
output_b(0x38);
cmd();
output_b(0x0e);
cmd();
output_b(0x01);
cmd();
output_b(0x84);
cmd();
}
void clear()
{
output_b(0x01);
cmd();
output_b(0x80);
cmd();
}
void display(unsigned char x)
{
output_b(x);
dwr();
}
void delayms(int n)
{
int i;
for(i=0;i<=n*1;i++);
}
int main (void)
{
unsigned char k,read_value,t1,t2,kt;
int i;
//top:
set_tris_b(0x00);
set_tris_e(0x00);
set_tris_a(0x00);
set_tris_d(0x0f);
set_tris_c(0x80);
LCDInit();
output_b(0x84);
cmd();
printf(display,"DC MOTOR");
output_b(0xc1);
cmd();
printf(display,"SPEED CONTROLL");
delay_ms(2000);
output_b(0x01);
cmd();
output_b(0x80);
cmd();
printf(display,"ENTER RPM :");
op1 = 0;
op2 = 0;
sw = 1;
gs = gs1 = gs2 = gs3 = gs4 = gs5 = 0;
k=0;
psg1 = 0;
read_value = 0;
t1 = 0;
t2 = 0;
kt=0;
while(1)
{
/*************************************************************************************/
if(!keypress)
{
set_tris_d(0x0f);
matrixkey();
}
else
{
keyrelease();
set=0;
}
/**************************************************************************************/
}
}
void matrixkey()
{
char m=0xef,b,i=0;
num=0;
do
{
output_b(0x0f);
matkey=m|0x0f;
set_tris_d(0x0f);
#asm
MOVF 0x08,w
MOVWF b
#endasm
b=b&0x0f;
i++;
if(b==0x0f)
{
m=m<<1;
num=num+4;
}
else
{
i=4;
v++;
switch(b)
{
case 0x0e :num=num+1; break;
case 0x0d :num=num+2; break;
case 0x0b :num=num+3; break;
case 0x07 :num=num+4; break;
}
if(v==1)
{
dupnum=num;
}
else
{
if((dupnum==num)&&(v==2))
keypress=1;
keyref=0;
v=0;
}
}
}while(i<4);
}
void keyrelease()
{
if((matkey&0x0f)==0x0f)
{
psg1++;
flag=0;
keyref=1;
keypress=0;
n=disp[num];
b[gee++]=n;
if(gee==4)
{
gee=0;
}
R = n + 0x30;
/*
output_b(0x8B+l);
cmd(); */
if(psg1==1)
{
output_b(0x8B);
cmd();
}
if(psg1==2)
{
output_b(0x8C);
cmd();
}
if(psg1==3)
{
output_b(0x8D);
cmd();
psg1=0;
}
l++;
display(R);
/***************************************************************************************************/
gs++;
if(gs==1)
{
gs1 = n;
delay_ms(500);
}
if(gs==2)
{
gs2 = n;
delay_ms(500);
}
if(gs==3)
{
gs3 = n;
delay_ms(500);
gs = 0;
gs4=1;
}
if(gs4==1)
{
gs5 = ((gs3)+(gs2*10)+(gs1*100));
if(gs5>=251)
{
output_b(0x01);
cmd();
output_b(0x80);
cmd();
gs4 = 0;
printf(display,"RE ENTERE RPM");
delay_ms(1000);
while(3);
}
if(gs5<=250)
{
output_b(0x01);
cmd();
output_b(0xc4);
cmd();
gs4 = 0;
printf(display,"RPM:%ld",gs5);
speed();
delay_ms(1000);
}
}
/****************************************************************************************************/
if(n==0x4e)
{
l=0;
output_b(0x01);
cmd();
output_b(0xc0);
cmd();
}
}
}
void speed()
{
while(2)
{
op1 = 1;
for(q1=0;q1<=gs5;q1++)
{
delay1();
}
op1 = 0;
for(q1=0;q1<=gs5;q1++)
{
delay1();
}
if(sw==0)
{
sw = 1;
op1 = 0;
op2 = 0;
output_b(0x01);
cmd();
output_b(0x80);
cmd();
printf(display,"ENTER RPM :");
delay_ms(2000);
break;
}
}
}
void delay1()
{
delay_us(300);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -