Loading
新闻中心库存中心价格中心PDF中心图片中心
ICGLE 电子技术支持中心,为电气人员和相关企业提供全面的信息(IC技术\IC库存\IC图片\PDF资料等)服务
总线设计PCB设计单片机DSPARM
JAVA驱动设计C/C++汇编J2EE网络协议中间件技术嵌入式系统无线通信通信网络模拟技术接口电路显示光电传感与控制EDA/PLD
气流体控制电子产品电机及工具通信设备仪器仪表电线电缆建筑电气低压电器高压电器电源工控自动化广电设备医疗器械More..
电源设计仪器仪表技术专递电路图片电子专栏储存技术汽车电子测量测试音响技术家用电器
成功方案市场分析行业标准应用前沿芯片应用综合专区
hd7279键盘显示芯片c51代码
来源:电子工程师笔记   作者:sagestar
字体大小:[大][中][小]

注意:经我的实验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*/
Upload by 小王(2006-3-17)
IC
IC
推荐技术文章:
·采用mega8 和18b20的温度采....
·红外遥控解码程序RC5解码..
·学习指针不可少的好文章 !..
·单片机IO口播放乐曲..
·按键程序设计,可以处理加速键、一键多....
·用C语言实现常见的三种中文内码转换..
·Keil C 编译器常见警告与错误信....
·如何优化C语言代码..
·C语言高效编程技巧..
·编程修养..
·C程序设计的常用算法..
·单片机C语言学习..
·在VC++中用ActiveX控件实现....
·PID控制C源程序..
·setjmp构建简单协作式多任务系统..
·如何为嵌入式应用编写优秀的C++代码..
·使用C++构建嵌入式开发框架..
·使用ARM标准C库进行嵌入式应用程序....
·symbian入门系列 -- Win....
·AVR编程C原代码..
·Cygwin完全下载指南(上)-正常..
·Cygwin完全下载指南(下)-断点..
·C语言高效编程的的四招技巧
·C语言嵌入式系统编程修炼之内存操作
·编程中变量结构要点
·编程中的排版艺术
·在ARMSYS-C板上运行自己编写的..
·小容量单片机系统的C语言程序结构
·MSP430的软硬件C延时程序设计
·Keil C51编译错误总结
·全数字信号发生器的软件设计
·C语言的一些特点
·C语言面试题大汇总之微软亚洲技术中心..
·深入理解C语言指针的奥秘(一)
·C语言面试题大汇总之华为面试题
·深入理解C语言指针的奥秘(二)
·深入理解C语言指针的奥秘(三)
·C++学习重点分析
·ANSI C++特征总结
·指针、结构体、联合体的安全规范
IC
IC

©2007 版权归ICGLE所有   页面执行时间:46.875毫秒