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

📄 12864.lst

📁 带字库LCD12864 分身乏术非师范
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.06   12864                                                                 08/05/2007 15:38:00 PAGE 1   


C51 COMPILER V8.06, COMPILATION OF MODULE 12864
OBJECT MODULE PLACED IN 12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //ST7920 串口C51演示程序
   2          //0755-27899659,27892739
   3          //                   ST7920 测试程序(串口) 
   4          //***************************************************************************
   5          //连线表: CPU=89C52  SystemClock=12Mhz                                      *
   6          //CS=P3.0            SCLK=P3.1          SID=P3.2       Reset=RC in Board    *
   7          //***************************************************************************
   8          #include <reg52.h>
   9          #include <stdlib.h>
  10          #include <stdio.h>
  11          #include<string.h>
  12          #include<INTRINS.H>
  13          
  14          sbit CS =P1^0;  //LCD
  15          sbit SCK=P1^2;
  16          sbit SID=P1^1;
  17          sbit Key=P1^3;
  18          
  19          unsigned char code AC_TABLE[]={
  20          0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
  21          0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
  22          0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行汉字位置
  23          0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      //第四行汉字位置
  24          };
  25          unsigned char code str1[]="128x64字库屏";
  26          unsigned char code str2[]="WWW.LCMLCD.COM";
  27          unsigned char code str3[]="联系电话:";
  28          unsigned char code str4[]="0755-27899659";
  29          unsigned char code bmp1[];
  30          
  31          //串口发送一个字节
  32          void SendByte(unsigned char Dbyte)
  33          {
  34   1           unsigned char i;
  35   1           for(i=0;i<8;i++)
  36   1           {
  37   2                 SCK = 0;
  38   2                 Dbyte=Dbyte<<1;      //左移一位
  39   2                 SID = CY;            //移出的位给SID
  40   2                 SCK = 1;
  41   2                 SCK = 0;
  42   2           }
  43   1      }
  44          
  45          //串口接收一个字节
  46          //仅在读取数据的时候用到
  47          //而读出的数据是一次只能读出4bit的
  48          unsigned char ReceiveByte(void)
  49          {
  50   1           unsigned char i,temp1,temp2;
  51   1           temp1=temp2=0;
  52   1           for(i=0;i<8;i++)
  53   1           {
  54   2                 temp1=temp1<<1;
  55   2                 SCK = 0;
C51 COMPILER V8.06   12864                                                                 08/05/2007 15:38:00 PAGE 2   

  56   2                 SCK = 1;            
  57   2                 SCK = 0;
  58   2                 if(SID) temp1++;
  59   2           }
  60   1           for(i=0;i<8;i++)
  61   1           {
  62   2                 temp2=temp2<<1;
  63   2                 SCK = 0;
  64   2                 SCK = 1;
  65   2                 SCK = 0;
  66   2                 if(SID) temp2++;
  67   2           }
  68   1           return ((0xf0&temp1)+(0x0f&temp2));
  69   1      }
  70          
  71          void CheckBusy( void )
  72          {
  73   1           do   SendByte(0xfc);      //11111,RW(1),RS(0),0
  74   1           while(0x80&ReceiveByte());      //BF(.7)=1 Busy
  75   1      }
  76          
  77          void WriteCommand( unsigned char Cbyte )
  78          {
  79   1           CS = 1;
  80   1           CheckBusy();
  81   1           SendByte(0xf8);            //11111,RW(0),RS(0),0
  82   1           SendByte(0xf0&Cbyte);      //高四位
  83   1           SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)
  84   1           CS = 0;
  85   1      }
  86          
  87          void WriteData( unsigned char Dbyte )
  88          {
  89   1           CS = 1;
  90   1           CheckBusy();
  91   1           SendByte(0xfa);            //11111,RW(0),RS(1),0
  92   1           SendByte(0xf0&Dbyte);      //高四位
  93   1           SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)
  94   1           CS = 0;
  95   1      }
  96          
  97          unsigned char ReadData( void )
  98          {
  99   1           CheckBusy();
 100   1           SendByte(0xfe);            //11111,RW(1),RS(1),0
 101   1           return ReceiveByte();
 102   1      }
 103          
 104          void Delay(unsigned int MS)
 105          {
 106   1           unsigned char us,usn;
 107   1           while(MS!=0)            //for 12M
 108   1                 { usn = 2;
 109   2                       while(usn!=0)
 110   2                             {
 111   3                                   us=0xf5;
 112   3                                   while (us!=0){us--;};
 113   3                                   usn--;
 114   3                             }
 115   2                       MS--;
 116   2                 }
 117   1      }
C51 COMPILER V8.06   12864                                                                 08/05/2007 15:38:00 PAGE 3   

 118          
 119          //三元液晶测试架专用延时函数
 120          void DelayKey(unsigned int Second , unsigned int MS100)
 121          {                              //输入精确到0.1S,是用","
 122   1           unsigned int i;
 123   1           for(i=0;i<Second*100+MS100*10;i++)
 124   1           {
 125   2                 if(Key==0)
 126   2                 {
 127   3                       Delay(20);
 128   3                       while(Key==0) {Delay(20);}
 129   3                       break;
 130   3                 }
 131   2                 else Delay(10);
 132   2           }
 133   1      }
 134          
 135          void LcmInit( void )
 136          {
 137   1           WriteCommand(0x30);      //8BitMCU,基本指令集合
 138   1           WriteCommand(0x03);      //AC归0,不改变DDRAM内容
 139   1           WriteCommand(0x0C);      //显示ON,游标OFF,游标位反白OFF
 140   1           WriteCommand(0x01);      //清屏,AC归0
 141   1           WriteCommand(0x06);      //写入时,游标右移动
 142   1      }
 143          
 144          //文本区清RAM函数
 145          void LcmClearTXT( void )
 146          {
 147   1           unsigned char i;
 148   1           WriteCommand(0x30);      //8BitMCU,基本指令集合
 149   1           WriteCommand(0x80);      //AC归起始位
 150   1           for(i=0;i<64;i++)
 151   1              WriteData(0x20);
 152   1      }
 153          
 154          //图形区和文本区显示在两个不同的RAM区
 155          //图形区清RAM函数
 156          void LcmClearBMP( void )
 157          {
 158   1           unsigned char i,j;
 159   1           WriteCommand(0x34);      //8Bit扩充指令集,即使是36H也要写两次
 160   1           WriteCommand(0x36);      //绘图ON,基本指令集里面36H不能开绘图
 161   1           for(i=0;i<32;i++)            //12864实际为256x32
 162   1           {
 163   2                 WriteCommand(0x80|i);      //行位置
 164   2                 WriteCommand(0x80);      //列位置
 165   2                 for(j=0;j<32;j++)            //256/8=32 byte
 166   2                      WriteData(0);
 167   2           }

⌨️ 快捷键说明

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