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

📄 串口+8个键盘程序.lst

📁 用stc89c51,单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   串口_8竉键盘程序                                                      05/04/2007 10:30:05 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 串口_8竉键盘程序
OBJECT MODULE PLACED IN 串口+8个键盘程序.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 串口+8个键盘程序.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include<reg51.h>
   3          #include<intrins.h>
   4          #include<string.h>
   5          #define comm  0
   6          #define dat   1
   7          #define uchar unsigned char
   8          #define uint unsigned int
   9          #define x1    0x80
  10          #define x2    0x88
  11          #define y     0x80
  12          sbit Key_Hang0=P2^0;
  13          sbit Key_Hang1=P2^1;
  14          sbit Key_Lie0=P2^2;
  15          sbit Key_Lie1=P2^3;
  16          sbit Key_Lie2=P2^4;
  17          sbit Key_Lie3=P2^5;
  18          sbit Speaker=P2^7;
  19          sbit cs   = P1^0;
  20          sbit std  = P1^1;
  21          sbit sclk = P1^2;
  22          sbit psb  = P1^3;   //H=并口; L=串口;
  23          sbit rst  = P1^4;   //Reset Signal 低电平有效
  24          sbit led  = P1^7;   //Reset Signal 低电平有效
  25          
  26          
  27          char send;
  28          char tar[]={'D'};
  29          #define MENULEVEL 7        //当前菜单表个数
  30          #define OPTIONMETE 29       //当前选项个数,包括一个特别功能选项
  31          //-------------------------------------
  32          //
  33          //  菜单结构定义
  34          //
  35          //-------------------------------------
  36          struct Option{
  37           unsigned char KeyLevel;      //菜单选项所属菜单表号
  38           unsigned char EnterIndex;     //选项进入索引号
  39           unsigned char CancelIndex;     //选项退出索引号
  40           unsigned char KeyWord[16];     //菜单选项文字描述数组
  41           unsigned char WordMete;      //菜单选项描述文字字节数
  42          };
  43          //-------------------------------------
  44          //
  45          // 具体菜单选项定义,定义一个结构数组
  46          // 存储在编码区,节省内存RAM
  47          //
  48          //-------------------------------------
  49          struct Option code sOption[OPTIONMETE] = {
  50          // KeyLevel, EnterIndex, CancelIndex, KeyWord[16], WordMete//
  51          //菜单选项所属菜单表号
  52           //选项进入索引号
  53          //选项退出索引号
  54          //菜单选项文字描述数组
  55          //菜单选项描述文字字节数
C51 COMPILER V7.50   串口_8竉键盘程序                                                      05/04/2007 10:30:05 PAGE 2   

  56           {0,9,0,"文本功能",8},      //0---------------------------9往下数9组数据就是"文本功能"
  57           {0,16,1,"时间功能",8},      //1
  58           {0,19,2,"温度功能",8},      //2
  59           {0,OPTIONMETE-1,3,"系统检测",8},   //3
  60           {0,OPTIONMETE-1,4,"修改密码",8},   //4
  61           {0,OPTIONMETE-1,5,"帮助说明",8},   //5
  62           {0,OPTIONMETE-1,6,"作者介绍",8},   //6
  63           {0,OPTIONMETE-1,7,"系统版本",8},   //7
  64           {0,OPTIONMETE-1,8,"退出系统",8},   //8
  65          
  66           {1,OPTIONMETE-1,0,"输入显示向导",12},  //9------------------------------------"文本功能"
  67           {1,OPTIONMETE-1,0,"新建显示文本",12},  //10
  68           {1,OPTIONMETE-1,0,"文本发送显示",12},  //11
  69           {1,OPTIONMETE-1,0,"删除已存文本",12},  //12
  70           {1,14,0,"输入法设定",10},     //13
  71          
  72           {2,OPTIONMETE-1,13,"输入法选择",10},  //14
  73           {2,OPTIONMETE-1,13,"输入法排序",10},  //15
  74          
  75           {3,OPTIONMETE-1,1,"设定本机时间",12},  //16-----------------------------------"时间功能"
  76           {3,OPTIONMETE-1,1,"发送本机时间",12},  //17
  77           {3,OPTIONMETE-1,1,"与计算机同步时间",16}, //18
  78          
  79           {4,23,2,"显示当前温度",12},     //19-----------------------------------------"温度功能"
  80           {4,OPTIONMETE-1,2,"存储当前温度",12},  //20
  81           {4,OPTIONMETE-1,2,"显示已存温度",12},  //21
  82           {4,OPTIONMETE-1,2,"删除已存温度",12},  //22
  83          
  84           {5,25,19,"本机显示",8},      //23
  85           {5,OPTIONMETE-1,19,"子机显示",8},   //24
  86          
  87           {6,OPTIONMETE-1,23,"LED 显示",8},   //25
  88           {6,OPTIONMETE-1,23,"数码管显示",10},  //26
  89           {6,OPTIONMETE-1,23,"同时显示",8},   //27
  90          
  91           {0,0,0,"",0}        //28
  92          };
  93          //--------------------------------------
  94          //
  95          //  菜单表分类数组
  96          //
  97          //--------------------------------------
  98          unsigned char code Level[MENULEVEL][3] = {
  99          //每层表单对应 开始 结束 索引号 以及 选项数目
 100           {0,8,9},          
 101           {9,13,5},
 102           {14,15,2},
 103           {16,18,3},
 104           {19,22,4},
 105           {23,24,2},
 106           {25,27,3}
 107          //SelectIndex
 108          };
 109          uchar ii,jj;
 110          unsigned char FirstLineDisIndex = 0;    //屏幕第一行显示的索引号
 111          unsigned char SelectLine = 1;         //当前选择的行
 112          unsigned char SelectIndex = 0;      //当前选定行对应的索引号
 113          unsigned char LastIndex = 0;      //进入功能函数前的索引号,判断具体功能使用
 114          void send_sub(unsigned char send_data); //发送函数
 115          void key_delay(int delay_time);
 116          void GetKeyCode (void);
 117          void start_init();
C51 COMPILER V7.50   串口_8竉键盘程序                                                      05/04/2007 10:30:05 PAGE 3   

 118          char KeyCodeConvert(char send);
 119          void MenuReflash (void);
 120          void MenuCancelOption (void);
 121          void MenuEnterOption (void);
 122          void FunctionAction (void);
 123          void TemperatureShow(void);
 124          void NoThisFunction (void);
 125          void MenuCancelOption(void);
 126          void ShutDown (void);
 127          void MenuDownOneOption (void);
 128          void MenuUpOneOption (void);
 129          bit MenuLevelEnd (void);
 130          bit MenuLevelStart (void);    //判断当前索引是否为当前层第一个选项
 131          void DIS12864M (void);
 132          void wr_lcd (char dat_comm,char content);
 133          
 134          void SentAIns(char LCD_Comand);      //进入液晶普通指令模式
 135          void SentAData(char LCD_Data);
 136          void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl);
 137          void SetALineReverse (char SelectLine);           //填充所需反白
 138          void delay (uint us);   //delay time
 139          void init_lcd ();
 140          void Disp_String(uint a,uint b,uchar *dd);
 141          void lat_disp (uchar data1,uchar data2);
 142          
 143          //--------------------------------------------------------------------------------------
 144          main()
 145          {
 146   1      start_init();
 147   1      init_lcd ();
 148   1      DIS12864M();
 149   1      //lat_disp (0x00,0x00);
 150   1      //con_disp(0xff,0xff,0x80,0x80,4,16);///反白
 151   1      //SetALineReverse (SelectLine);           //填充所需反白
 152   1      while(1)
 153   1      {  //key ();
 154   2         MenuReflash (); //菜单更新函数
 155   2         if(send)
 156   2            {
 157   3                   send_sub( send);
 158   3               send=0;
 159   3                }
 160   2      
 161   2      }
 162   1      }
 163          
 164          
 165          void send_sub(unsigned char send_data) //发送函数
 166               {
 167   1                                 TI=0;
 168   1                                                 EA=0;
 169   1                                 ACC=send_data;
 170   1                                 SBUF=ACC;
 171   1                                   while(TI==0);  //wait for sended
 172   1                                 send_data=0x00;     //clear send
 173   1                                 TI=0;
 174   1                                 EA=1;
 175   1           }
 176          
 177          
 178          void GetKeyCode()
 179             {  
C51 COMPILER V7.50   串口_8竉键盘程序                                                      05/04/2007 10:30:05 PAGE 4   

 180   1                Key_Hang0=0;
 181   1           _nop_();
 182   1           if(!Key_Lie0)
 183   1                         {  
 184   2                             key_delay(5);                   
 185   2                             while(!Key_Lie0)  
 186   2                                       {Speaker=1;
 187   3                                               send=0x08;
 188   3                                               }
 189   2                             Speaker=0;
 190   2                         }  
 191   1            if(!Key_Lie1)
 192   1                         {   
 193   2                             key_delay(5);
 194   2                             while(!Key_Lie1)  
 195   2                                      { Speaker=1;
 196   3                                                send=0x07; 
 197   3                                              }
 198   2                             Speaker=0;
 199   2                         }  
 200   1      
 201   1                  //scan no2
 202   1                 if(!Key_Lie2)
 203   1                     {  
 204   2                        key_delay(5);
 205   2                            while(!Key_Lie2)  
 206   2                                      {Speaker=1;
 207   3                                               send=0x06; 
 208   3                                              }
 209   2                                 Speaker=0;
 210   2                         } 
 211   1                if(!Key_Lie3)
 212   1                     {  
 213   2                        key_delay(5);
 214   2                             while(!Key_Lie3)
 215   2                                 {Speaker=1;
 216   3                                          send=0x05;
 217   3                                         }
 218   2                             Speaker=0;
 219   2                         } 
 220   1      
 221   1                Key_Hang0=1;
 222   1                Key_Hang1=0;
 223   1                _nop_();
 224   1            if(!Key_Lie0)
 225   1                         {   
 226   2                             key_delay(5);
 227   2                             while(!Key_Lie0)  
 228   2                                 {Speaker=1;
 229   3                                  send=0x4;
 230   3                                  }
 231   2                             Speaker=0;
 232   2                         }  
 233   1            if(!Key_Lie1)
 234   1                         {   
 235   2                             key_delay(5);
 236   2                            while(!Key_Lie1)   
 237   2                                {Speaker=1;
 238   3                                 send=0x03;
 239   3                                }
 240   2                             Speaker=0;
 241   2                         }  
C51 COMPILER V7.50   串口_8竉键盘程序                                                      05/04/2007 10:30:05 PAGE 5   

 242   1      
 243   1                  //scan no2
 244   1                 if(!Key_Lie2)
 245   1                     {  
 246   2                        key_delay(5);
 247   2                             while(!Key_Lie2) 
 248   2                                  {Speaker=1;
 249   3                                                send=0x02;
 250   3                                              }
 251   2                                 Speaker=0;
 252   2                         } 
 253   1                if(!Key_Lie3)
 254   1                     {  
 255   2                        key_delay(5);  
 256   2                             while(!Key_Lie3)
 257   2                                 { Speaker=1;
 258   3                                           send=0x01;
 259   3                                         }
 260   2                             Speaker=0;
 261   2                         } 
 262   1                 Key_Hang1=1;

⌨️ 快捷键说明

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