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

📄 7289-key.c

📁 基于单片机AT89S52系统的一些测试程序
💻 C
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>

typedef unsigned char uchar;

sbit CS=P1^4;
sbit CLK=P1^7;
sbit DIO=P1^6;
sbit KEY=P3^2;         
//需要在INT区把KEY用跳线冒跳到INT0,其余四个跳到VCC
//这样,P3^2就相当于直接连接到key

uchar half_hign;
uchar half_low;

bdata uchar com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;

void delay_50us()
{   
	uchar i;
	for (i=0; i<6; i++){;}
}

void delay_8us()
{
	uchar i;
	for (i=0; i<1; i++){;}
}

void delay_50ms()
{
	uchar i,j;
	for(j=0;j<50;j++)
		for(i=0;i<125;i++){;}
}

void delay_5s()
{
	uchar i = 100;
	while(i--)	
		delay_50ms();
}

void send(uchar sebuf)
{
	uchar i;
	com_data=sebuf;
	CLK=0;
	CS=0;
	delay_50us();
	for(i=0;i<8;i++)
	{
		delay_8us();
		DIO=mos_bit;
		CLK=1;
		delay_8us();
		com_data=com_data<<1;
		CLK=0;
	}
	DIO=0;
}
uchar receive(void)
{
	uchar i,rebuf;
	CLK=1;
	delay_50us();
	for(i=0;i<8;i++)
	{
		com_data=com_data<<1;
		low_bit=DIO;
		CLK=1;
		delay_8us();
		CLK=0;
		delay_8us();
	}
	rebuf=com_data;
	DIO =1;
	CS=1;
	return rebuf;
}
void reset(void)
{
	DIO=1;
	delay_50ms();
	send(0xa4);
	CS=1;
}
/*  7289显示程序                  */ 
/*  addr为显示位置 范围0~7		  */
/*  dat为现实内容                 */
void display(uchar addr,uchar dat)
{
	if(addr<0 || addr >7)
		return;
	send(0xc8 + addr);
	delay_50us();
	send(dat);
	CS=1;
}
/*  发送双字节命令				*/
void sendcommand(uchar addr,uchar dat)
{
	send(addr);
	delay_50us();
	send(dat);
	CS=1;
}
/*   获取键盘的位置码			*/
uchar getkeycode(uchar dat)
{
	uchar key;
	switch(dat)
	{
		case 0x2f: key = 0x01;break;
		case 0x27: key = 0x02;break;
		case 0x1f: key = 0x03;break;
		case 0x17: key = 0x04;break;
		case 0x0f: key = 0x05;break;
		case 0x07: key = 0x06;break;
		case 0x2e: key = 0x07;break;
		case 0x26: key = 0x08;break;
		case 0x1e: key = 0x09;break;
		case 0x16: key = 0x10;break;
		case 0x0e: key = 0x11;break;
		case 0x06: key = 0x12;break;
		case 0x2d: key = 0x13;break;
		case 0x25: key = 0x14;break;
		case 0x1d: key = 0x15;break;
		case 0x15: key = 0x16;break;
		case 0x0d: key = 0x17;break;
		case 0x05: key = 0x18;break;
		case 0x2c: key = 0x19;break;
		case 0x24: key = 0x20;break;
		case 0x1c: key = 0x21;break;
		case 0x14: key = 0x22;break;
		case 0x0c: key = 0x23;break;
		case 0x04: key = 0x24;break;
		default:   key = 0xee;break;
	}
	return key;
}
main()
{
	uchar dat,key;
	reset(); 	
	send(0xbf);			/* 测试指令 */
	CS=1;
	delay_5s();
	sendcommand(0x88,0xff);  /* 禁止闪烁  */
	while(1)
	{
		while(KEY);          /*   判断是否有按键按下    */
		send(0x15);  
		delay_50us();	
		dat = receive();
		delay_50us();
		key = getkeycode(dat);
		half_hign = key >> 4;
		half_low  = key & 0x0f;
		/* 显示键盘的位置码  */
		display(0,half_hign);
		display(1,half_low);
		display(2,half_hign);
		display(3,half_low);
		display(4,half_hign);
		display(5,half_low);
		display(6,half_hign);
		display(7,half_low);

		while(!KEY);
	} 
}
	  
		
     
      
		 
 

      
		


⌨️ 快捷键说明

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