找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1772|回复: 1
打印 上一主题 下一主题
收起左侧

c51编写的TIMER定时4*4键盘

[复制链接]
跳转到指定楼层
楼主
上实验课写的代码,附件里有c15的代码,proteus仿真图,自己写的。有错请指出。
  1. #include <reg52.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char       
  4. int i=0;
  5. char disp_buff [] ={0, 0, 0, 0};
  6. uchar code table[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  7. uchar flag = 0;  




  8. void setTimer0()
  9. {
  10.         TMOD|=0X01;
  11.         EA=1;
  12.         ET0=1;
  13.         TH0=0XFC;       
  14.         TL0=0X18;         
  15.        
  16.        
  17.        
  18. }


  19. void Timer0() interrupt 1
  20. {
  21.         TH0=0XFC;       
  22.         TL0=0X18;       
  23.         flag = 1;
  24. }


  25. void display(void)               
  26. {
  27.     char code wei[] = {8, 4, 2, 1};//λѡ′úÂë
  28.     char i;
  29.     for (i = 0; i < 4; i++)
  30.          {
  31.    
  32.                         TR0 = 1;   
  33.        
  34.         while(!flag){
  35.          P0 = table[disp_buff [i]];
  36.       P2 = ~wei[i];}
  37.         if(flag){
  38.         TR0 = 0;     
  39.         flag = 0;         }
  40.                
  41.                         P0 = 0XFF;
  42.                  
  43.                  
  44.                  
  45.           }
  46.           }

  47.                
  48. uchar Keyscan(void)
  49. {
  50.     uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
  51.     for(j = 0; j < 4; j++) { //Ñ-»·ËÄ′Î
  52.       P1 = Buffer[j];         //ÔúP1¸ßËÄλ·Ö±eêä3öò»¸öμíμçƽ
  53.       temp = 0x01;            //¼Æ»®ÏèÅD¶ÏP1.0λ
  54.       for(i = 0; i < 4; i++) { //Ñ-»·ËÄ′Î
  55.         if(!(P1 & temp))      //′óP1μíËÄ룬½Øè¡1λ
  56.           return (i + j * 4); //·μ»Øè¡μÃμÄ°′¼üÖμ
  57.         temp <<= 1;           //ÅD¶ÏμÄ룬×óòÆò»Î»
  58.     } }
  59.     return 16;   }

  60.                



  61.     void  main(void)
  62. {
  63.     unsigned char i, key;
  64.            setTimer0();
  65.     while(1)  {                   //ÎTÏTÑ-»·
  66.       display();                  //ÏÔê¾ò»±é
  67.       key = Keyscan();           //¶á3öò»±é¼üÅì
  68.       if (key < 16) {     //èç1ûóDèË°′¼ü
  69. //--------------------½øDD°′¼ü′|àí
  70.    

  71.         disp_buff [3] = disp_buff [2];
  72.         disp_buff [2] = disp_buff [1];
  73.         disp_buff [1] = disp_buff [0];
  74.         disp_buff [0] = key;
  75. //--------------------′|àí½áêø£¬è¥μè′y°′¼üêí·Å

  76.                
  77.                 for (i = 0; i < 20; i++)  display();        //Ëé¿aÏû¶¶
  78.         while(key != 16) {        
  79.           key = Keyscan();      
  80.           display();            
  81.     } } }                        
  82. }
复制代码


7$7{OFBH_TNT6SM3~K{640L.png (24.93 KB, 下载次数: 48)

7$7{OFBH_TNT6SM3~K{640L.png

L%AIR11P2F30B)(SETH_C2O.png (8.54 KB, 下载次数: 37)

L%AIR11P2F30B)(SETH_C2O.png

Desktop.rar

24.14 KB, 下载次数: 8, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275169 发表于 2018-1-12 17:43 | 只看该作者
用来显示黑屏 ?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表