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

📄 keyc.c

📁 在keil c51 环境下利用中断方式查询 键盘并实现键值查询等功能
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define COM XBYTE[0x9801]
#define DAT XBYTE[0x9800]

#define W_C_GLCD XBYTE[0xA000]
#define W_D_GLCD XBYTE[0xA001]
#define R_B_GLCD XBYTE[0xA002]
#define R_D_GLCD XBYTE[0xA003]

sbit flag=ACC^7;

uchar TAB[]={0xC5,0xC4,0xC3,0xC2,0xC1,0xC0,0xD5,0xD4,0xD3,0xD2,0xD1,0xD0,0xCD,0xCC,0xCB,0xCA,0xC9,0xC8,0xDA,0xD9,0xD8};
uchar code DHZTAB1[]={"全国大学生电子大"};
uchar code DHZTAB2[]={"赛题目:         "};
uchar code DHZTAB3[]={"      信号检测台"};
uchar code DHZTAB4[]={"指导教师: 张勇  "};
uchar code DHZTAB5[]={"学生: 李  超    "};
uchar code DHZTAB6[]={"      李亚光    "};
uchar code DHZTAB7[]={"      周国文    "};
uchar code DHZTAB8[]={"  秒:           "};
uchar code DHZTAB9[]={"报警!           "};

uchar keyin();
void keygo();
void initial_GLCD();
void command_GLCD(uchar ord);
void chkbusy_GLCD();
void write_GLCD(uchar dat);
void delay();
uint ASCII(uint i);
void display1();
void display2();
void clear_GLCD();
void clock();
void dispclock(unsigned int count);
void clostop() interrupt 3 using 0
{
	uchar i,temp,j,k;
	unsigned int count;
	TMOD=0x01;
	TCON=0x10;
	count++;
	if(count==600)
	{
		TMOD=0x00;
		TCON=0x00;
		temp=0x08;
		command_GLCD(temp|0x80);
		for(j=0;j<8;j++)
		{
			write_GLCD(DHZTAB9[i]);
			i++;
			write_GLCD(DHZTAB9[i]);
			i++;
		}
	}
	dispclock(count);
	k=COM;
	k&=0x07;
	if(k!=0)
	{
		COM=0x40;
		i=DAT;
		if(i==0xDA) 
		{
			TMOD=0x00;
			TCON=0x00;
		}
	}
}

void main()
{
    uchar i=0;

	initial_GLCD();
	COM=0x01;
	COM=0x3A;
	COM=0xD3;
    COM=0x40;
	do
	{
	    ACC=COM;
	}
	while(flag==1);
    while(1)
	{   
	    
        keygo();
	}

}

void keygo()
{
    uint i;
	uchar j,k;
	k=keyin();
    for(i=0;i<21;i++)
	  	if(k==TAB[i])
	  	{	
	    	if(i<16)
	  	  	{
				j=(uchar)ASCII(i);
		  		write_GLCD(j);
		  	}
			else
				switch(i)
				{
					case 16:   //F1
					initial_GLCD();//clear_GLCD();	
						clock();
						break;
					case 17:	//F2
						initial_GLCD();//clear_GLCD();
						display1();
						break;
					case 18:	//F5
						initial_GLCD();//clear_GLCD();
						break;
					case 19:	//F4
						initial_GLCD();//clear_GLCD();
						break;
					case 20:	//F3
						clear_GLCD();//initial_GLCD();
						i=0;
						display2();
						break;		
		 		}
		  	break;
	  	}
}

uchar keyin()
{
    uchar i;
	uchar k;
	do
	{
	    k=COM;
		k&=0x07;
	}while(k==0);    
	COM=0x40;
	i=DAT;
	return i;
}

uint ASCII(uint i)
{
    if(i<=9)
	    i+=0x30;
	else 
	    i+=0x37;
	return i;
}

void initial_GLCD()
{
    command_GLCD(0x30);    //功能设定
    delay();

    command_GLCD(0x30);    //功能设定
    delay();

    command_GLCD(0x30);    //功能设定
    delay();

    command_GLCD(0x06);    //显示器控制:游标不显示;
    delay();

    command_GLCD(0x01);    //清屏幕
    delay();

    command_GLCD(0x0c);    //进入模式设定
    delay();
}

void command_GLCD(uchar ord)
{
    chkbusy_GLCD();
    W_C_GLCD=ord;
}

void chkbusy_GLCD()
{
    do
	{
	    ACC=R_B_GLCD;
    }
    while(flag==1);
}

void write_GLCD(uchar dat)
{
    chkbusy_GLCD();
	W_D_GLCD=dat;
}

void delay()
{
    uchar i;
	for(i=0;i<25;i++)
	{;}
}

void display1()
{
	uchar temp,j,i;
	temp=0x00;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB1[i]);
		i++;
		write_GLCD(DHZTAB1[i]);
		i++;
	}
	i=0;
	
	temp=0x10;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB2[i]);
		i++;
		write_GLCD(DHZTAB2[i]);
		i++;
	}
	i=0;	

	temp=0x08;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB3[i]);
		i++;
		write_GLCD(DHZTAB3[i]);
		i++;
	}
	i=0;
}

void display2()
{
	uchar temp,j,i;
	temp=0x00;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB4[i]);
		i++;
		write_GLCD(DHZTAB4[i]);
		i++;
	}
	i=0;
	
	temp=0x10;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB5[i]);
		i++;
		write_GLCD(DHZTAB5[i]);
		i++;
	}
	i=0;	

	temp=0x08;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB6[i]);
		i++;
		write_GLCD(DHZTAB6[i]);
		i++;
	}
	i=0;

	temp=0x18;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB7[i]);
		i++;
		write_GLCD(DHZTAB7[i]);
		i++;
	}
	i=0;
}

void clear_GLCD()   //清屏幕
{
	command_GLCD(0x01);
}

void clock()
{
	uchar i,temp,j;
	initial_GLCD();
	temp=0x10;
	command_GLCD(temp|0x80);
	for(j=0;j<8;j++)
	{
		write_GLCD(DHZTAB8[i]);  //秒:
		i++;
		write_GLCD(DHZTAB8[i]);   //
		i++;
	}
	i=0;
	TMOD=0x01;
	TCON=0x10;
	IE=0x88;
	while(1)
	{
		if(TF0==1)
		{
			TH1=0x97;
			TL1=0xFA;
			TMOD=0x10;
			TCON=0x40;
		}
		if(TMOD==0)
			break;
	}
}

void dispclock(unsigned int count)
{
	uchar d0,d1,d2,temp,firs;
	d0=count/100;
	d1=count/10%10;
	d2=count%10;
	temp=0x10;
	command_GLCD(temp|0x80);
	firs=0x30+d0;
	write_GLCD(firs);
	firs=0x30+d1;
	write_GLCD(firs);
	
	temp=0x13;
	command_GLCD(temp|0x80);
	firs=0x30+d2;
	write_GLCD(firs);
}


⌨️ 快捷键说明

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