打印

zlg7289

[复制链接]
2852|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
毅恒|  楼主 | 2007-8-16 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我要用zlg7289做一个按键的显示模块(基于SPI总线技术的),显示函数display()能正常工作,但是读键函数ReadKB()好像有问题,当用其返回值kb写入显示缓冲区dispbuff时,总是不能正常显示,望大虾指点!




#include <reg51.H>

sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit keydown=P3^3;

char dispbuff[8];

void sent(unsigned char sent_buf);
void delay(char time);
void display();
char ReadKB();

main()
{
char i,kb=0;
CS=1;
for (i=0;i<8;i++)    //初始化,执行一次
    { 
    dispbuff=16;
    }
display();
while(1)
    {
    while(keydown==1);        //检测有无按键按下
    while(keydown==0);        //等待按键弹起
    kb=ReadKB();
    dispbuff[0]=kb+16;
display();
delay(50); 
    }

 }

void sent(unsigned char sent_buf)//发送函数
{
char i;
CLK=0;                      //置SPI时钟线为低
CS=0;                       //置SPI片选线为低
delay(50);                  //延时50us
for(i=0;i<8;i++)            //发送8位数据
    {
    sent_buf=sent_buf<<1;   //从数据最高位开始,将要发发送的数据位移入进位位CY
    DIO=CY;                 //数据位送数据线
    CLK=1;                  //置SPI时钟线为高
    delay (10);             //延时10us
    CLK=0;                  //置SPI时钟线为低,发送完1位数据
    delay (10);                //延时10us
    }
DIO=0;
}

void delay(char time)        //延时函数
{
  char i;
  for(i=0;i<time;i++);
}

void display()                //显示函数
{
 char i;
 for(i=0;i<8;i++)
   {
     CS=1;
     sent(0xc8+i);
     sent(dispbuff);
     CS=1;
   }
}

char ReadKB()                   //读键值函数
{  
   char i,kb=0;
   CS=1;
   CLK=0;
   delay(50);
   sent(0x15);     //发送读键盘指令
   delay(10);
   DIO=1;
   CLK=1;
   delay(50);
   for(i=0;i<8;i++)
   {
   CLK=0;
   kb=kb*2+(char)DIO;//读1位数据
   delay(10);
   CLK=1;
   delay(10);
   }                //for循环后,kb中存放着键值
   CS=1;
   return(kb);
}

相关帖子

沙发
ayb_ice| | 2007-8-17 07:34 | 只看该作者

去ZLG的网站,那里对这个熟...

使用特权

评论回复
板凳
毅恒|  楼主 | 2007-8-17 20:19 | 只看该作者

已解决

已解决,谢谢关注!

使用特权

评论回复
地板
JDWANG| | 2007-8-18 09:00 | 只看该作者

建议换ZLG7290,现在用7289的人很少了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

50

帖子

1

粉丝