回覆列表
  • 1 # 使用者4367570282485

    這是我根據頻率計程式修的

    //用定時計數器1作為脈衝計數器(P3.5引腳正是輸入功能),定時器0作為定時器用,定時50ms產生中斷

    //中斷4次後(即0.2s)讀計數器1的資料

    #include

    #define uint unsigned int

    #define uchar unsigned char

    //定義以I/O口的功能

    sbit rs=P1^3;//液晶屏寫選擇,0命令 1資料

    sbit rw=P1^4;//液晶屏讀寫選擇

    sbit lcden=P1^5;//液晶屏使能

    #define db P2 //定義P2為資料輸出口,寫資料時用db代替P2,增加液晶屏程式的通用性

    //更改硬體接線時,只更改此處,而不必去更改液晶屏讀寫子程式

    uchar aa;//計中斷次數

    uint bb,cc,dd;//儲存計數器的值

    void Delay1ms(unsigned int i) //1ms延時程式

    {

    unsigned int j;

    for(;i>0;i--)

    {

    for(j=0;j

    {;}

    }

    }

    void init()//初始化設定

    {

    TMOD=0x51;//定時器1作為計數器,定時器0作為定時器用

    TH1=0;//計數器清0

    TL1=0;

    EA=1;//開總中斷

    ET0=1;//允許定時器0中斷

    TH0=0x4c;

    TL0=0x5c;

    TR1=1;//啟動計數器

    TR0=1;//啟動定時器

    aa=0;

    }

    void write_com(uchar com)//向液晶屏寫命令

    {

    db=com;

    rs=0;

    rw = 0;

    lcden=0;

    Delay1ms(10*12);

    lcden=1;

    Delay1ms(10*12);

    lcden=0;

    }

    void write_date(uchar date)//向液晶屏寫資料

    {

    db=date;

    rs=1;

    rw = 0;

    lcden=0;

    Delay1ms(10*12);

    lcden=1;

    Delay1ms(10*12);

    lcden=0;

    }

    void init2()//液晶屏初始化

    {

    rw=0;

    write_com(0x38);//顯示模式16字*2行,5*7點陣,資料口8位

    Delay1ms(10*12);

    write_com(0x0f);//開顯示,顯示游標,游標閃爍

    Delay1ms(10*12);

    write_com(0x06);//寫完資料後資料指標和游標位置自動加1

    Delay1ms(10*12);

    write_com(0x01);//螢幕清除

    Delay1ms(10*12);

    }

    void display4(unsigned int number) //單行多位顯示程式

    {

    uchar A1,A2,A3,A4,A5;

    init2();//液晶屏初始化

    A1=number/10000%10;//分離出十萬,萬,千,百,十,個

    A2=number/1000%10;

    A3=number/100%10;

    A4=number/10%10;

    A5=number%10;

    write_com(0x80);//第1個數據的位置設定,第1行第1列

    Delay1ms(10);

    write_date(0x30+A1);//寫資料

    Delay1ms(10);

    write_date(0x30+A2);

    Delay1ms(10);

    write_date(0x30+A3);

    Delay1ms(10);

    write_date(0x30+A4);

    Delay1ms(10);

    write_date(0x30+A5);

    Delay1ms(10);

    }

    void main()//主程式很簡單

    {

    init();//初始化

    while(1)//迴圈程式

    {

    dd=bb*256+cc;//0.2S的計數值

    display4(dd);//顯示

    Delay1ms(100); //延時

    }

    }

    void timer0()interrupt 1//注意:定時器0的中斷序號為1

    {

    aa++;

    TH0=0x4c;

    TL0=0x5c;

    if(aa==4)//中斷4次,共0.2S

    {

    TR1=0;//暫停計數

    aa=0;

    bb=TH1;//讀出計數器資料

    cc=TL1;

    TL1=0;//計數器清0

    TH1=0;

    TR1=1;//重新啟動計數器

    }

    }

  • 中秋節和大豐收的關聯?
  • 《水滸傳》中宋江為何要詔安,他是為自己還是為梁山兄弟呢?