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

📄 main.lst

📁 标准键盘PS2与单片机之间的通信
💻 LST
字号:
C51 COMPILER V7.01  MAIN                                                                   05/08/2006 21:56:59 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          #include<lcd12864.h>//包含128X64驱动程序
   3          #include<hzzi.H>    //包含图片和汉字库
   4          sbit Key_Data =P2^1;//定义Keyboard数据端口引脚
   5          sbit Key_CLK=P3^2;      //中断端口,时钟线
   6          static unsigned char KeyV=0X00; //键值
   7          static unsigned char BF = 0; //标识是否有字符被收到
   8          static unsigned char IntNum = 0; //中断次数计数
   9          unsigned char  lie,hang;//lie为列值, hang为行值
  10          bit dx=0;          //大小写标志 dx==1时大写状态
  11          ////*************************\\\\\\\\\\\\\\\\\\\\\\\\\\\
*** WARNING C329 IN LINE 11 OF MAIN.C: single-line comment contains line-continuation
  12          
  13          void Keyboard_out(void) interrupt 2//键盘中断处理 键值存储在 KeyV 中
  14          {
  15   1        if ((IntNum>0) && (IntNum <9))
  16   1              {                       
  17   2                      KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
  18   2                      if (Key_Data==1)  //当键盘数据线为1时   
  19   2                       {KeyV = KeyV | 0x80;}  //存储一位
  20   2              }
  21   1        IntNum++;   //中断次数加一(中断一次接收一位数据)
  22   1        if (IntNum > 10) //中断11次后数据发送完毕
  23   1              {   
  24   2                      IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
  25   2                      BF = 1;    //标识有字符输入完了
  26   2                      EA = 0;    //关中断等显示完后再开中
  27   2              }
  28   1      }
  29          void Decode() //键值处理
  30          {
  31   1              unsigned char data TempCyc;
  32   1          signed char data k;
  33   1              TempCyc=KeyV;
  34   1          if(BF==1)   //接收完一个有效数据时  
  35   1              { 
  36   2               BF=0;  //准备下一次接收
  37   2               switch ( TempCyc ) //键值与显示字符的对应关系
  38   2                {    //键值//        //对应字符//
  39   3                      case 0x8A: k=0;  break; //0
  40   3                      case 0x2C: k=1;  break; //1
  41   3                      case 0x3C: k=2;  break; //2
  42   3                      case 0x4C: k=3;  break; //3
  43   3                      case 0x4A: k=4;  break; //4
  44   3                      case 0x5C: k=5;  break; //5
  45   3                      case 0x6C: k=6;  break; //6
  46   3                      case 0x7A: k=7;  break; //7
  47   3                      case 0x7C: k=8;  break; //8
  48   3                      case 0x8C: k=9;  break; //9
  49   3                      case 0x38: k=10; break; //a
  50   3                      case 0x64: k=11; break; //b
  51   3                      case 0x42: k=12; break; //c
  52   3                      case 0x46: k=13; break; //d
  53   3                      case 0x48: k=14; break; //e
  54   3                      case 0x56: k=15; break; //f
C51 COMPILER V7.01  MAIN                                                                   05/08/2006 21:56:59 PAGE 2   

  55   3                      case 0x68: k=16; break; //g
  56   3                      case 0x66: k=17; break; //h
  57   3                      case 0x86: k=18; break; //i
  58   3                      case 0x76: k=19; break; //j
  59   3                      case 0x84: k=20; break; //k
  60   3                      case 0x96: k=21; break; //l
  61   3                      case 0x74: k=22; break; //m
  62   3                      case 0x62: k=23; break; //n
  63   3                      case 0x88: k=24; break; //o
  64   3                      case 0x9A: k=25; break; //p 
  65   3                      case 0x2A: k=26; break; //q
  66   3                      case 0x5A: k=27; break; //r
  67   3                      case 0x36: k=28; break; //s
  68   3                      case 0x58: k=29; break; //t
  69   3                      case 0x78: k=30; break; //u
  70   3                      case 0x54: k=31; break; //v
  71   3                      case 0x3A: k=32; break; //w
  72   3                      case 0x44: k=33; break; //x
  73   3                      case 0x6A: k=34; break; //y
  74   3                      case 0x34: k=35; break; //z
  75   3                      case 0x98: k=63; break; //;
  76   3                      case 0xAA: k=65; break; //=
  77   3                      case 0xF2: k=68; break; //+
  78   3                      case 0x52: k=-16;break; //空格键
  79   3                      case 0xB0: k=101;break;  //大小写控制键Caps lock
  80   3           } 
  81   2               if(k==101) {dx=!dx;} //按下大小写控制键时 大小写标志取反
  82   2               if(k==-16) //空格键按下时
  83   2                {
  84   3                      lcd_putchar8x8(lie, hang, -16+'0'); //清除光标
  85   3                      lcd_putchar8x8(lie+8, hang, 79+'0');//光标移一位
  86   3                }
  87   2           if(dx==0) //小写状态时显示
  88   2                {
  89   3                      lcd_putchar8x8(lie, hang, k+'0');//小写字符                      
  90   3              lcd_putchar8x8(lie+8, hang, 79+'0');//光标                                              
  91   3                 }
  92   2                if(dx==1)//大写状态时显示
  93   2                 {
  94   3                       if(k>9 && k<=35)
  95   3                              {
  96   4                               lcd_putchar8x8(lie, hang, (k+26)+'0');//大写字符
  97   4                               lcd_putchar8x8(lie+8, hang, 79+'0');//光标
  98   4                              }
  99   3                              if(k>=0 && k<=9) 
 100   3                              {
 101   4                               lcd_putchar8x8(lie, hang, (k-10)+'0');//数字键对应的符号
 102   4                               lcd_putchar8x8(lie+8, hang, 79+'0');//光标
 103   4                              }
 104   3                        }
 105   2                       if(lie==120)  //写满一行
 106   2                       {lie=0;hang=hang+1;//换行
 107   3                       lcd_putchar8x8(lie, hang, 79+'0');}//光标下移
 108   2                   else {lie=lie+8;}
 109   2                   EA=1;
 110   2                }     
 111   1      }
 112          void delay(int x)   //延时程序
 113          {       int i,j;
 114   1              for(i=0;i<600;i++)
 115   1              for(j=0;j<x;j++); }     
 116           
