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

📄 7279key.c

📁 这是一个利用单片机控制7279键盘管理芯片的控制程序
💻 C
字号:
#include "reg51.h"                        //寄存器定义头文件
//****** HD7279A指令系统 ****** 
#define CMD_RESET 0xa4 
#define CMD_TEST 0xbf 
#define DECODE0 0x80  //显示在第一个数码管
#define DECODE1 0xc8 
#define CMD_READ 0x15 
#define UNDECODE 0x90 
#define RTL_CYCLE 0xa3 
#define RTR_CYCLE 0xa2 
#define RTL_UNCYL 0xa1  //左移
#define RTR_UNCYL 0xa0 
#define ACTCTL 0x98 
#define SEGON 0xe0 
#define SEGOFF 0xc0 
#define BLINKCTL 0x88 

//////////////////////////////////////////////////////////////////////////////////////////////
//函数申明
//////////////////////////////////////////////////////////////////////////////////////////////
void send_byte(unsigned char out_byte);
unsigned char receive_byte();
void long_delay(void);
void short_delay(void);

//////////////////////////////////////////////////////////////////////////////////////////////
//全局变量
//////////////////////////////////////////////////////////////////////////////////////////////   
unsigned int tmr;

sbit	key= P1^3;		
sbit	clk= P1^6;		
sbit 	dat = P1^7;		
sbit	cs = P2^7;		

///////////////////////////////////////////////////////////////////////////////////////////////
//主函数
///////////////////////////////////////////////////////////////////////////////////////////////
main()
{
 unsigned char key_number;
 
 P1 = 0xDB;
 for (tmr=0;tmr<0x2000;tmr++);              //      
 send_byte(CMD_RESET);                     //    HD7279A 
 cs = 1;

 while (1) 
 	{
	if(key==0)
		{
		send_byte(CMD_READ);
		key_number=receive_byte();
		cs=1;
		send_byte(RTL_UNCYL);	//左移
		send_byte(DECODE0);		//显示命令
		send_byte(key_number);  //显示的内容
		while(key==0);
		}
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////
//命令发送子函数
//功能:发送命令(8位)
////////////////////////////////////////////////////////////////////////////////////////////// 
void send_byte(unsigned char out_byte) 
{ 
 unsigned char i; 
 cs=0;  			//cs下降沿开始发送数据
 long_delay(); 
 for (i=0;i<8;i++) 
     { 
     if (out_byte&0x80) 
         { 
          dat=1; 
          } 
     else 
         { 
          dat=0; 
          } 
     clk=1; 
     short_delay(); 
     clk=0; 
     short_delay(); 
     out_byte=out_byte*2; 
     } 
 dat=0; 
} 
//////////////////////////////////////////////////////////////////////////////////////////////
//命令接收子函数
//功能:接收命令(8位)
////////////////////////////////////////////////////////////////////////////////////////////// 
unsigned char receive_byte() 
{ 
 unsigned char i, in_byte; 
 dat=1;
 long_delay(); 
 for (i=0;i<8;i++) 
     { 
      clk=1; 
      short_delay(); 
      in_byte=in_byte*2; 		//相当与左移一位
      if (dat) 
          { 
           in_byte=in_byte|0x01; //dat输出1,让in_byte末位为1
           } 
      clk=0; 
      short_delay(); 
      } 
 dat=0; 
 return (in_byte); 
} 

//////////////////////////////////////////////////////////////////////////////////////////////
//延时函数
//功能:长延时和端延时
//////////////////////////////////////////////////////////////////////////////////////////////  
void long_delay(void) 
{ 
 unsigned char i; 
 for (i=0;i<0x30;i++); 
} 

void short_delay(void) 
{ 
 unsigned char i; 
 for (i=0;i<8;i++); 
} 

⌨️ 快捷键说明

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