?? zlg7290_avr.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 + -