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

📄 zlg7290demo2.c

📁 ADuC848BS32-5驱动ZLG7290键盘控制芯片
💻 C
字号:
/*
	ZLG7290演示程序
	芯片:ADuC848BS32-5
	外部晶振:32.768kHz
	日期:2008.09.17
	调试成功
*/
//#include <aduc848.h>
#include "I2C1.h"
#include "ZLG7290.h"
//==============================================================================
//功能键定义

//      名称       J61引脚/编号
#define KEY_SET		1
#define KEY_ENTER	2
#define KEY_RANGE	3
#define KEY_UNIT	4
#define KEY_PRNT	5
#define KEY_COMM	6
#define KEY_TEST	7
#define KEY_CALIB	8

//==============================================================================
//定义键盘中断标志,FlagINT=1表示有键按下
volatile bit FlagINT = 0;
//==============================================================================
sbit LCD_1 = P2^7;
sbit LCD_2 = P2^6;
sbit LCD_3 = P2^5;
sbit LCD_4 = P2^4;
sbit LCD_5 = P2^3;
sbit LCD_6 = P2^2;

//==============================================================================
/*
函数:INT0_SVC()
功能:ZLG7290键盘中断服务程序
说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
*/
void INT0_SVC() interrupt 2
{
	FlagINT = 1;
}

/*
函数:Delay()
功能:延时10ms~655.36s
参数:
	t>0时,延时(t*0.01)s
	t=0时,延时655.36s
说明:
	晶振采用11.0592MHz
*/
void Delay(unsigned int t)
{
	do
	{
		TH0 = 0xDC;
		TL0 = 0x00;
		TR0 = 1;
		while ( !TF0 );
		TF0 = 0;
		TR0 = 0;
	} while (--t);
}

/*
函数:SystemInit()
功能:系统初始化
*/
void SystemInit()
{
	I2C_Init();
	TMOD = 0x01;
	Delay(30);		//等待ZLG7290复位完毕
}

/*
函数:ClearAll()
功能:清除所有显示
*/
void ClearAll()
{
	unsigned char x;
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Download(x,0,0,31);
	}
}

/*
函数:Test_DispBuf()
功能:测试直接写显存
*/
void Test_DispBuf()
{
	code char DispDat[16] =
	{//字母AbCdEFgHiJkLoPqr的字形数据
		0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x6E,
		0x20,0x70,0x0E,0x1C,0x3A,0xCE,0xE6,0x0A
	};
	unsigned char n;
	unsigned char x;
	unsigned char reg;
	unsigned char dat;
	for ( n=0; n<16; n++ )
	{
		for ( x=0; x<8; x++ )
		{
			reg = ZLG7290_DpRam + x;
			dat = DispDat[n];
			ZLG7290_WriteReg(reg,dat);
		}
		Delay(50);
	}
}

/*
函数:Test_Download()
功能:测试下载数据功能
*/
void Test_Download()
{
	unsigned char x;
	bit dp;
	bit flash;
	char dat;
//点亮所有数码管
	dp = 1;
	flash = 0;
	dat = 8;
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Download(x,dp,flash,dat);
	}
	Delay(100);
//依次显示所有字型
	dp = 0;
	flash = 0;
	for ( dat=0; dat<32; dat++ )
	{
		for ( x=0; x<8; x++ )
		{
			ZLG7290_Download(x,dp,flash,dat);
		}
		Delay(50);
	}
}

/*
函数:Test_ScanNum()
功能:测试不同扫描位数
说明:扫描位数越少,数码管就越亮
*/
void Test_ScanNum()
{
	unsigned char x;
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Download(x,1,0,8);
	}
	Delay(100);
	for ( x=0; x<8; x++ )
	{
		ZLG7290_WriteReg(ZLG7290_ScanNum,x);
		Delay(100);
	}
}

/*
函数:Test_Flash()
功能:测试闪烁功能
*/
void Test_Flash()
{
	char dat = 0x01;
	unsigned char x;
//显示01234567
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Download(x,0,0,x);
	}
//设置闪烁控制寄存器
	ZLG7290_WriteReg(ZLG7290_FlashOnOff,0x11);	
//闪烁演示
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Flash(dat);
		dat <<= 1;
		Delay(300);
	}
//数码管的8个位一起闪烁
	ZLG7290_Flash(0xFF);
	Delay(350);
//停止闪烁
	ZLG7290_Flash(0x00);
	Delay(50);
}

/*
函数:Test_SegOnOff()
功能:测试段寻址功能
*/
void Test_SegOnOff()
{
	unsigned char seg;
	ClearAll();
	Delay(100);
	for ( seg=0; seg<64; seg++ )
	{
		ZLG7290_SegOnOff(seg,1);
		Delay(30);
	}
	Delay(100);
	for ( seg=0; seg<64; seg++ )
	{
		ZLG7290_SegOnOff(seg,0);
		Delay(30);
	}
	Delay(100);
}

