注意:經我的實驗hd7279的耐壓性能不是太好,不要超過5.5v。
/************************************************************************************/
/* */
/* S A G E T E C H . P R O P R I E T A R Y */
/* */
/* COPYRIGHT (c) 2005 BY SAGE TECH. CHINA. */
/* -- ALL RIGHTS RESERVED -- */
/* */
/* File Name: HD7279Atest.c */
/* Author: sagestar */
/* Created: 2005 */
/* Modified: no */
/* Revision: V1.0 */
/************************************************************************************/
/*程序作用:測試Sage Tech.開發板(MCP300)中hd7279鍵盤顯示芯片是否能正常工作 */
/*程序功能:按下1號鍵顯示0、1、2、3,按下2號鍵顯示c、d、e、f,按下3號鍵顯示4、5、6、7 */
/* 按下4號鍵顯示8、9、a、b,按下0號鍵點亮4個LED燈 */
/************************************************************************************/
#include <reg51.h> /*定義頭文件*/
/************************************************************************************/
typedef unsigned char BYTE; /*自定義字節類型*/
/************************************************************************************/
#define Set_Bit(BIT) (BIT = 1) /*定義置1函數*/
#define Clear_Bit(BIT) (BIT = 0) /*定義清0函數*/
/************************************************************************************/
void Led_On(BYTE); /*定義點亮LED燈函數*/
void Led_Off(BYTE); /*定義熄滅LED燈函數*/
void Write_Hd7279(BYTE,BYTE); /*定義HD7279寫函數*/
BYTE Read_Hd7279(BYTE); /*定義HD7279讀函數*/
void Send_Byte(BYTE); /*定義HD7279發送字節函數*/
BYTE Receive_Byte(void); /*定義HD7279接收字節函數*/
void Short_Delay(void); /*定義短延時函數*/
void Long_Delay(void); /*定義長延時函數*/
void Mcu_Init(void); /*定義MCU初始化函數*/
void Delay_200_mS(void); /*定義200ms延時函數*/
/************************************************************************************/
BYTE Keyboard_Out; /*定義鍵值變量*/
bit Keyboard_Flag; /*定義按鍵標志*/
/************************************************************************************/
sbit Hd7279_Key=P3^2; /*定義HD7279中斷硬件連接*/
sbit Hd7279_Clk=P2^1; /*定義HD7279時鐘硬件連接*/
sbit Hd7279_Data=P2^0; /*定義HD7279數據硬件連接*/
/************************************************************************************/
void main(void) /*主函數*/
{
Mcu_Init(); /*MCU初始化*/
while(1)
{
if(Keyboard_Flag)
{
Clear_Bit(Keyboard_Flag);
if(Keyboard_Out==0) /*0號鍵處理*/
{
Led_On(0x00);
Led_On(0x01);
Led_On(0x02);
Led_On(0x03);
}
else if(Keyboard_Out==1) /*1號鍵處理*/
{ /*顯示0、1、2、3*/
Write_Hd7279(0xc9,0x03);
Write_Hd7279(0xca,0x02);
Write_Hd7279(0xcb,0x01);
Write_Hd7279(0xcc,0x00); Led_Off(0x02);
}
else if(Keyboard_Out==2) /*2號鍵處理*/
{ /*顯示c、d、e、f*/
Write_Hd7279(0xc9,0x0f);
Write_Hd7279(0xca,0x0e);
Write_Hd7279(0xcb,0x0d);
Write_Hd7279(0xcc,0x0c); Led_Off(0x02);
}
else if(Keyboard_Out==3) /*3號鍵處理*/
{ /*顯示4、5、6、7*/
Write_Hd7279(0xc9,0x07);
Write_Hd7279(0xca,0x06);
Write_Hd7279(0xcb,0x05);
Write_Hd7279(0xcc,0x04); Led_Off(0x02);
}
else /*4號鍵處理*/
{ /*顯示8、9、a、b*/
Write_Hd7279(0xc9,0x0b);
Write_Hd7279(0xca,0x0a);
Write_Hd7279(0xcb,0x09);
Write_Hd7279(0xcc,0x08); Led_Off(0x02);
}
Delay_200_mS();
}
}
}
/***********************************************************************************/
void Delay_200_mS(void) /*500ms延時函數*/
{
BYTE i,j;
i=200;
while (i--)
{
j=228;
while(j--);
}
}
/************************************************************************************/
void Mcu_Init(void) /*MCU初始化函數*/
{
Set_Bit(EX0); /*外部中斷0使能*/
Set_Bit(IT0); /*外部中斷0下降沿觸發*/
Set_Bit(EA); /*中斷使能*/
Send_Byte(0xa4); /*HD7279復位*/
Write_Hd7279(0x98,0x1f); /*HD7279啟動消隱功能,能提高燈的亮度*/
Write_Hd7279(0xc9,0x03); /*上電顯示6、5、4、3*/
Write_Hd7279(0xca,0x04);
Write_Hd7279(0xcb,0x05);
Write_Hd7279(0xcc,0x06);
}
/************************************************************************************/
void int1_Hd7279key(void) interrupt 0 /*外部中斷0函數*/
{
Keyboard_Out=Read_Hd7279(0x15); /*讀取鍵值*/
if(Keyboard_Out<=0x04)
{
Set_Bit(Keyboard_Flag); /*設置鍵標志*/
}
}
/************************************************************************************/
void Short_Delay(void) /*短延時函數*/
{
BYTE i;
for(i=0;i<0x08;i++);
}
/************************************************************************************/
void Long_Delay(void) /*長延時函數*/
{
BYTE i;
for(i=0;i<0x30;i++);
}
/************************************************************************************/
void Led_On(BYTE Led_Num) /*點亮LED燈函數*/
{
Write_Hd7279(0xe0,Led_Num);
}
/************************************************************************************/
void Led_Off(BYTE Led_Num) /*熄滅LED燈函數*/
{
Write_Hd7279(0xc0,Led_Num);
}
/************************************************************************************/
void Write_Hd7279(BYTE Command,BYTE Data) /*HD7279寫函數*/
{
Send_Byte(Command);
Send_Byte(Data);
}
/************************************************************************************/
BYTE Read_Hd7279(BYTE Command) /*HD7279讀函數*/
{
Send_Byte(Command);
return(Receive_Byte());
}
/************************************************************************************/
void Send_Byte(BYTE Data_Out) /*HD7279發送字節函數*/
{
BYTE i;
Long_Delay();
for(i=0;i<8;i++)
{
if(Data_Out&0x80) Set_Bit(Hd7279_Data);
else Clear_Bit(Hd7279_Data);
Set_Bit(Hd7279_Clk);
Short_Delay();
Clear_Bit(Hd7279_Clk);
Short_Delay();
Data_Out=Data_Out<<1;
}
Clear_Bit(Hd7279_Data);
}
/************************************************************************************/
BYTE Receive_Byte(void) /*HD7279接收字節函數*/
{
BYTE i,Data_In;
Set_Bit(Hd7279_Data);
Long_Delay();
for(i=0;i<8;i++)
{
Set_Bit(Hd7279_Clk);
Short_Delay();
Data_In=Data_In<<1;
if(Hd7279_Data) Data_In=Data_In|0x01;
Clear_Bit(Hd7279_Clk);
Short_Delay();
}
Clear_Bit(Hd7279_Data);
return(Data_In);
}
/************************************************************************************/
/*END*/
hd7279鍵盤顯示芯片c51代碼
更新時間: 2006-03-17 11:05:58來源: 粵嵌教育瀏覽量:4351