51hei截圖20200628102410.png (21.64 KB, 下載次數(shù): 33)
下載附件
原理圖
2020-6-28 10:24 上傳
原理圖如上。用51拓展一塊8255后將lcd連接在8255上。將數(shù)據(jù)傳到8255的PA口讓lcd顯示,但是數(shù)據(jù)少了兩位,設(shè)置值應(yīng)該是3000轉(zhuǎn)每分鐘,下面也少了一位。求大神解惑。
單片機源程序
#include <REGX51.H>
#include <ABSACC.h>
#define SET8255 XBYTE[0x8ff3]
#define PA XBYTE[0x8ff0]
#define PB XBYTE[0x8ff1]
uchar aa[]={'S','e','t','u','p',':',' ',' ',' ',' ',' ','r','/','m','i','n'}; //目標轉(zhuǎn)速。 r/min
uchar cc[]={' ',' ',' ',' ',' ',' ',' ',' ','r','/','m','i','n',' ',' ',' '}; //實測轉(zhuǎn)速: r/min
void write_com(unsigned char com) //寫命令
{
SET8255=0x80;//設(shè)置8255
PB=0xf8;//rs=0 rw=0
PA=com;
DelayMs(10);//en=1
PB=0xf9;
DelayMs(10);//en=0
PB=0xf8;
}
void write_data(unsigned char date) //寫一個字符
{
SET8255=0x80;
PB=0xfc;
PA=date;
DelayMs(10);
PB=0xfd;
DelayMs(10);
PB=0xfc;
}
void init() //初始化
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*------------------------------------------------
寫入字符串函數(shù)
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
write_com(0x80 + x);
}
else
{
write_com(0xC0 + x);
}
while (*s)
{
write_data( *s);
s ++;
}
}
void SetSpeed()
{
if(AddSpeed==0)
{
delay(200);
if(AddSpeed==0)
{
SpeedSet+=10;
if(SpeedSet>3500)
{
SpeedSet=3500;
}
}
}
if(SubSpeed==0)
{
delay(200);
if(SubSpeed==0)
{
SpeedSet-=10;
if(SpeedSet<0) SpeedSet=0;
}
}
aa[7]=SpeedSet/1000+'0';
aa[8]=SpeedSet/100%10+'0';
aa[9]=SpeedSet/10%10+'0';
aa[10]=SpeedSet%10+'0';
LCD_Write_String(0,0,aa);
}
|