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

📄 zlg7290b.c

📁 msp430f247下周立功ZLG7290键盘显示测试
💻 C
字号:

#include "zlg7290B.h"
volatile bit FlagINT = 0;			   //定义键盘中断标志,FlagINT=1 表示有键按下
sbit p34=P3^4;
bit ZLG7290_Download(char addr, bit dp, bit flash, char dat); 
unsigned char i=0;
unsigned char KeyValue=1;
unsigned char RepeatCnt=0;
unsigned char FunctionKey=0;

/******************************************************************************
函数:INT0_SVC()
功能:ZLG7290 键盘中断服务程序
说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
******************************************************************************/
void Test_Flash();
void DispValue(char x, unsigned char dat);
void INT0_SVC() interrupt 0
{
/*unsigned char x;
i++;
if((i%2)==0)
{
//for ( x=0; x<8; x++ )//显示01234567
//{
  ZLG7290_Download(4,0,0,3);
//}
}
else
{
//for ( x=7; x>0; x-- )//显示01234567
//{
  
}*/
//Test_Flash(); //测试闪烁功能
//ZLG7290_Download(4,0,0,4);
//p34=0;
FlagINT = 1;
//ZLG7290_ReadReg(0x01,&KeyValue);
//I2C_Read();
//DispValue(0,KeyValue-200);//显示键值、连击计数器值、功能键值
//}
}

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

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

/*************************
函数:ClearAll()
功能:清除所有显示
*************************/
void ClearAll()
{
unsigned char x;
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,0,0,31);    //00011111,表示不显示,循环8次,将8个数码管显示都清除
}
}


/*********************
函数:Test_DispBuf()
功能:测试直接写显存
*********************/
void Test_DispBuf()
{ 
code char DispDat[16] ={0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x6E,0x20,0x70,0x0E,0x1C,0x3A,0xCE,0xE6,0x0A};
                       //字母AbCdEFgHiJkLoPqr 的字形数据    ?
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);
      }
     Delay1(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);
}
Delay1(100);

dp = 0;  //依次显示所有字型
flash = 0;
for ( dat=0; dat<32; dat++ )
{
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,dp,flash,dat);
}
Delay1(50);
}
}


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


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


/*********************
函数:Test_SegOnOff()
功能:测试段寻址功能
**********************/
void Test_SegOnOff()
{
unsigned char seg;
ClearAll();
Delay1(100);
for ( seg=0; seg<64; seg++ )
 {
   ZLG7290_SegOnOff(seg,1);
   Delay1(30);
 }
Delay1(100);
for ( seg=0; seg<64; seg++ )
 {
   ZLG7290_SegOnOff(seg,0);
   Delay1(30);
 }
Delay1(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 RepeatCnt;
//unsigned char FnKeyValue;
//unsigned char i,j;
ClearAll();
//ZLG7290_Download(7,0,0,6);
while(1)
{
  if ( FlagINT ) //如果有键按下
  {
    FlagINT = 0;    //清除中断标志
	
	//idle();

	//FunctionKey=gets2(ZLG7290_FunctionKey);
	KeyValue=gets2(ZLG7290_Key);
	RepeatCnt=gets2(ZLG7290_RepeatCnt);
    
	
    //KeyValue=ZLG7290_ReadReg(ZLG7290_Key);
    
	
	DispValue(0,KeyValue);
	DispValue(3,RepeatCnt/2);
   // Delay1(30);
    
	//DispValue(6,FunctionKey);
	
	
	/*for(i=0;i<50;i++)
	{
	    for(j=0;j<100;j++){;}}*/
	//idle();
	
	
   //if(ZLG7290_ReadReg(ZLG7290_Key,&KeyValue)) 
      //读取键值、连击计数器值、功能键值
   //p34=1;
	//
    //ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
    //ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
    
	
    //DispHexValue(3,RepeatCnt);
    //DispHexValue(6,FnKeyValue);
  }
 PCON |= 0x01; //使CPU 进入空闲状态,任一中断可唤醒
}
}



void main()
{
unsigned char i;
SystemInit(); //系统初始化
I2CCON=0xa8;
IT0 = 0; //负边沿触发中断
EX0 = 1; //允许外部中断
PT0=1;
EA = 1;
I2C_Init();
/*while(1)
{
  //for(i=0;i<8;i++)
 //ZLG7290_WriteReg(ZLG7290_DpRam+i,0xfe);
 for(i=0;i<8;i++)
 {ZLG7290_Download(i,0,0,i+1);}
}

//{for(i=0;i<8;i++)
//{ZLG7290_Download(i,0,0,i+1);}
//}

ZLG7290_Download(0,0,0,0);*/


//Test_DispBuf(); //测试直接写显存
//Test_Download(); //测试下载数据
//Test_ScanNum(); //测试不同扫描位数
//Test_Flash(); //测试闪烁功能
//Test_SegOnOff(); //测试段寻址功能
Test_Key(); //测试键盘功能
//while (1)
                                                                                                                                           
//{

//}
}

⌨️ 快捷键说明

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