at89s52_7289.c

来自「程序在KEIL上调试成功」· C语言 代码 · 共 178 行

C
178
字号
#include"REG52.H"


sbit cs_7289  = P1^2;
sbit clk_7289 = P1^3;
sbit dio_7289 = P1^4;
sbit key_7289 = P3^3;

#define uchar      unsigned char
#define uint       unsigned int

#define ZLG7289_CMD_RST                   0XA4  //复位
#define ZLG7289_CMD_TEST                  0XBF  // 测试
#define ZLG7289_CMD_LSHIFT		  0xA1	//左移
#define ZLG7289_CMD_RSHIFT	      	  0xA0	//右移
#define ZLG7289_CMD_CLSHIFT	          0xA3	//循环左移
#define ZLG7289_CMD_CRSHIFT	          0xA2	//循环右移

#define ZLG7289_CMD_DATA0		  0x80	//下载数据且按方式0 译码
#define ZLG7289_CMD_DATA1		  0xC8	//下载数据且按方式1 译码
#define ZLG7289_CMD_DATA3		  0x90	//下载数据但不译码

#define ZLG7289_CMD_FLASH		  0x88	//闪烁控制
#define ZLG7289_CMD_HIDE		  0x98	//消隐控制
#define ZLG7289_CMD_LDOT		  0xE0	//段点亮指令
#define ZLG7289_CMD_HDOT		  0xC0	//段关闭指令
#define ZLG7289_CMD_DATA1		  0x15	//读键盘数据指令



void delay( uint time){

        while(time--);

       }


void Send_7289_C( uchar   content ){       //纯指令

        uchar i;
	cs_7289 = 0;
	delay(5);
	for(i=0; i<8; i++)
	{
		dio_7289 = (bit)( content & 0x80 );   //检测最高位//
		    i++;
		    i--;
		    i++;
		    i--;
		clk_7289 = 1;

                    i++;
                    i--;

		content = content << 1;   //一位一位的发出去//
		clk_7289 = 0;

	}
	 dio_7289=0;
	 cs_7289=1;
}



void Send_7289_CD( uchar command, uchar data_7289 )    //16位操作命令
{
	uchar i, m, temp;
	cs_7289 = 0;
	delay(5);
	temp = command;
	for(m=0; m<2; m++)
	{
		for(i=0; i<8; i++)
		{
			dio_7289 = (bit)(temp & 0x80);
			i++;
			i--;
			i++;
		        i--;
			clk_7289 = 1;

                        i++;
                        i--;
			temp = temp << 1;
			clk_7289 = 0;

		}
		dio_7289 = 0;
		temp = data_7289;
	}
	cs_7289 = 1;
}


 uchar GetKey( void )            // 接受键盘指令
{
        uchar key_number, i;
	key_number =ZLG7289_CMD_DATA1;          //读键盘的前一个字节
	cs_7289 = 0;
	delay(5);
	for(i=0; i<8; i++)
	{
		dio_7289 = (bit)(key_number & 0x80);
		i++;
		i--;
		i++;
		i--;
		clk_7289 = 1;
	//	delay(2);
                i++;
                i--;
		key_number = key_number << 1;
		clk_7289 = 0;
	//	delay(2);
	}
	dio_7289 = 0;            //下降沿变成输出
	key_number = 0x00;        //得到八位bit 位的字节
	for(i=0; i<8; i++)
	{
		clk_7289 = 1;
		delay(1);
		key_number = key_number << 1;
		if(dio_7289)
		{
			key_number = key_number | 0x01;
		}
		clk_7289 = 0;
		delay(1);
	}
	dio_7289 = 0;
	cs_7289 = 1;
	while(~key_7289);   //强制引脚电平为高
	key_7289 = 1;
	return key_number;
}




void Init_7289(void)   // 初始化
{
	cs_7289 = 1;
	key_7289 = 1;
	clk_7289 = 0;
	dio_7289 = 1;
	delay(5);
	Send_7289_C(0xa4);
}

 uchar WaitKey(void)   //等待键盘指令
{
	while(key_7289);
	return(getkey());
}

//////////////////////////////////////////////

/////////////////////////////////////////////


main(){

        char j,i;
    while(1){
         for(i=0;i<0xf0;i++){
           init_7289();
        //  send_7289c (0xbf);
           Send_7289_CD(ZLG7289_CMD_DATA1,i); 
           for(j=0;j<8;j++){
           Send_7289_C(ZLG7289_CMD_CLSHIFT);
           delay(50000);}
           delay(50000);

         }

          }
    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?