找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请教高手指点

[复制链接]
跳转到指定楼层
楼主
ID:13058 发表于 2009-5-18 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一个计算器的程序 但键盘扫描程序写完了 烧进实验板 按键时没反应 计划写一个两字节的计算程序 请高手帮忙看看  感激不尽


#include <stdio.h>
#include <AT89x051.H>
#define liekey (~P0)&0X0F
#define rowkey (~P0)&0XF0
sfr P0 = 0x80;
sfr P2 = 0xA0;
void Initial();
int Data_In();
int Comput();
bit KeyIn(void);  //如果有键按下返回 1,健值存在 KEYdata
int OP1,OP2,OP,sta;

char KeyData,Buff,Resut;
char DisBuffer[8];
char KeyData=0;
char KeyTab[]={0x7e,0x7d,0x7b,0x0be,0x0bd,0x0bb,0x0de,0x0dd,0x0db,0x0ee,0x77,0x0b7,0x0d7,0x0e7,0x0eb,0x0ed};//键盘的16个键
char Seg_Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x79};//数字的0~9 + - */ 对应 ASCD  "E"对应错误    
      

void main ()
{  bit flag=0; 
   Initial();
  while (1)

   {  flag=KeyIn();
   if( flag)
   {
            DisBuffer[1]=KeyData;
           //  Display();

      }
     else
   {
   }

     
     
        

        
 
 }
}

 

  bit KeyIn()
{   int i;
    char lie,kcode,row; //lie为列对应的低位数据的取反 row为行对应的高位数据取反
  bit keyin=0,last,temp;
     lie=liekey;    
     row=rowkey;
    if(lie!=0)
    {           //若低位出现非0的情况则为有键按下
       kcode=~(lie|row);  //将按键所对应的二进制数据送给kcode
     for(i=0;KeyTab!=kcode&&i<16;i++) 
           KeyData=i+1;
           keyin=1;
     }
     last=keyin;
 
    keyin=keyin&temp;
    temp=~last;
   return keyin;
 }
 void Initial()
 { OP1=0;
   OP2=0;
   sta=0;
   TH0=0xd8;      // ;定时时间为10ms
   TL0=0xf0;
   ET0=1;
   EA=1;
   TR0=1;
   DisBuffer[0]=0x3f;
   DisBuffer[1]=0x3f;
   DisBuffer[2]=0x3f;
    DisBuffer[3]=0x3f;

 }

 void dis (void) interrupt 1 using 2
 {
 static char dispPost=0;
TR0=0;
EA=0;
TH0=0xd8;
TL0=0xf0;
TF0=0;
P2=0xff; //先熄灭数码管 以免产生扫尾现象
P1=dispPost;
P2=DisBuffer[dispPost];
dispPost++;
if (dispPost>=8) dispPost=0;
TR0=1;
EA=1;

 }

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

使用道具 举报

沙发
ID:13058 发表于 2009-6-3 21:35 | 只看该作者

已经解决

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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