📄 hd7279a_driver.c
字号:
#include<config.c>//管脚配置文件
#include<reg51.h>
#define HD7279A_RESET 0xA4//重启指令
#define HD7279A_TEST 0xBF//测试指令
#define HD7279A_LEFT 0xA1//左移指令
#define HD7279A_RIGHT 0xA0//右移指令
#define HD7279A_CLEFT 0xA3//循环左移
#define HD7279A_CRIGHT 0xA2//循环右移
#define HD7279A_FLASH 0x88//闪烁控制
#define HD7279A_VISIBLE 0x98//消隐控制
#define HD7279A_SEG_ON 0xE0//段点亮
#define HD7279A_SEG_OFF 0xC0//段关闭
#define HD7279A_READ_KEY 0x15//读取键盘数据
//sbit HD7279A_LCSPIN=P3^2;//片选指令,低电平有效
//sbit HD7279A_CLKPIN=P3^3;//脉冲,上升沿数据有效
//sbit HD7279A_DATAPIN=P3^4;//串行数据输入端
//sbit HD7279A_KEYPIN=P3^5;//按键有效输出端
void HD7279A_Delay(unsigned int uiTime);//延迟函数,参数:时间
void HD7279A_SendData(unsigned char ucCMD,unsigned char ucData);//传输数据,参数:命令,数据
void HD7279A_SendCommand(unsigned char ucByte);//传输命令,参数:命令
unsigned char HD7279A_ReadByte(unsigned char ucCMD);//读取字节,参数:命令
void HD7279A_Delay(unsigned int uiTime)
{
unsigned int i;
for(i=0;i<uiTime;i++)//粗略延时
{
;
}
}
void HD7279A_SendCommand(unsigned char ucByte)
{
unsigned char i;
HD7279A_LCSPIN=0;//片选
HD7279A_Delay(0x30);//延迟30us左右
for(i=0;i<8;i++)//循环左移,串行传输数据
{
if(ucByte&0x80)//取最高位
{
HD7279A_DATAPIN=1;//传输
}
else
{
HD7279A_DATAPIN=0;
}
HD7279A_CLKPIN=1;//设定上升沿环境
HD7279A_Delay(0x08);//延时8us
HD7279A_CLKPIN=0;//设定clk低电平
HD7279A_Delay(0x08);
ucByte<<=1;//左移
}
HD7279A_DATAPIN=0;
HD7279A_LCSPIN=1;
}
void HD7279A_SendData(unsigned char ucCMD,unsigned char ucData)
{
unsigned char i;
HD7279A_LCSPIN=0;
HD7279A_Delay(0x30);
for (i=0;i<8;i++)//首先传输指令
{
if (ucCMD&0x80)
{
HD7279A_DATAPIN=1;
}
else
{
HD7279A_DATAPIN=0;
}
HD7279A_CLKPIN=1;
HD7279A_Delay(0x08);
HD7279A_CLKPIN=0;
HD7279A_Delay(0x08);
ucCMD<<=1;
}
HD7279A_Delay(0x11);//延迟,等待传输数据
for (i=0;i<8;i++)//传输数据
{
if(ucData&0x80)
{
HD7279A_DATAPIN=1;
}
else
{
HD7279A_DATAPIN=0;
}
HD7279A_CLKPIN=1;
HD7279A_Delay(0x08);
HD7279A_CLKPIN=0;
HD7279A_Delay(0x08);
ucData<<=1;
}
HD7279A_DATAPIN=0;
HD7279A_Delay(0x08);
HD7279A_LCSPIN=1;
HD7279A_Delay(0x08);
}
unsigned char HD7279A_ReadByte(unsigned char ucCMD)
{
unsigned char i;
unsigned char ucRec=0;
HD7279A_LCSPIN=0;
HD7279A_Delay(0x30);
for(i=0;i<8;i++)//传输读取字节命令
{
if(ucCMD&0x80)
{
HD7279A_DATAPIN=1;
}
else
{
HD7279A_DATAPIN=0;
}
HD7279A_CLKPIN=1;
HD7279A_Delay(0x08);
HD7279A_CLKPIN=0;
HD7279A_Delay(0x08);
ucCMD<<=1;
}
HD7279A_DATAPIN=1;
HD7279A_Delay(0x14);
for(i=0;i<8;i++)//开始接受数据
{
HD7279A_CLKPIN=1;
HD7279A_Delay(0x05);
ucRec<<=1;
if(HD7279A_DATAPIN==1)
{
ucRec=ucRec|0x01;//存储到ucRec中
}
HD7279A_Delay(0x08);
HD7279A_CLKPIN=0;
}
HD7279A_DATAPIN=0;
HD7279A_LCSPIN=1;
return ucRec;//返回数据
}
main()
{
unsigned int i,j;
while(1)
{
for(i=0;i<2000;i++)
{
;
}
P0=0xFF;
HD7279A_SendCommand(HD7279A_RESET);
HD7279A_SendData(0xc8,0x08);
HD7279A_SendData(0xc9,0x00);
HD7279A_SendData(0xca,0x00);
HD7279A_SendData(0xcb,0x02);
for (i=0;i<300;i++)
{
for (j=0;j<2000;j++)
{
;
}
}
P0=0x00;
HD7279A_SendCommand(HD7279A_RESET);
HD7279A_SendCommand(HD7279A_TEST);
for (i=0;i<300;i++)
{
for (j=0;j<2000;j++)
{
;
}
}
P0=0xff;
HD7279A_SendCommand(HD7279A_RESET);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -