📄 7290test.c
字号:
/**************************************************************************
NAME:7290test.c
copyright:wzz at Qingdao University 2008.12.27
**************************************************************************/
#include "..\inc\WOPTIONS.h"
#include "..\ucos\includes.h"
#include "..\porting\port.h"
//---------------------------------------------------------
/*
函数:ClearAll()
功能:清除所有显示
*/
void ClearAll()
{
unsigned char x;
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,0,0,31);
}
}
//---------------------------------------------------------
/*
函数:Test_DispBuf()
功能:测试直接写显存
*/
void Test_DispBuf()
{
U8 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(500);
}
}
//---------------------------------------------------------
/*
函数:Test_Download()
功能:测试下载数据功能
*/
void Test_Download()
{
unsigned char x;
U8 dp;
U8 flash;
char dat;
//点亮所有数码管
dp = 1;
flash = 0;
dat = 8;
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,dp,flash,dat);
}
Delay(2000);
//依次显示所有字型
dp = 0;
flash = 0;
for ( dat=0; dat<32; dat++ )
{
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,dp,flash,dat);
}
Delay(2000);
}
}
//---------------------------------------------------------
/*
函数:Test_ScanNum()
功能:测试不同扫描位数
说明:扫描位数越少,数码管就越亮
*/
void Test_ScanNum()
{
unsigned char x;
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,1,0,8);
}
Delay(1000);
for ( x=0; x<8; x++ )
{
ZLG7290_WriteReg(ZLG7290_ScanNum,x);
Delay(250);
}
}
//---------------------------------------------------------
/*
函数: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(100);
}
//数码管的8个位一起闪烁
ZLG7290_Flash(0xFF);
Delay(100);
//停止闪烁
ZLG7290_Flash(0x00);
Delay(1000);
}
//---------------------------------------------------------
/*
函数:Test_SegOnOff()
功能:测试段寻址功能
*/
void Test_SegOnOff()
{
unsigned char seg;
ClearAll();
Delay(100);
for ( seg=0; seg<64; seg++ )
{
ZLG7290_SegOnOff(seg,1);
Delay(70);
}
Delay(500);
for ( seg=0; seg<64; seg++ )
{
ZLG7290_SegOnOff(seg,0);
Delay(70);
}
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();
//Non-vectored,IRQ enable,FIQ disable
rINTCON=0x5;
rEXTINT=0x20;
//Non maksed TIMER0 .
// rI_ISPC=BIT_TIMER1;
rINTMSK=~((0x1<<24) | (0x1<<26)); //Default value=0x7ffffff
// EA = 0;
// IT0 = 1; //负边沿触发中断
// EX0 = 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 main()
//{
// SystemInit(); //系统初始化
// Test_DispBuf(); //测试直接写显存
// Test_Download(); //测试下载数据
// Test_ScanNum(); //测试不同扫描位数
// Test_Flash(); //测试闪烁功能
// Test_SegOnOff(); //测试段寻址功能
// Test_Key(); //测试键盘功能
// while (1);
//}
//********************************************************************
//键盘转换数组
U8 KeyDispDat[64]=
{0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0x49,0x4A,0x4B,0x4C,0,0,0,0,
0x45,0x46,0x47,0x48,0,0,0,0,
0x41,0x42,0x43,0x44,0,0,0,0,
0,0,0,0,0,0,0,0,
};
//---------------------------------------------------------
void irq_7290()//zlg7290键盘中断服务程序,数码管显示同时串口输出
{
U8 KeyValue;
U8 RepeatCnt;
U8 FnKeyValue;
ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
// if(0==KeyValue)
// { ZLG7290_ReadReg(ZLG7290_FunctionKey,&KeyValue);}
DispValue(0,KeyValue);
DispHexValue(3,RepeatCnt);
DispHexValue(6,FnKeyValue);
Uart_SendByte(0,KeyDispDat[KeyValue-1]);
}
//---------------------------------------------------------
void Open7290()//打开7290对应的外部中断1
{
SetISR_Interrupt(EINT1_OFFSET,irq_7290, 0);
}
//---------------------------------------------------------
void Close7290()//关闭7290对应的外部中断1
{
ClearISR_Interrupt(EINT1_OFFSET);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -