⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.c

📁 320*240液晶,Ra8803芯片控制程序,keil8.09编译.
💻 C
字号:
#include "E:\produce\ht271\c51\8803_bus\Demo.h"
//==============================================================================
//Subroutine:   Test Display/Inverse/Blink/Cursor
//Function:
//==============================================================================
data    unsigned char   OFFSET_SX;
data    unsigned char   OFFSET_SY;
data    unsigned int    OFFSET_NO;
data    unsigned int    OFFSET_AR;

void timer0(void) interrupt 1 using 1   /*5ms  interrupt*/
{
TH0  = 0xEE;       /*EE-(4608/256);*/
TL0  = 0x11;       /*11-(4608%256); frequency=11.05926*/
}
extern void lcd_pr(unsigned char *pr);
void Test_Touch(void)
{
    uchar temp, X1, X2, Y1, Y2;
    uint Timeout;

    ADC_On();
    LCD_GotoXY(0, 210);
    for(temp=0 ; temp<22 ; temp++)
    {   LCD_DataWrite(sRAiO5[temp]);
    }

    Timeout=0;
    while(1)
    {
        temp = ADC_Touch();
        if(temp==0x01)
        {
            Timeout=0;
            X1 = ADC_X();
            Y1 = ADC_Y();
            Delay_1ms(2);
            temp = ADC_Touch();
            if(temp==0x01)
            {
                X2 = ADC_X();
                Y2 = ADC_Y();
                Delay_1ms(2);

                LCD_GotoXY(0, 210);
                if((X1==X2) && (Y1==Y2))
                {
                    LCD_Bold();
                    for(temp=0 ; temp<11 ; temp++)
                    {   LCD_DataWrite(sRAiO7[temp]);
                    }
                    Delay_1ms(10);
                    LCD_GotoXY(13, 210);
                    Print_Hex(Y1);
                    LCD_GotoXY(21, 210);
                    Print_Hex(X1);
                    LCD_NoBold();
                }
            }
        }
        else
        {
            LCD_GotoXY(0, 210);
            for(temp=0 ; temp<11 ; temp++)
            {   LCD_DataWrite(sRAiO6[temp]);
            }
            Timeout++;
            if(Timeout==0x08FF) break;
        }
    }
}
/******************************************************************************/
/*Main program area                                                           */
/******************************************************************************/
void main(void)
{
data uchar i,state;
i=1;
  IP   = 0x02;       /* 优先级为定时器0,外部中断,串行口*/
    TH1  = 0xf4;
    TL1  = 0xf4;       /*4800*/
    SCON = 0xd0;       /*方式3*/
    PCON = 0x80;
    TH0  = 0xee;       /*-(4608/256);*/
    TL0  = 0x10;       /*-(4608%256); 晶振 11.05926*/
    TCON = 0x50;       /* 开时间T1 T0中断 无外部中断*/
    TMOD = 0x21;       /* T1为方式2的自动重装;T0为方式1的定时方式*/
    IE   = 0x82;       /* 串行口中断允许,ET1允许,INT1,ET0允许,INT0*/
//    AUXR = 0xff;  //Enable MOVX for external interface

   // LCD_Reset();
    LCD_Initial();
    i=LCD_CmdRead(LCCR);
    state = 0;
   // LCD_CmdWrite(LCCR, 0x14);Delay_1ms(200);

    Test_Font();
    LCD_Graphic();
    OFFSET_SX=5;    OFFSET_SY=60;    OFFSET_NO=2;
    lcd_pr("呆板");
    OFFSET_SX=10;    OFFSET_SY=60;    OFFSET_NO=2;
    lcd_pr("板");
    while(1)
    _nop_();

    while(i)
    {
        switch(state)
        {
            case 0:
                Test_Font();
                break;
            case 1:
                Test_Pattern();
                break;
            case 2:
                Test_Font();
                Test_Touch();
                break;

        }
        state++;
        if(state==3) state=0;
    }

    {
        uchar code st[]="大家可是SUN艰苦";
    LCD_Clear           ();         //清屏

    LCD_GotoXY(3,64);
    LCD_DataWrite(st[0]);    LCD_DataWrite(st[1]);
    LCD_DataWrite(st[2]);    LCD_DataWrite(st[3]);
    LCD_DataWrite(st[4]);    LCD_DataWrite(st[5]);
    LCD_DataWrite(st[6]);    LCD_DataWrite(st[7]);
    LCD_DataWrite(st[8]);    LCD_DataWrite(st[9]);
    LCD_DataWrite(st[10]);
    LCD_Bold();         //粗体字体
    LCD_NoBold          ();         //正常

    LCD_Inv             ();         //反白字体
    LCD_NoInv           ();         //正常

    LCD_GInv            ();         //整屏反白字体
    LCD_NoGInv          ();         //正常

    LCD_Blk             ();         //整屏闪烁字体
    LCD_NoBlk           ();         //正常
    LCD_CurBlk          ();         //光标闪烁
    LCD_NoCurBlk        ();         //光标不闪烁
    LCD_BlkTim          (8);        //闪烁时间

    LCD_Cur             ();         //光标显示
    LCD_NoCur           ();         //光标不显示
    LCD_CurHei          (2);        //设定光标高度
    LCD_LineDis         (2);        //设定行间距
    LCD_AlignOn         ();         //全角
    LCD_AlignOff        ();         //半角
    LCD_FontSize        (0x00);    //水平1,2,3,4   垂直1,2,3,4
    LCD_FontSize        (0x05);    //水平1,2,3,4   垂直1,2,3,4
    LCD_FontSize        (0x0a);    //水平1,2,3,4   垂直1,2,3,4
    LCD_FontSize        (0x0f);    //水平1,2,3,4   垂直1,2,3,4
    _nop_();
    }
}

/******************************************************************************/
/*Sub program area                                                            */
/******************************************************************************/

//==============================================================================
//Subroutine:   Test_Pattern
//Function:
//==============================================================================
void Test_Pattern(void)
{
    uchar x, y,a,b;
    uchar pat, temp1, temp2,k;

    LCD_ON();
    LCD_Graphic();
    LCD_CmdWrite(MAMR, 0xb2);
    for(pat=0; pat<10; pat++)
    {
        switch(pat)
        {
            case 0: temp1 = 0xff;  temp2 = 0xff;   break;
            case 1: temp1 = 0x00;  temp2 = 0xff;   break;
            case 2: temp1 = 0x55;  temp2 = 0xaa;   break;
            case 3: temp1 = 0xaa;  temp2 = 0x55;   break;
            case 4: temp1 = 0xcc;  temp2 = 0x33;   break;
            case 5: temp1 = 0x33;  temp2 = 0xcc;   break;
            case 6: temp1 = 0xF0;  temp2 = 0x0f;   break;
            case 7: temp1 = 0x0F;  temp2 = 0xF0;   break;
            case 8: temp1 = 0xff;  temp2 = 0x00;   break;
            case 9: temp1 = 0x00;  temp2 = 0x00;   break;
        }
        a=0;b=0;
        LCD_GotoXY(0, 0);
        LCD_GotoXY(a, b);
        for(y=0 ; y<cYSize ; y++)
        {

            for(x=0 ; x<cXSize/2 ; x++)
            {
                k=(y/8)%2;
                if(k==0) {LCD_DataWrite(temp1);LCD_DataWrite(temp2);}
                else     {LCD_DataWrite(temp2);LCD_DataWrite(temp1);}
            }
        }

        //Delay100ms(10);
    }
}


//==============================================================================
//Subroutine:   Test_Font, 8x18, 8x16m 16x16, Bold
//Function:
//==============================================================================
void Test_Font(void)
{
    uchar temp;

    LCD_ON();
    LCD_Clear();
    LCD_Text();
    LCD_AlignOff();

    LCD_GotoXY(0, 0);
    LCD_PrintStr(sRAiO1, cXSize);
    Delay_1ms(20);

    LCD_PrintStr(sRAiO2, cXSize);
    Delay_1ms(20);

    LCD_Inv();
    LCD_PrintStr(sRAiO3, cXSize);
    Delay_1ms(20);

    LCD_NoInv();
    LCD_GotoXY(10, 75);
    LCD_FontSize(0x05);
    for(temp=0 ; temp<11 ; temp++)
    {   LCD_DataWrite(sRAiO4[temp]);
        Delay_1ms(1);
    }
    Delay_1ms(20);

    LCD_FontSize(0x00);
    LCD_GotoXY(0, 120);
    for(temp=0x30 ; temp<=0x7F ; temp++)
    {   LCD_DataWrite(temp);
    }
    Delay_1ms(20);

    LCD_GotoXY(0, 160);
    LCD_Bold();
    for(temp=0x30 ; temp<=0x7F ; temp++)
    {   LCD_DataWrite(temp);
    }

    LCD_NoBold();
    Delay_1ms(250);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -