標(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.png
2.軟件部分設(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