欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機+1602人機交互設置界面控制直流電機轉速,顯示不正確,請教黑友
[打印本頁]
作者:
萌新急救
時間:
2018-6-3 07:56
標題:
單片機+1602人機交互設置界面控制直流電機轉速,顯示不正確,請教黑友
① 通過獨立式鍵盤和1602液晶顯示器設計獨立的人機交互設置界面,可設定直流電機的轉速,直流電機按照設定的轉速轉動,建議4個按鍵的功能分別為“設置”用于進入設置界面、“→”用于調整光標位置、“↑”用于調整光標所在位置數值、“確定”用于保存設置值并返回主界面;
② 設定數據時,光標位置處的數字應閃爍顯示;
③ 可以定義一個“發送”鍵,按下后,直流電機按照設定參數轉動;
④ 直流電機轉動過程中,監控端可以獲取直流電機運行狀態,并通過LCD顯示;
⑤ 直流電機轉動過程中,可以修改目標轉速,修改后根據新的設定轉速控制電機轉動。
捕獲.PNG
(199.97 KB, 下載次數: 25)
下載附件
2018-6-3 07:55 上傳
單片機源程序:
#include<reg52.h>
#include <intrins.h>
sbit RS=P0^4;
sbit RW=P0^5;
sbit EN=P0^6;
sbit k1=P2^4;
sbit k2=P2^5;
sbit k3=P2^6;
sbit k4=P2^7;
sbit PWM=P0^0;
unsigned int zhua=150;
unsigned char table[3],table1[3];
unsigned char count;
unsigned int m=50;
unsigned char flag;
unsigned int zhuan,i;
unsigned int j;
void delay1(unsigned int z) //Ñóê±oˉêy
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void writecom(unsigned char com)
{
RS=0;
RW=0;
P1=com;
EN=1;
EN=0;
}
void writedata(unsigned char dat)
{
RS=1;RW=0;
P1=dat;
EN=1;
EN=0;
}
void init()
{ EN=0;
writecom(0x38);
delay1(5);
writecom(0x0c);
delay1(5);
writecom(0x01);
delay1(5);
}
void display_v() //êμ¼ê×aËù
{
table[0]=zhuan/100+0x30;
table[1]=zhuan%100/10+0x30;
table[2]=zhuan%10+0x30;
writecom(0xc0);
writedata(table[0]);
writecom(0xc0+1);
writedata(table[1]);
writecom(0xc0+2);
writedata(table[2]);
}
void dis() //é趨×aËù£¬table1[]Dèé趨3õÖμ
{
table1[0]=zhua/100+0x30;
table1[1]=zhua%100/10+0x30;
table1[2]=zhua%10+0x30;
writecom(0x80);
writedata(table1[0]);
writecom(0x80+1);
writedata(table1[1]);
writecom(0x80+2);
writedata(table1[2]);
}
void adjust_v()
{
zhua=(table1[0]-0x30)*100+(table1[1]-0x30)*10+(table1[2]-0x30);
}
void keyscan(unsigned char k )
{
if(k1==0) //進入設置
{delay1(10);if(k1==0){ k=1;}
if(k==1)
{
if(k2==0) //右移光標
{delay1(10);
if(k2==0)
{
i++;
writecom(0x80+i-1);
writecom(0x0f);
if(i>3){i=1;}
if (k3==0) //增加該位數值
{delay1(10);
if (k3==0)
{
switch(i)
{
case 1:
zhua=zhua+100;
break;
case 2:
zhua=zhua+10;
break;
case 3:
zhua++;
break;
if(zhua>200)zhua=0;
}
if (k4==0)
{k=0;adjust_v();dis();}
}}
}
}}
}}
void init2() //定時器初始化
{
TMOD=0x11;
EA=1;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
ET0=1;
TR0=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
}
void int1_init()
{
EX1=1;
IT1=1;
}
void time1() interrupt 1 using 1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
zhuan=count*20;
count=0;
display_v();
}
void service_int1() interrupt 0
{count++;}
void biaozhi()
{
if(zhuan>=zhua)flag=1;
if(zhuan<zhua)flag=0;
}
void pwm1() //m=50
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
j++;
{if(j<m)PWM=1;
else if(j>=m&&j<256) PWM=0;}
}
void tiaosu()
{
biaozhi();
if(flag==1)m--; //速度大于設定值
else m++; //速度小于設定值
}
void main()
{
init();
init2();int1_init();
pwm1();
while(1)
{ dis();
diaplay_v();
tiaosu();
keyscan();
}
}
復制代碼
作者:
萌新急救
時間:
2018-6-3 08:00
忘記說了,我的液晶顯示只有一個閃爍的0,大佬們可不可以幫我看看,第一次做也不太會
作者:
糖楓
時間:
2018-12-25 11:34
樓主你的問題解決了嗎,我們現在也在做好這個類似的,也遇到了問題
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1