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

📄 12864与ps2.lst

📁 PS2扩展功能
💻 LST
字号:
C51 COMPILER V8.02   12864与PS2                                                            08/12/2008 12:14:11 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 12864与PS2
OBJECT MODULE PLACED IN 12864与PS2.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE 12864与PS2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <at89x51.h>
   2          #include "scancodes.h"
   3          #include<intrins.h>
   4          
   5          #define uchar unsigned char
   6          #define uint  unsigned int
   7          #define Key_Data P3_4 //定义Keyboard引脚
   8          #define Key_CLK  P3_3
   9          #define Busy    0x80 //用于检测LCM状态字中的Busy标识
  10          #define Disp_On    0x3f    // 显示开指令 //
  11          #define Disp_Off   0x3e    // 显示关指令 //
  12          #define Col_Add    0x40    // 定位到第0列指令 //
  13          #define Page_Add   0xb8    // 定位到第0页指令 //
  14          #define Start_Line 0xc0    // 定位从DDROM中的第0行开始往屏幕上显示 //
  15          
  16          void Delay5Ms(void);
  17          void Delay400Ms(void);
  18          void Decode(unsigned char ScanCode);
  19          unsigned char ReadDataLCM(void);
  20          unsigned char ReadStatusLCM(void);
  21          unsigned char code Cls[] = {"                "};
  22          static unsigned char IntNum = 0; //中断次数计数
  23          static unsigned char KeyV; //键值
  24          static unsigned char DisNum = 0; //显示用指针
  25          static unsigned char Key_UP=0, Shift = 0;//Key_UP是键松开标识,Shift是Shift键按下标识
  26          static unsigned char BF = 0; //标识是否有字符被收到
  27          typedef bit BOOL ; 
  28          uchar aa=0x80;
  29          uchar TempCyc;
  30            
  31          
  32          /***************************-= 控 制 宏 =-**************************************************/
  33          /** 根据你的控制线接法来修改 **/
  34          sbit CS1  =  P2^4;        // 左屏使能 //
  35          sbit CS2  =  P2^6;       // 右屏使能 //
  36          sbit E    =  P2^7;       // 使能端 //
  37          sbit RS   =  P2^3;       // 数据或指令寄存器选择端,又名DI //
  38          sbit RW   =  P2^5;       // 读写控制端 //
  39          sbit RST  =  P2^1;       // 复位端 //
  40          sbit sdata =  P0;         // 数据口 // 
  41          
  42          unsigned char code a[]=
  43          {
  44          /*------------------------------------------------------------------------------
  45            源文件 / 文字 : 你
  46            宽×高(像素): 16×16
  47            字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/32字节
  48            数据转换日期  : 2008-8-12 11:21:42
  49          ------------------------------------------------------------------------------*/
  50          0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08,0x00,
  51          0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08,0x00
  52          };
  53          
  54          /*==========================
  55          函数名:延时子函数        ==
C51 COMPILER V8.02   12864与PS2                                                            08/12/2008 12:14:11 PAGE 2   

  56          输  入:time延时长度      ==
  57          输  出:无                ==
  58          ==========================*/
  59          void Delay(unsigned int time)
  60           {
  61   1         unsigned int i,j;
  62   1         for(i=0;i<time;i++)
  63   1           for(j=0;j<10;j++)
  64   1             ;
  65   1       }
  66          
  67          /*===============================
  68          //  函数名:写命令到LCD        //
  69          //  输  入:cmdcode待写入命令  //
  70          //  输  出:无                 //
  71          ===============================*/
  72          void write_command(unsigned char cmdcode)
  73           { 
  74   1         RS = 0;
  75   1         RW = 0;
  76   1         P0 = cmdcode;
  77   1         Delay(1);
  78   1         E = 1;
  79   1         Delay(1);
  80   1         E = 0;
  81   1       }
  82          
  83          /*================================
  84          //  函数名:写数据到LCD         //
  85          //  输  入:Dispdata待写入数据  //
  86          //  输  出:无                  //
  87          ================================*/
  88          void write_dat(unsigned char Dispdata)
  89           {
  90   1         RS = 1;
  91   1         RW = 0;
  92   1         P0 = Dispdata;
  93   1         Delay(1);
  94   1         E = 1;
  95   1         Delay(1);
  96   1         E = 0;
  97   1       }
  98          
  99          /*===================================================
 100          //  函数名:任意位置写入一字节                     //
 101          //  输  入:Page行定位,Col列定位,Data待写入字节  //
 102          //  输  出:无                                     //
 103          ===================================================*/
 104          void write_data(unsigned char Page,unsigned char Col,unsigned char Data)//在屏幕的任意位置写待显示的数据
 105           {
 106   1         if ((Col&0x40)==0)
 107   1              {
 108   2                CS2=1;CS1=0;
 109   2                write_command(Page_Add+Page);
 110   2            write_command(Col_Add+Col);
 111   2                write_dat(Data);
 112   2              } 
 113   1         else
 114   1              {
 115   2                Col-=64;
 116   2                CS2=0;CS1=1;
 117   2            write_command(Page_Add+Page);
C51 COMPILER V8.02   12864与PS2                                                            08/12/2008 12:14:11 PAGE 3   

 118   2            write_command(Col_Add+Col);
 119   2                write_dat(Data);
 120   2              } 
 121   1       }
 122          
 123          /*======================
 124          //  函数名:清显示屏  //
 125          //  输  入:无        //
 126          //  输  出:无        //
 127          ======================*/
 128          void Clr_Scr(void)
 129           {
 130   1         unsigned char j,k;
 131   1         CS2=1;CS1=0;             // 清左半屏 //
 132   1          {
 133   2           
 134   2            for(k=0;k<8;k++)              
 135   2             {
 136   3                   write_command(Page_Add+k);
 137   3                       write_command(Col_Add);
 138   3               for(j=0;j<64;j++)
 139   3                     write_dat(0x00);
 140   3             }
 141   2          }
 142   1        CS2=0;CS1=1;              // 清右半屏 //
 143   1          {
 144   2          
 145   2            for(k=0;k<8;k++)              
 146   2             {
 147   3                   write_command(Page_Add+k);
 148   3                       write_command(Col_Add);
 149   3               for(j=0;j<64;j++)
 150   3                     write_dat(0x00);
 151   3             }
 152   2          }
 153   1       } 
 154          
 155           
 156          
 157          ////////////////////////////////////////////////////////////
 158          //  函数名:指定位置显示16*16字母                         //
 159          //  输  入:pag行定位,col列定位,*zmk待显示数字数据指针  //
 160          //  输  出:无                                            //
 161          ////////////////////////////////////////////////////////////
 162          void Disp_Chr(unsigned char pag,unsigned char col, unsigned char code *zmk)
 163           {
 164   1         unsigned char j=0,i=0;
 165   1         for(i=0;i<16;i++) 
 166   1          {
 167   2            for(j=0;j<2;j++) 
 168   2                 {
 169   3                   write_data(pag+j,col+i,zmk[16*j+i]);
 170   3             }
 171   2          }
 172   1       }
 173           
 174          ////////////////////////////
 175          //  函数名:初始化液晶屏  //
 176          //  输  入:无            //
 177          //  输  出:无            //
 178          ////////////////////////////
 179          void Init_lcd(void)
