標(biāo)題: 基于8255的LCD顯示頻率計(jì)設(shè)計(jì) [打印本頁]
作者: jiangyuwen 時(shí)間: 2017-2-24 14:25
標(biāo)題: 基于8255的LCD顯示頻率計(jì)設(shè)計(jì)
1.用P1或P3口,產(chǎn)生一方波信號,頻率為1000Hz,用LCD顯示頻率和周期。
2.將輸出信號輸入到另一端口作頻率計(jì)的信號輸入端,測量此方波信號的頻率、周期和脈寬,在另一LCD上將參數(shù)值顯示出來。
3.設(shè)置一功能鍵,能將當(dāng)前LCD上的信號值鎖定。
1.硬件部分電路設(shè)計(jì)
由于本次實(shí)驗(yàn)設(shè)計(jì)的是一個(gè)單片機(jī)的基于8255的LCD的頻率計(jì)實(shí)驗(yàn),通過使用定時(shí)器T0產(chǎn)生1s鐘的定時(shí),同時(shí)測量T1口輸入的方波的低電平的次數(shù),就可以得出所輸入信號的頻率,然后將測得的頻率由鎖存器連接到8255,再通過8255擴(kuò)展連接到LCD液晶顯示器。完整電路原理圖如下:file:///C:/Users/acer/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png2.軟件部分設(shè)計(jì)
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define PA XBYTE[0x007c]
#define PB XBYTE[0x007d]
#define COM XBYTE[0x007f]
uchar codetab1[]="F:";
uchar codetab2[]="C:";
uchardisp1[]="0000HZ";
uchardisp2[]="0.00ms";
sbit key1=P1^6;
sbit key2=P1^7;
uchar count,i;
uchar time;
unsigned long freq;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;
void delay(uchar z) //延時(shí)函數(shù)
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void write_com(uchar com) //寫命令
{
lcdrs=0;
PA=com;
delay(5);
lcden=1;
delay(2);
lcden=0;
}
void write_dat(uchar dat) //寫數(shù)據(jù)
{
lcdrs=1;
PA=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd() //lcd初始化
{
lcden=0;
// lcdrs=0;
lcdrw=0;
write_com(0x38);/****工作方式設(shè)置***/
write_com(0x0c);/****顯示狀態(tài)設(shè)置***/
write_com(0x06);/****輸入方式設(shè)置***/
write_com(0x01);/****清除屏幕顯示***/
write_com(0x80);
}
void display() //顯示函數(shù)
{
if(freq>0&&freq<10000)
{
disp1[0]=freq/1000+'0';
disp1[1]=freq/100%10+'0';
disp1[2]=freq/10%10+'0';
disp1[3]=freq/2%10+'0';
if(freq<1000)
{
disp2[0]=1000/freq+'0';
disp2[2]=10000/freq%10+'0';
disp2[3]=100000/freq%10+'0';
}
else
{
disp2[0]=1000/freq+'0';
disp2[2]=10000/freq+'0';
disp2[3]=100000/freq%10+'0';
}
write_com(0x82);
for(i=0;i<6;i++)
{
write_dat(disp1);
delay(2);
}
write_com(0x80+0x42);
for(i=0;i<6;i++)
{
write_dat(disp2);
delay(2);
}
}
}
void main()
{
COM=0x80;
init_lcd();
write_com(0x80);
for(i=0;i<2;i++)
{
write_dat(tab1);
delay(5);
}
write_com(0x80+0x40);
for(i=0;i<2;i++)
{
write_dat(tab2);
delay(5);
}
write_com(0x80+0x49);
TMOD=0x51; //T0定時(shí),T1計(jì)數(shù)
TH1=0;
TL1=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
TR1=TR0=1;
}
}
else
{
display();
}
}
}
void timer0() interrupt 1 //T0中斷,定時(shí)1s
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
TR1=0;TR0=0;
freq=(TH1*256+TL1);
// display();
TH1=0;TL1=0;
}
}
仿真測試
1.開始階段輸入第一組數(shù)據(jù):file:///C:/Users/acer/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png輸入第二組數(shù)據(jù):file:///C:/Users/acer/AppData/Local/Temp/msohtmlclip1/01/clip_image004.pngfile:///C:/Users/acer/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png
作者: 5555545245201 時(shí)間: 2018-2-26 16:06
請問 軟件的電路圖有嗎
作者: 求求你教教我吧 時(shí)間: 2018-2-27 19:34
樓主能教教我嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |