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

📄 新建 文本文档.txt

📁 这是一个关与LCD在嵌入式系统中应用的实例和程序
💻 TXT
字号:
///////////////////////////////////////////////////////
main.c
#include "p.h"
unsigned char code bmp1[]={                  //
//********************************************************//      //
//***** 转换的文件:E:\!Program\!BmpSample\12832_12232.bmp          //
//***** 源图形宽度 * 高度:128 * 32                //
//***** 调整后宽度 * 高度:128 * 32                //
//***** 字模格式:横向取模,冗余模式,字节正序,正色取模,           //
//***** 点阵转换时间:2005/03/15   13:37:14              // /
//***** 位图点阵占用512字节                  //
//********************************************************//      //
                     //
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, //
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, //
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, //
0x80,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x41, //
0x80,0x00,0x00,0x30,0x00,0xE0,0xF0,0x00,0x18,0x30,0x00,0x07,0x18,0x00,0x00,0x41, //
0x80,0x00,0x00,0x7F,0x80,0x63,0xCF,0xF0,0x18,0x30,0x30,0x06,0x18,0x00,0x00,0x41, //
0x80,0x03,0xFF,0x7F,0xE0,0x76,0x0C,0x30,0x1C,0x30,0x60,0x66,0x3F,0xFE,0x00,0x41, //
0x80,0x00,0x07,0xC0,0 x60,0x3E,0x18,0x60,0x1C,0x60,0xC0,0x6C,0x30,0x00,0x00,0x41,
0x80,0x00,0x06,0xCC,0xE0,0x0C,0x18,0x60,0x0C,0x61,0x80,0xCC,0x60,0x00,0x00,0x41,
0x80,0x03,0x07,0x98,0xC0,0x0C,0x38,0xE0,0x0C,0xE3,0x00,0xCC,0xCC,0x00,0x00,0x41,
0x80,0x03,0x0D,0x99,0xC0,0x1C,0x30,0xC0,0x0C,0xC6,0x00,0xD8,0xCF,0x00,0x00,0x41,
0x80,0x03,0x1F,0x19,0x87,0xD8,0x30,0xC0,0x00,0xC0,0x01,0x99,0x83,0x80,0x00,0x41,
0x80,0x03,0x9F,0x33,0x00,0xD8,0x71,0xC3,0xFF,0xFF,0xF1,0x9B,0x01,0xC0,0x00,0x41,
0x80,0x01,0xB0,0x37,0x01,0xF8,0x61,0x80,0x0C,0x30,0x01,0xB6,0x00,0xE0,0x00,0x41,
0x80,0x01,0xE0,0x70,0x01,0xB0,0x61,0x80,0x0C,0x70,0x03,0x30,0x00,0x00,0x00,0x41,
0x80,0x01,0xE0,0x70,0x01,0xB0,0xE3,0x80,0x1C,0x60,0x03,0x33,0xFF,0xC0,0x00,0x41,
0x80,0x01,0xC0,0xF0,0x03,0x60,0xC3,0x00,0x18,0x60,0x03,0x67,0x18,0xC0,0x00,0x41,
0x80,0x03,0xC1,0xF0,0x03,0x67,0xC3,0x00,0x30,0xE0,0x06,0x66,0x30,0xC0,0x00,0x41,
0x80,0x07,0xC3,0xB0,0x03,0x7F,0xC7,0x00,0x30,0xC0,0x06,0x6E,0x30,0xC0,0x00,0x41,
0x80,0x0E,0 xE3,0x30,0x06,0x71,0xF6,0x00,0x60,0xC0,0xC6,0xCC,0x31,0x80,0x00,0x41,
0x80,0x1C,0xE6,0x38,0x06,0x01,0xBC,0x00,0xC1,0xC1,0x8C,0xCC,0x61,0x80,0x00,0x41,
0x80,0x38,0xEC,0x38,0x0F,0x03,0x80,0x01,0x81,0x81,0x8C,0xD8,0x61,0x80,0x00,0x41,
0x80,0x60,0x78,0x18,0x1B,0x83,0x00,0x07,0x01,0x83,0x0D,0x98,0x63,0x00,0x00,0x41,
0x80,0xC0,0x70,0x1C,0x71,0xC6,0x00,0x1E,0x03,0x87,0x01,0x98,0xC3,0x00,0x00,0x41,
0x80,0x00,0xE0,0x0C,0xE0,0xFF,0xFE,0x38,0x01,0xFE,0x01,0x9F,0xFE,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
unsigned char code str1[]="松山电子欢迎您!内含八千汉字库。";
unsigned char code str2[]="12345678901234567890123456789012";     
unsigned char code str3[]={0xb0,0xa1,0xb0,0xb2,0xbf,0xc6,0xc3,0xb3,0,};
void test_key()
{
 if(BUTTON_1==0) key_bak=1; 
 if(BUTTON_2==0) key_bak=2; 
 if(BUTTON_3==0) key_bak=3; 
 if(BUTTON_4==0) key_bak=4; 
}
void wait_button()
{
 delay(200);
 while(BUTTON_1==0 || BUTTON_2==0 || BUTTON_3==0 || BUTTON_4==0) 
 {
  watch_dog();
 }
}
main()
{
 LCD_E1=1;
 LCD_RST=1;
 delay(500);
 LCD_RST=0;
 delay(500);
 LCD_RST=1;
 delay(500);
 ///////////////////////////////////////////////
//  delay(100);      //等待复位
     LcmInit();
     
 
 
 scroll=0;
 sel=0;
 PCB_Address = readSys(XADD_ADD) ;
 SendEnable=0;   
 key_bak=0;
 
 TMOD=0x20;   /* 设定定时器T1的工作方式为方式2 */
 TH1=0xfd; TL1=0xfd; 
 TH0=0x13; TL0=0x38; /* 6ms */
 SCON=0x78;   /*串行口设定*/
 PCON = 0;   //0x80;  //改为9600
 TR1 = 1;  /* 启动定时器T1 */
 ES = 1;  /* 打开串口中断 */
 REN = 1; /* 使能接收 */
 EA = 1;  /* 打开系统的中断 */
 LcmClearTXT();
 LcmClearBMP();
 while(1)
 {
  delay(800);
  test_key();
  delay(800);
  test_key();
  if(sel==0)
  {

   
     
           LcmClearTXT();
      //     PutBMP(bmp1);
      //     delay(80000);
           
       //    DisplayDots(0x55);    //xiao ma dian
      //     delay(80000);
           
           LcmClearBMP();
           PutStr(0,0,str1);
           delay(80000);
           
           //LcmClearTXT();
           //ReadDemo();
           //DelayKey(1,5);
           
           LcmClearTXT();
           DisplayDots(0xaa);   //  xiao ma dian
           delay(90000);
    /////////////////////////////////////////////////
 //  disLogo(sel,scroll++);
 //  if(scroll==122) delay(100000);
  }
  else
  {
   if(sel!=0xFF)
   {
    disLogo(sel,122);
    if(sel==6)
    {
     disNum(dis_val);
    }
    sel=0xFF;
   }
  }
 }
}


/////////////////////////////////////////////////////////////////////
lcd.c
#include "p.h"
unsigned char code AC_TABLE[]={             //
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置     //
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置     //
};  

void LCD_cmd(unsigned char v)   // WRITE COMMAND
{
 //CheckBusy();
 
 LCD_A0=0;
 LCD_RW=0;
 LCD_DATA=v;
 LCD_E2=1;
 delay(10);
 LCD_E2=0;
 delay(10);
}

void LCD_out(unsigned char v)   //   WRITE DATA1
{
// CheckBusy();
// delay(100);
 LCD_A0=1;
 LCD_RW=0;
// LCD_DATA=v;
 LCD_DATA=v;
 LCD_E2=1;
 delay(50);
 LCD_E2=0;
 delay(50);
}

void LcmInit( void )
{
     LCD_cmd(0x30);     //8BitMCU,基本指令集合   DL=1,RE=0;
    
  LCD_cmd(0x03);        //AC归0,不改变DDRAM内容
   
  LCD_cmd(0x0C);        //显示ON,游标OFF,游标位反白OFF
     
  LCD_cmd(0x01);        //清屏,AC归0
    
  LCD_cmd(0x06);        //写入时,游标右移动
}
//////////图形区和文本区显示在两个不同的RAM//////////////////////////                   //
//文本区清RAM函数               

void LcmClearTXT( void )             //
{                   //
     unsigned char i;                 //
     LCD_cmd(0x30);      //8BitMCU,基本指令集合           //
  
  LCD_cmd(0x80);      //AC归起始位, sheding  DDRAM add TO AC;         //
     for(i=0;i<64;i++)                 //
        LCD_out(0x20); //???????                //
}                   //
//图形区清RAM函数               //
void LcmClearBMP( void )             //
{                   //
     unsigned char i,j;                 //
     LCD_cmd(0x34);      //8Bit扩充指令集,即使是36H也要写两次    //
     LCD_cmd(0x36);      //绘图ON,基本指令集里面36H不能开绘图    //
     for(i=0;i<32;i++)            //12864实际为256x32      //
     {                  //
           LCD_cmd(0x80|i);    //行位置         //
           LCD_cmd(0x80);      //列位置             //
           for(j=0;j<32;j++)            //256/8=32 byte         //
                LCD_out(0);             //
     }                  //
}                   //
////////////////////////////////////////////////////////////////////////
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
     LCD_cmd(0x30);      //8BitMCU,基本指令集合
     LCD_cmd(AC_TABLE[8*row+col]);      //起始位置
     while(*puts != '\0')      //判断字符串是否显示完毕
     {
           if(col==8)         //判断换行
           {                  //若不判断,则自动从第一行到第三行
                 col=0;
                 row++;
           }
           if(row==2) row=0;      //一屏显示完,回到屏左上角
           LCD_cmd(AC_TABLE[8*row+col]);
           LCD_out(*puts);      //一个汉字要写两次
 //    LCD_out(0xb0);
       puts++;
           LCD_out(*puts);
 //    LCD_out(0xa1);        
           puts++;
           col++;
     }
}

void PutBMP(unsigned char *puts)
{
     unsigned int x=0;
     unsigned char i,j;
     LCD_cmd(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     LCD_cmd(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
           LCD_cmd(0x80|i);      //行位置
           LCD_cmd(0x80);      //列位置
           for(j=0;j<16;j++)      //122/8=15.25=16(只能为整数)
           {                        //列位置每行自动增加
                 LCD_out(puts[x]);
                 x++;
           }
     }
}
//松山电子测试用点阵显示
void DisplayDots(unsigned char DotByte)
{
     unsigned char i,j;
     LCD_cmd(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     LCD_cmd(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
           LCD_cmd(0x80|i);      //行位置
           LCD_cmd(0x80);      //列位置
           for(j=0;j<16;j++)      //122/8=15.25=16(只能为整数)
           {                        //列位置每行自动增加
                 LCD_out(DotByte);                  
           }
           DotByte=~DotByte;
     }
}

⌨️ 快捷键说明

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