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

📄 4×4-key.lst

📁 单片机中LED显示/数码管显示/键盘控制/蜂鸣器输出/中断应用/定时器和计数器/串口通信/键控看门狗/数据交换
💻 LST
📖 第 1 页 / 共 2 页
字号:
 153          /*                                                                 */
 154          /*******************************************************************/
 155          void lcd_init()
 156          { 
 157   1              LCD_RST = 0;             //液晶复位
 158   1          delay(30);                   
 159   1          LCD_RST = 1;      
 160   1          delay(5);
 161   1          LCD_PSB = 1;         //并口方式
 162   1          
 163   1          lcd_wcmd(0x34);      //扩充指令操作
 164   1          delay(5);
 165   1          lcd_wcmd(0x30);      //基本指令操作
 166   1          delay(5);
 167   1          lcd_wcmd(0x0C);      //显示开,关光标
 168   1          delay(5);
 169   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 170   1          delay(5);
 171   1      }
 172          
 173          /*********************************************************/
 174          /*                                                       */
 175          /* 设定显示位置                                          */
 176          /*                                                       */
 177          /*********************************************************/
 178          void lcd_pos(uchar X,uchar Y)
C51 COMPILER V8.05a   4×4_KEY                                                             11/23/2006 15:04:53 PAGE 4   

 179          {                          
 180   1         uchar  pos;
 181   1         if (X==0)
 182   1           {X=0x80;}
 183   1         else if (X==1)
 184   1           {X=0x90;}
 185   1         else if (X==2)
 186   1           {X=0x88;}
 187   1         else if (X==3)
 188   1           {X=0x98;}
 189   1         pos = X+Y ;  
 190   1         lcd_wcmd(pos);     //显示地址
 191   1      }
 192          
 193          /*************************************************************/
 194          /*                                                           */
 195          /* 键扫描子程序                                              */
 196          /*                                                           */
 197          /*************************************************************/
 198           void  keyscan(void)
 199           { 
 200   1          P1=0x0F;                 //低四位输入  
 201   1          delay(1);
 202   1              temp=P1;                 //读P1口 
 203   1          temp=temp&0x0F;
 204   1          temp=~(temp|0xF0);
 205   1          if(temp==1)
 206   1              key=0;
 207   1          else if(temp==2)
 208   1              key=1;
 209   1          else if(temp==4)
 210   1              key=2;
 211   1          else if(temp==8)
 212   1              key=3;
 213   1          else
 214   1              key=16;
 215   1              
 216   1          P1=0xF0;                //高四位输入
 217   1          delay(1);
 218   1              temp=P1;                //读P1口       
 219   1          temp=temp&0xF0;
 220   1          temp=~((temp>>4)|0xF0);
 221   1          if(temp==1)
 222   1              key=key+0;
 223   1          else if(temp==2)
 224   1              key=key+4;
 225   1          else if(temp==4)
 226   1              key=key+8;
 227   1          else if(temp==8)
 228   1              key=key+12;
 229   1          else
 230   1              key=16;
 231   1              
 232   1           dis_buf = key;                  //键值入显示缓存
 233   1           dis_buf = dis_buf & 0x0f;
 234   1       
 235   1               if(dis_buf>9)               //转换为ASCII码
 236   1            dis_buf = dis_buf+0x37;
 237   1           else
 238   1                dis_buf = dis_buf+0x30;
 239   1      
 240   1                lcd_pos(2,5);
C51 COMPILER V8.05a   4×4_KEY                                                             11/23/2006 15:04:53 PAGE 5   

 241   1                lcd_wdat(dis_buf);      //显示键值
 242   1       }
 243          
 244          /*************************************************************/
 245          /*                                                           */
 246          /*判断键是否按下                                             */
 247          /*                                                           */
 248          /*************************************************************/
 249          void  keydown(void)
 250           {  
 251   1              P1=0xF0;
 252   1              if(P1!=0xF0)
 253   1              {
 254   2                keyscan();
 255   2                beep();
 256   2                delay(60);
 257   2          }
 258   1       }
 259          
 260          /*********************************************************/
 261          /*                                                                                                               */
 262          /* 主程序                                                                                */
 263          /*                                                       */
 264          /*********************************************************/
 265          void  main()
 266           {
 267   1           uchar i;
 268   1          
 269   1           BEEP=1;
 270   1      
 271   1           delay(10);                 //延时
 272   1           lcd_init();                //初始化LCD             
 273   1              
 274   1           lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
 275   1           for(i=0;i<16;i++)                       
 276   1           lcd_wdat(dis1[i]);        //显示字符
 277   1            
 278   1           lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
 279   1           for(i=0;i<16;i++)
 280   1           lcd_wdat(dis2[i]);        //显示字符
 281   1      
 282   1               lcd_pos(2,0);             //设置显示位置为第三行的第1个字符
 283   1           for(i=0;i<16;i++)
 284   1           lcd_wdat(dis3[i]);        //显示字符
 285   1      
 286   1               lcd_pos(3,0);             //设置显示位置为第四行的第1个字符
 287   1               for(i=0;i<16;i++)
 288   1           lcd_wdat(dis4[i]);        //显示字符
 289   1       
 290   1           while(1)
 291   1           {
 292   2             keydown();      
 293   2           }
 294   1      }
 295          
 296          /*********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    516    ----
   CONSTANT SIZE    =     68    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V8.05a   4×4_KEY                                                             11/23/2006 15:04:53 PAGE 6   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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