/*
函数:DispValue()
功能:显示100以内的数值
参数:
	x:显示位置,取值0~6
	dat:要显示的数据,取值0~99
*/
void DispValue(char x, unsigned char dat)
{
	unsigned char d;
	d = dat / 10;
	ZLG7290_Download(x,0,0,d);
	d = dat - d * 10;
	ZLG7290_Download(x+1,0,0,d);
}

/*
函数:DispHexValue()
功能:以16进制方式显示数值
参数:
	x:显示位置,取值0~6
	dat:要显示的数据,取值0~255
*/
void DispHexValue(char x, unsigned char dat)
{
	unsigned char d;
	d = dat / 16;
	ZLG7290_Download(x,0,0,d);
	d = dat - d * 16;
	ZLG7290_Download(x+1,0,0,d);
}

/*
函数:Test_Key()
功能:测试按键功能
*/
void Test_Key()
{
	unsigned char KeyValue;
	unsigned char RepeatCnt;
	unsigned char FnKeyValue;
	ClearAll();
	EA = 0;
	IT1 = 1;	//负边沿触发中断
	EX1 = 1;	//允许外部中断1
	EA = 1;
	for (;;)
	{
		if ( FlagINT )		//如果有键按下
		{
		//清除中断标志
			FlagINT = 0;
		//读取键值、连击计数器值、功能键值
			ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
			ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
			ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
		//显示键值、连击计数器值、功能键值
			DispValue(0,KeyValue);
			DispHexValue(3,RepeatCnt);
			DispHexValue(6,FnKeyValue);
		}
		PCON |= 0x01;	//使CPU进入空闲状态,任一中断可唤醒
	}
}
//=========================================================
//=========================================================

void Initial_LED(void)
{
		LCD_1 = 0;
		LCD_2 = 0;
		LCD_3 = 0;
		LCD_4 = 0;
		LCD_5 = 0;
		LCD_6 = 0;
}

//=========================================================
//=========================================================
void main()
{
	//=========================================================
	unsigned char KeyValue;
	unsigned char RepeatCnt;
	//unsigned char FnKeyValue;
	
	unsigned char KeyNum;
	//=========================================================
	CFG848 = 0x81;
	
	Initial_LED();
	//=========================================================
	SystemInit();			//系统初始化
	/*
	Test_DispBuf();		//测试直接写显存
	Test_Download();	//测试下载数据
	Test_ScanNum();		//测试不同扫描位数
	Test_Flash();			//测试闪烁功能
	Test_SegOnOff();	//测试段寻址功能
	Test_Key();				//测试键盘功能
	*/
	EA = 0;
	IT1 = 1;	//下降沿触发中断
	EX1 = 1;	//允许外部中断1
	EA = 1;
	//=========================================================
	while (1)
	{
			if( FlagINT )							//如果有键按下
      {
                FlagINT = 0;		//清除中断标志
                ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);					//读取键值
                ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);	//读取连击计数器值
		
                //LCD_DI = 1;			//测试语句
                KeyNum = KeyValue%10;
                switch( KeyNum )
                {
                   case KEY_SET:
                        Initial_LED();
                        LCD_1 = 1;
                        //ZLG7290_SegOnOff(7,1);
                        break;
                        
                   case KEY_ENTER:
    	                Initial_LED();
    	                LCD_2 = 1;
    	                //ZLG7290_SegOnOff(6,1);
    	                break;    	        
    	            
    	            case KEY_RANGE:
    	                Initial_LED();
    	                LCD_3 = 1;
    	                //ZLG7290_SegOnOff(5,1);
    	                break; 
    	            
    	            case KEY_UNIT:
    	                Initial_LED();
    	                LCD_4 = 1;
    	                //ZLG7290_SegOnOff(4,1);
    	                break;    	 
    	            
    	            case KEY_PRNT:
    	                Initial_LED();
    	                LCD_5 = 1;
    	                //ZLG7290_SegOnOff(3,1);
    	                break;    	              
    	                 	        
    	            case KEY_COMM:
    	                Initial_LED();
    	                LCD_6 = 1;
    	                //ZLG7290_SegOnOff(2,1);
    	                break;
    	                
    	            case KEY_TEST:
    	                //Initial_LED();
    	                //LCD_7 = 1;
    	                //ZLG7290_SegOnOff(1,1);
    	                break; 
    	                  	        
    	            case KEY_CALIB:
    	                //Initial_LED();
    	                //LCD_8 = 1;
    	                //ZLG7290_SegOnOff(0,1);
    	                break;
    	                
    	            default:	            
    	                //Initial_LED();
    	                break;
    	        }    	        
	    }
	}
}

⌨️ 快捷键说明

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