#define uchar unsigned char
sbit SCK = P0^6;
sbit BUZ = P0^7;
sbit A0 = P3^0;
sbit A1 = P3^1;
sbit A2 = P3^2;
sbit A3 = P3^3;
sbit A4 = P3^4;
sbit A5 = P3^5;
sbit B7 = P1^7;
sbit B6 = P1^6;
sbit B5 = P1^5;
sbit B4 = P1^4;
sbit B3 = P1^3;
sbit B2 = P1^2;
uchar code Disp_2[]={“知学院电子信息”};
uchar code Disp_3[]={“工程08级毛梦超”};
uchar code Disp_4[]={“的毕业设计–集”};
uchar code Disp_5[]={“成电路测验体系!”};
uchar code Disp_6[]={“指导老师:丁宇”};
uchar code Disp_8[]={“承认键进行测验!”};
uchar code Disp_9[]={“请挑选芯片类型:”};
uchar code Disp_10[]={“1-CMOS; 2-TTL;”};
uchar code Disp_11[]={“请输入CMOS系列”};
uchar code Disp_12[]={“请输入TTL 系列”};
uchar code Disp_13[]={“IC类型:”};
void Delay_us(uchar x2us)
{
while(–x2us);
}
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i–)
for(j=122;j>0;j–)
{}
}
//————-4KHz——————-
void Buz(void)
{
uint i;
for(i=200;i>0;i–)
{
BUZ=1;
Delay_us(120);
BUZ=0;
}
BUZ=0;
}
//————-LCD Part——————–
//LCD显现部份之写地址
//—————————————–
void Lcd_Wr_Command(uchar com_data)
{
uchar i;
uchar i_data;
i_data=0xf8;
SCK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCK=0;
SCK=1;
i_data=i_data<<1;
}
i_data=com_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCK=0;
SCK=1;
i_data=i_data<<1;
}
i_data=com_data;
i_data<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCK=0;
SCK=1;
i_data=i_data<<1;
}
Delay_ms(1);
}
//————-LCD Part——————–
//LCD显现部份之写数据
//—————————————–
void Lcd_Wr_Data(uchar com_data)
{
uchar i;
uchar i_data;
i_data=0xfa;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCK=0;
SCK=1;
i_data=i_data<<1;
}
i_data=com_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCK=0;
SCK=1;
i_data=i_data<<1;
}
i_data=com_data;
i_data<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCK=0;
SCK=1;
i_data=i_data<<1;
}
Delay_ms(1);
}
//————-LCD Part——————–
//LCD显现部份之初始化
//—————————————–
void Lcd_init()
{
Delay_ms(100);
Lcd_Wr_Command(0x30);
Delay_ms(5);
Lcd_Wr_Command(0x02);
Delay_ms(5);
Lcd_Wr_Command(0x06);
Delay_ms(5);
Lcd_Wr_Command(0x0c);
Delay_ms(5);
Lcd_Wr_Command(0x01);
Delay_ms(5);
//Lcd_Wr_Command(0x80);
}
void Posit(uchar x,uchar y,uchar *String)
{
uchar Posit,Addr;
if(y==1)
Addr=0x80;
if(y==2)
Addr=0x90;
Lcd_Wr_Command(Posit);
while(*String!=)
{
Lcd_Wr_Data(*String++);
Delay_ms(250);
}
}
//————————————————-
//4*4键盘扫描部份;按键开释后才回来键值
//——————Key_Scan———————–
uchar s_scan(void)
{
P2=0xf0;
if((P2&0xf0)!=0xf0)
{
P2=0xf0;
Delay_ms(30);
if((P2&0xf0)!=0xf0)
{
P2=0xfe ; //榜首列开端,逐行扫描
if((P2&0xf0)!=0xf0)
{
P2&=0xf0;
if(P2==0xe0)
{Buz();while(!(P2==0xf0));return(16);} //撤销键
if(P2==0xd0)
{Buz();while(!(P2==0xf0));return(15);} //承认键`
if(P2==0xb0)
{Buz();while(!(P2==0xf0));return(14);} //挑选键
if(P2==0x70)
{Buz();while(!(P2==0xf0));return(13);} //测验键
}
P2=0xfd;//第二列开端,逐行扫描
if((P2&0xf0)!=0xf0)
{
P2&=0xf0;
if(P2==0xe0)
{Buz();while(!(P2==0xf0));return(12);} //“LS”字母输入键
if(P2==0xd0)
{Buz();while(!(P2==0xf0));return(11);} //“CD”字母输入键
if(P2==0xb0)
{Buz();while(!(P2==0xf0));return(10);} //“0”键
if(P2==0x70)
{Buz();while(!(P2==0xf0));return(9);} //“9”键
}
P2=0xfb; //第三列开端,逐行扫描
if((P2&0xf0)!=0xf0)
{
P2&=0xf0;
if(P2==0xe0)
{Buz();while(!(P2==0xf0));return(8);} //“8”键
if(P2==0xd0)
{Buz();while(!(P2==0xf0));return(7);} //“7”键
if(P2==0xb0)
{Buz();while(!(P2==0xf0));return(6);} //“6”键
if(P2==0x70)
{Buz();while(!(P2==0xf0));return(5);} //“5”键
}
P2=0xf7;//第四列开端,逐行扫描
if((P2&0xf0)!=0xf0)
{
P2&=0xf0;
if(P2==0xe0)
{Buz();while(!(P2==0xf0));return(4);} //“4”键
if(P2==0xd0)
{Buz();while(!(P2==0xf0));return(3);} //“3”键
if(P2==0xb0)
{Buz();while(!(P2==0xf0));return(2);} //“2”键
if(P2==0x70)
{Buz();while(!(P2==0xf0));return(1);} //“1”键
}
}
}
return 0;
}