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 + -
显示快捷键?