⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hd7279a_driver.c

📁 懒人HD7279A驱动模块
💻 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 + -