C51 COMPILER V8.02   12864与PS2                                                            08/12/2008 12:14:11 PAGE 4   

 180           {
 181   1         RST=0;
 182   1         Delay(10);
 183   1         RST=1;
 184   1         Delay(10);
 185   1      
 186   1         CS2=1;
 187   1         CS1=1;
 188   1      
 189   1         Delay(100);
 190   1         write_command(Disp_Off);
 191   1         write_command(Page_Add+0);
 192   1         write_command(Start_Line+0);
 193   1         write_command(Col_Add+0);
 194   1         write_command(Disp_On);
 195   1       }
 196          
 197          /********************************-= 用户操作在下面进行 =-**********************************************/
 198          ////////////////////////////
 199          //  函数名:主函数(例子)//
 200          //  输  入:无            //
 201          //  输  出:无            //
 202          ////////////////////////////
 203          void main(void)
 204           {
 205   1         Init_lcd();                // 初始化液晶屏
 206   1         for (TempCyc=0; TempCyc<3; TempCyc++)
 207   1                              Delay400Ms(); //延时       
 208   1         Disp_Chr(0,0,a) ;
 209   1         for (TempCyc=0; TempCyc<3; TempCyc++)
 210   1                              Delay400Ms(); //延时               
 211   1         Clr_Scr();                 // 清屏
 212   1         IT1 = 0; //设外部中断1为低电平触发
 213   1         EA = 1;
 214   1         EX1 = 1; //开中断
 215   1      
 216   1              do
 217   1                      {
 218   2                              if (BF)
 219   2                                      Decode(KeyV);
 220   2                              else
 221   2                                      EA = 1; //开中断
 222   2                      }
 223   1              while(1);
 224   1      
 225   1       }
 226          
 227          /**********************************************************************************************
 228          函数名称:延时函数
 229          函数功能:延时
 230          说明: 
 231          **********************************************************************************************/
 232          
 233          //5ms延时
 234          void Delay5Ms(void)
 235          {
 236   1              unsigned int TempCyc = 5552;
 237   1              while(TempCyc--);
 238   1      }
 239          
 240          //400ms延时
 241          void Delay400Ms(void)
C51 COMPILER V8.02   12864与PS2                                                            08/12/2008 12:14:11 PAGE 5   

 242          {
 243   1              unsigned char TempCycA = 5;
 244   1              unsigned int TempCycB;
 245   1              while(TempCycA--)
 246   1                      {
 247   2                              TempCycB=7269;
 248   2                              while(TempCycB--);
 249   2                      };
 250   1      }
 251          /**********************************************************************************************
 252          函数名称:中断函数
 253          函数功能:每十一次(IntNum)中断一次,读取键盘值
 254          说明: 
 255          **********************************************************************************************/
 256          void Keyboard_out(void) interrupt 2
 257          {
 258   1              if ((IntNum > 0) && (IntNum < 9))
 259   1                      {                       
 260   2                              KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
 261   2                              if (Key_Data) KeyV = KeyV | 0x80; //当键盘数据线为1时为1到最高位
 262   2                      }
 263   1              IntNum++;
 264   1              while (!Key_CLK); //等待PS/2CLK拉高
 265   1      
 266   1              if (IntNum > 10)
 267   1                      {
 268   2                              IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
 269   2                              BF = 1; //标识有字符输入完了
 270   2                              EA = 0; //关中断等显示完后再开中断 (注:如这里不用BF和关中断直接调Decode()则所Decode中所调用的所有函数

⌨️ 快捷键说明

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