ch452按键 程序

#include
#include

#define uint unsigned int
#define uchar unsigned char

sbit dclk = P1 ^ 4;
sbit din = P1 ^ 5;
sbit load = P1 ^ 6;
sbit dout = P1 ^ 7;

uchar i,j,cmd1,keycode;
uint cmd;
unsigned long u,result;
void CH452_Write(unsigned short cmd);
void CH452_Read(void);

void CH452_Write(unsigned short cmd)
{
load=0; //命令开始,LOAD=0
for(i=0;i!=12;i++) //送入12位数据,低位在前
{
dclk=0;
din=cmd&1;
dclk=1; //上升沿有效
cmd=cmd>>1;
}
load=1; //加载数据,LOAD上升沿
for(j=0;j<100;j++){ }
}

void CH452_Read(void)
{
cmd1=0x07; //读按键的命令字
load=0;
for(i=0;i!=4;i++) // 只需要发出高4位,多发也可以,但应该确保最后留下的4位是该命令码
{
din=cmd1&1;
dclk=0;
cmd1>>=1; //往右移一位
dclk=1; //产生时钟上升沿锁通知CH451输入位数据
}
load=1; //产生加载上升沿通知CH451处理命令数据

for(j=0;j<100;j++){ }

keycode=0; //清除keycode
for(i=0;i!=7;i++)
{
keycode<<=1; //数据移入keycode,高位在前,低位在后
if (dout)
{ keycode++;} //从高到低读入451的数据
// keycode|=CH452_DOUT;
dclk=0; //产生时钟下升沿通知CH451输出下一位
dclk=1;
}

}





void main(void){

WDTCN = 0xde; // disable watchdog timer
WDTCN = 0xad;
OSCICN=0x94;

XBR2=0x40;



//cmd=0x092f;
CH452_Write(CH452_RESET);
CH452_Write(CH452_BCD ); // 选择BCD译码方式,扫描极限为4个数码管
CH452_Write(CH452_SYSON2); // 开启显示

CH452_Write(CH452_DIG3 | 5);
CH452_Write(CH452_DIG2 | 6);
CH452_Write(CH452_DIG1 | 7);
CH452_Write(CH452_DIG0 | 8); // 4位数码管显示字符1234

CH452_Write(CH452_DIG7 | 1);
CH452_Write(CH452_DIG6 | 2);
CH452_Write(CH452_DIG5 | 3);
CH452_Write(CH452_DIG4 | 4); // 4位数码管显示字符1234

while(1){
CH452_Read();
if(keycode==0x40){
CH452_Write(CH452_DIG3 | 1);
CH452_Write(CH452_DIG2 | 1);
CH452_Write(CH452_DIG1 | 1);
CH452_Write(CH452_DIG0 | 1); // 4位数码管显示字符1234

CH452_Write(CH452_DIG7 | 1);
CH452_Write(CH452_DIG6 | 1);
CH452_Write(CH452_DIG5 | 1);
CH452_Write(CH452_DIG4 | 1); // 4位数码管显示字符1234
}
if(keycode==0x48){
CH452_Write(CH452_DIG3 | 2);
CH452_Write(CH452_DIG2 | 2);
CH452_Write(CH452_DIG1 | 2);
CH452_Write(CH452_DIG0 | 2); // 4位数码管显示字符1234

CH452_Write(CH452_DIG7 | 2);
CH452_Write(CH452_DIG6 | 2);
CH452_Write(CH452_DIG5 | 2);
CH452_Write(CH452_DIG4 | 2); // 4位数码管显示字符1234
}
if(keycode==0x50){
CH452_Write(CH452_DIG3 | 3);
CH452_Write(CH45

2_DIG2 | 3);
CH452_Write(CH452_DIG1 | 3);
CH452_Write(CH452_DIG0 | 3); // 4位数码管显示字符1234

CH452_Write(CH452_DIG7 | 3);
CH452_Write(CH452_DIG6 | 3);
CH452_Write(CH452_DIG5 | 3);
CH452_Write(CH452_DIG4 | 3); // 4位数码管显示字符1234
}
if(keycode==0x58){
CH452_Write(CH452_DIG3 | 4);
CH452_Write(CH452_DIG2 | 4);
CH452_Write(CH452_DIG1 | 4);
CH452_Write(CH452_DIG0 | 4); // 4位数码管显示字符1234

CH452_Write(CH452_DIG7 | 4);
CH452_Write(CH452_DIG6 | 4);
CH452_Write(CH452_DIG5 | 4);
CH452_Write(CH452_DIG4 | 4); // 4位数码管显示字符1234
P7 |=0xf0;
}

if(keycode==0x60){
CH452_Write(CH452_DIG3 | 5);
CH452_Write(CH452_DIG2 | 5);
CH452_Write(CH452_DIG1 | 5);
CH452_Write(CH452_DIG0 | 5); // 4位数码管显示字符1234

CH452_Write(CH452_DIG7 | 5);
CH452_Write(CH452_DIG6 | 5);
CH452_Write(CH452_DIG5 | 5);
CH452_Write(CH452_DIG4 | 5); // 4位数码管显示字符1234
P7 &=0x0f;

}
}
CH452_Write(CH452_RIGHTCYC);
}





//}

相关文档
最新文档