C51 COMPILER V7.01  MAIN                                                                   05/08/2006 21:56:59 PAGE 3   

 117          void wlcome()      //开机画面和欢迎界面
 118          {      
 119   1                      lcd_init();  //初始化液晶驱动硬件
 120   1                      lcd_clr();   //清屏 
 121   1                      Disp_Img(yema);//显示一张128X64的点阵的图片
 122   1                      delay(200);  //延时等待   
 123   1              lie=20;//列的值可以是0--127任意一个
 124   1              hang=1;//行的值视情况而定
 125   1                      lcd_clr();   //清屏使残留的点不影响后面的显示
 126   1                      hz_disp(lie+0, hang, huan);//显示汉字'欢'       
 127   1                      hz_disp(lie+16,hang, ying);//显示汉字'迎'
 128   1                      hz_disp(lie+32,hang, shi);//显示汉字'使'
 129   1                      hz_disp(lie+48,hang, yong);//显示汉字'用'
 130   1                  hz_disp(lie+64,hang, DP);//显示字母'DP'     
 131   1                      hz_disp(lie+80,hang, Y);//显示字母'Y'
 132   1                      lie=8;hang=4;//换行 一行有8个点阵 一列只有一个
 133   1                      hz_disp(lie+24,hang, shu );//显示汉字'输'
 134   1                      hz_disp(lie+40,hang, ru);//显示汉字'入'
 135   1                      hz_disp(lie+56,hang, xi);//显示汉字'系' 
 136   1                      hz_disp(lie+72, hang, tong);//显示汉字'统'      
 137   1                      delay(200);lcd_clr();
 138   1                      lie=8; hang=0;
 139   1                      hz_disp(lie+16,hang, qing);//显示汉字'请'
 140   1                      hz_disp(lie+32,hang, shu);//显示汉字'输'
 141   1                      hz_disp(lie+48,hang, ru);//显示汉字'入'
 142   1                  hz_disp(lie+64,hang, zi);//显示汉字'字'     
 143   1                      hz_disp(lie+80,hang, fu);//显示汉字'符'
 144   1                      for(lie=0;lie<128;lie++)//画一条直线
 145   1                      {set_point(lie,15);}
 146   1      }
 147          void main() 
 148          {   
 149   1          wlcome() ;  //调用开机画面和欢迎界面子程序
 150   1          IT1 = 1;  //设外部中断1为下降沿触发
 151   1              EA = 1;   //开总中断
 152   1              EX1=1;    //开中断 1
 153   1              hang=2; lie=0;//输入的字符从第2行 第0列开始显示
 154   1              while(1)
 155   1          {       
 156   2                      Decode();       
 157   2                      delay(50);
 158   2              }
 159   1      }
 160          
 161          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    967    ----
   CONSTANT SIZE    =   1440    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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