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

📄 zlg7290_avr._c

📁 利用mega128控制由L298和L297构成的驱动板
💻 _C
字号:
#include <iom128v.h>
#include <iom128.h>
#include <macros.h>
//#include <stdio.h>			//标准输入输出头文件
#include "zlg7290.c"

#define uchar unsigned char
#define uint unsigned int
#pragma interrupt_handler extint0:9
//#pragma interrupt_handler miao:15

uint FlagINT = 0,flag=0;

/*
函数:interrupt_init()
功能:ZLG7290键盘中断服务初始化程序
*/
void interrupt_init(void)
{
 SEI();		//使能全局中断
 EIMSK=0x80;  //使能外部中断7
 EICRB=0x80;		//外部中断7采用下降沿触发
 DDRE&=~0x80;		    //配置中断管脚为输入
 PORTE|=BIT(PE7);	//使能中断管脚的上拉
}
/*
函数:extint0()
功能:ZLG7290键盘中断服务程序
说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
*/
void extint0(void)
{
   FlagINT = 1;
}
/*
函数:delay1()
功能:延时10ms~655.36s
参数:
	t>0时,延时(t*0.01)s
	t=0时,延时655.36s
说明:
	晶振采用8.31MHz
*/
void delay1(uint t)
{
  uint x,y;
  for(x=t;x>0;x--)
   for(y=2400;y>0;y--);
}

/*
函数:SystemInit()
功能:系统初始化
*/
void SystemInit()
{
	TWI_init();
    interrupt_init();
	delay1(30);		//等待ZLG7290复位完毕
}

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

/*
函数:Test_DispBuf()
功能:测试直接写显存
*/
void Test_DispBuf()
{
	uchar DispDat[16] =
	{//字母AbCdEFgHiJkLoPqr的字形数据
		0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x6E,
		0x20,0x70,0x0E,0x1C,0x3A,0xCE,0xE6,0x0A
	};
	uchar n;
	uchar x;
	uchar reg;
	uchar 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()
{
	uchar x;
	uchar dp;
	uchar f;
	uchar dat;
//点亮所有数码管
	dp = 1;
	f= 0;
	dat = 8;
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Download(x,dp,f,dat);
	}
	delay1(100);
//依次显示所有字型
	dp = 0;
	f = 0;
	for ( dat=0; dat<32; dat++ )
	{
		for ( x=0; x<8; x++ )
		{
			ZLG7290_Download(x,dp,f,dat);
		}
		delay1(50);
	}
}

/*
函数:Test_ScanNum()
功能:测试不同扫描位数
说明:扫描位数越少,数码管就越亮
*/
void Test_ScanNum()
{
	uchar 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);
		delay(100);
	}
}

/*
函数:Test_Flash()
功能:测试闪烁功能
*/
void Test_Flash()
{
	uchar dat = 0x01;
	uchar 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;
		delay1(300);
	}
//数码管的8个位一起闪烁
	ZLG7290_Flash(0xFF);
	delay1(350);
//停止闪烁
	ZLG7290_Flash(0x00);
	delay1(50);
}

/*
函数:Test_SegOnOff()
功能:测试段寻址功能
*/
void Test_SegOnOff()
{
	uchar 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( uint dat)//uchar x,
{
	uint d;
	//delay(1);
	//delay(1);
	//delay(1);
	d = dat%1000/100;
	ZLG7290_Download(0,0,0,d);
	d = dat%100/10;
	ZLG7290_Download(1,0,0,d);
	
	d = dat%10;
	ZLG7290_Download(2,0,0,d);
	
	
}

/*
函数:DispHexValue()
功能:以16进制方式显示数值
参数:
	x:显示位置,取值0~6
	dat:要显示的数据,取值0~255
*/
void DispHexValue(uchar x, uchar dat)
{
	uchar 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()
{
	uchar KeyValue;
	uchar RepeatCnt;
	uchar FnKeyValue;
	ClearAll();
	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);
		}
	}
}

⌨️ 快捷键说明

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