2865|3

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

单片机编程问题告急!!!希望个位大哥大姐帮忙. [复制链接]

我要实现的是4X4键盘显示电路  我键盘接P2口  显示电路用LED(8位) ,使用的是 (P3.1)串行通行 现在我要让键盘每一个键对应显示 1,2,3,....F,0,   我的单片机初始状态显示了 LED 全亮  可我的按键不能控制, 按下一点反应也没?  我在电脑上KEILC51 中编译也通过了,ISP下载也下到单片机里面去了,希望各为帮忙跟我找出原因,我的程序如下:
#include
#include
#include
  void delay ( );  
unsigned int jiansao( );
unsigned char  A[16]={0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0xfc};

void uart()
{               
       TH0=0xf4;   //计数3000次//
           TL0=0x48;
       TR0=1;
}


main ( )
{ TMOD=0x01;//00000001  方式1 (16位计数器//
  SCON=0x00; //8位移位寄存器   开起串口//
  uart();     
   
  ET0=1; EA=1;
for (; ;);
}  
  void timer0(void) interrupt 1 using 1
{   unsigned int i;
     unsigned int key;
   

      key=jiansao( );
      delay();
     
   switch (key)
   { case 0x11: for (i=0;i<=7;i++)
                 { if (i<=7) SBUF=A[0];  while(!TI)  TI=0;};  break;
     case 0x21: for (i=0;i<=7;i++)
                    {   if (i<=7) SBUF=A[1];   while(!TI) TI=0;};  break;
     case 0x41: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[2];  while(!TI)  TI=0;};  break;
     case 0x81: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[3];  while(!TI)  TI=0;};  break;
     case 0x12: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[4];  while(!TI)  TI=0;};  break;
     case 0x22: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[5];  while(!TI)  TI=0;};  break;
     case 0x42: for (i=0;i<=7;i++)
                    {  if (i<=7) SBUF=A[6];  while (!TI)  TI=0;};  break;
     case 0x82:  for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[7];  while(!TI)  TI=0;};  break;
     case 0x14: for (i=0;i<=7;i++)
                    {if (i<=7)  SBUF=A[8];  while(!TI)  TI=0;};  break;
     case 0x24: for (i=0;i<=7;i++)
                    {if (i<=7)  SBUF=A[9];  while(!TI)  TI=0;};  break;
    case 0x44:  for (i=0;i<=7;i++)
                    {if (i<=7)  SBUF=A[10];  while(!TI)  TI=0;};  break;
    case 0x84: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[11];  while(!TI)  TI=0;};  break;
     case 0x18: for (i=0;i<=7;i++)
                    {if (i<=7)  SBUF=A[12];  while(!TI)  TI=0;};  break;
     case 0x28: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[13];  while(!TI)  TI=0;};  break;
     case  0x48: for (i=0;i<=7;i++)
                    { if (i<=7) SBUF=A[14];  while(!TI)  TI=0;};  break;
     case 0x88: for (i=0; i<=7;i++)
                     {if (i<=7) SBUF=A[15];  while (!TI)  TI=0;}; break;
    default: SBUF=0xff; break;
    }

}
   
void delay(void)    //延时去斗//
  {     unsigned int k;
      for  (k=600;  k>0;  k--);
          
    }

unsigned int jiansao  (void )     扫描子程序
{    unsigned int  lie,  han;
     P2=0xf0;
     if ((P2&0xf0)!=0xf0)   判断有无键按下
       {   delay ();  去斗
          if((P2&0xf0)!=0xf0)  确认有键按下
             {    lie=0xfe;    
                   while ((lie&0x10)!=0)
                 {     P2=lie;
                  if ((P2&0xf0)!=0xf0)
                      {   han=(P2&0xf0)|0x0f;
                                         
                           return ((~lie)+(~han));
                       }
                     else lie=(lie<<1)|0x01;
                   }
             }
       }      return (0);    无键按下 返回0

   }

最新回复

串口通讯的波特率定时器呢?while(!TI)  TI=0;这个地方可能出现死等待哦  详情 回复 发表于 2007-7-18 11:51
点赞 关注

回复
举报

55

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
P2=0xf0; //这个是不是给错了?应该给0x0F,我猜的哈...
     if ((P2&0xf0)!=0xf0)   判断有无键按下
 
 

回复

41

帖子

0

TA的资源

禁止发言

板凳
 
我猜错了,呵呵

你原来是对的
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
串口通讯的波特率定时器呢?while(!TI)  TI=0;这个地方可能出现死等待哦
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表