八路抢答器C51程序.docx

上传人:b****4 文档编号:11579529 上传时间:2023-03-19 格式:DOCX 页数:24 大小:16.91KB
下载 相关 举报
八路抢答器C51程序.docx_第1页
第1页 / 共24页
八路抢答器C51程序.docx_第2页
第2页 / 共24页
八路抢答器C51程序.docx_第3页
第3页 / 共24页
八路抢答器C51程序.docx_第4页
第4页 / 共24页
八路抢答器C51程序.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

八路抢答器C51程序.docx

《八路抢答器C51程序.docx》由会员分享,可在线阅读,更多相关《八路抢答器C51程序.docx(24页珍藏版)》请在冰豆网上搜索。

八路抢答器C51程序.docx

八路抢答器C51程序

#include

#include

#include

#include

#include

/******************************************************************/

/*定义接口信息*/

/******************************************************************/

sbitRS=P2^4;

sbitWRD=P2^5;

sbitE=P2^6;

//sbitPSB=P2^1;

//sbitRES=P2^3;

/*****************按键********/

sbitkey1=P3^0;//定义按键位置

sbitkey2=P3^1;

sbitkey3=P3^2;

sbitkey4=P3^3;

sbitkey5=P3^4;//定义按键位置

sbitkey6=P3^5;

sbitkey7=P3^6;

sbitkey8=P3^7;

/*****************数码管****************/

unsignedcharconstdofly[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值01234567

/*****共阳数码管*********/

/********功能键***********************/

sbitfuwei=P2^1;

sbitspeak=P2^7;

sbitkaishi=P2^0;

unsignedcharshijian=30;

//unsignedcharcodeIC_DAT3[]={48,49,50,51,52,53,54,55,56,57,58,};

unsignedcharcodeIC_DAT3[]={"0123456789"};

//***************************8延时程序***********************

//**********************************************************8//

voiddelayms(unsignedintn)//延时10×n毫秒程序

{

unsignedinti,j;

for(i=0;i

for(j=0;j<2000;j++);

}

voiddelay(unsignedcharm)//延时程序

{

unsignedinti,j;

for(i=0;i

for(j=0;j<10;j++);

}

/******************************************************************/

/*函数声明*/

/****************************命令数据写·*****************************/

voidTransferData(chardata1,bitDI)//传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.

{

WRD=0;

RS=DI;

delay

(1);

P0=data1;

E=1;

delay

(1);

E=0;

}

/******************************************************************/

/*液晶初始化-字库*/

/******************************************************************/

voidinitinal(void)//LCD字库初始化程序

{

delay(40);//大于40MS的延时程序

//PSB=1;//设置为8BIT并口工作模式

delay

(1);//延时

//RES=0;//复位

delay

(1);//延时

//RES=1;//复位置高

delay(10);

TransferData(0x30,0);//ExtendedFunctionSet:

8BIT设置,RE=0:

basicinstructionset,G=0:

graphicdisplayOFF

delay(100);//大于100uS的延时程序

TransferData(0x30,0);//FunctionSet

delay(37);////大于37uS的延时程序

TransferData(0x08,0);//DisplayonControl

delay(100);//大于100uS的延时程序

TransferData(0x10,0);//CursorDisplayControl光标设置

delay(100);//大于100uS的延时程序

TransferData(0x0C,0);//DisplayControl,D=1,显示开

delay(100);//大于100uS的延时程序

TransferData(0x01,0);//DisplayClear

delay(10);//大于10mS的延时程序

TransferData(0x06,0);//EnryModeSet,光标从右向左加1位移动

delay(100);//大于100uS的延时程序

}

//要显示的汉字

unsignedcharcodeIC_DAT[]={

"抢答者:

第"

};unsignedcharcodeIC_DAT4[]={

"队"

};

unsignedcharcodeIC_DAT1[]={

"违规者:

第"

};

unsignedcharcodeIC_DAT2[]={

"抢答开始"

};

/******************************************************************/

/*函数声明*/

/***************************写汉字起始地址***************************/

voidlcd_mesg(unsignedcharcode*adder1)

{

unsignedchari;

TransferData(0x90,0);//SetGraphicDisplayRAMAddress

delay(100);

/*for(i=0;i<16;i++)*/

for(i=0;i<10;i++)

{

TransferData(*adder1,1);

adder1++;

}

}

voidlcd_mesg1(unsignedcharcode*adder1)

{

unsignedchari;

TransferData(0x98,0);//SetGraphicDisplayRAMAddress

delay(100);

/*for(i=0;i<16;i++)*/

for(i=0;i<10;i++)

{

TransferData(*adder1,1);

adder1++;

}

}

voidlcd_mesg2(unsignedcharcode*adder1)

{

unsignedchari;

TransferData(0x81,0);//SetGraphicDisplayRAMAddress

delay(100);

/*for(i=0;i<16;i++)*/

for(i=0;i<10;i++)

{

TransferData(*adder1,1);

adder1++;

}

}

/******************************************************************/

/*函数声明*/

/***************个位十位百位***************************************/

voidlcd_mesg3(unsignedcharr)

{

unsignedchara,b,c;

a=r/100;

b=r%100/10;

c=r%10;

TransferData(0x8C,0);//SetGraphicDisplayRAMAddress数据起始地址

delay(100);

TransferData(IC_DAT3[c],1);//个位

delay(100);

TransferData(0x8B,0);//SetGraphicDisplayRAMAddress

delay(100);

TransferData(IC_DAT3[b],1);//十位

delay(100);

TransferData(0x8A,0);//SetGraphicDisplayRAMAddress

delay(100);

TransferData(IC_DAT3[a],1);//百位

delay(100);

}

/****************************************************

********************************主程序***************/

voidmain(void)

{

inti=200,j=200,k=200;/****报警参数?

********/

lianghenfei:

i=200;j=200;k=200;shijian=30;speak=1;

initinal();//调用LCD字库初始化程

lcd_mesg(IC_DAT);//显示中文汉字1

lcd_mesg1(IC_DAT1);

delay(100);

P1=0x7f;/*关闭数码管*/

while(kaishi)

{

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key1)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key1)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[1],1);

while

(1)

{

speak=0;

P1=dofly[1];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key2)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key2)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[2],1);

while

(1)

{

speak=0;

P1=dofly[2];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key3)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key3)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[3],1);

while

(1)

{

speak=0;

P1=dofly[3];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key4)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key4)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[4],1);

while

(1)

{

speak=0;

P1=dofly[4];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key5)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key5)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[5],1);

while

(1)

{

speak=0;

P1=dofly[5];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key6)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key6)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[6],1);

while

(1)

{

speak=0;

P1=dofly[6];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key7)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key7)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[7],1);

while

(1)

{

speak=0;

P1=dofly[7];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key8)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key8)

{

delay(100);

TransferData(0X9E,0);

delay(100);

TransferData(IC_DAT3[8],1);

while

(1)

{

speak=0;

P1=dofly[8];

if(fuwei==0){gotolianghenfei;}

};//警告

}

}

}

lcd_mesg2(IC_DAT2);delay(100);

/*****************************开始抢答*************************

**************************************************************/

while(i--){speak=0;}

speak=1;

while

(1)

{

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key1)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key1)

{

initinal();

lcd_mesg(IC_DAT);

delay(100);

TransferData(0X95,0);

delay(100);

TransferData(IC_DAT3[1],1);

delay(100);

speak=0;

delayms(50);

speak=1;

while

(1)

{

if(shijian>=50){speak=0;delayms(300);gotolianghenfei;}

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

lcd_mesg3(shijian--);

P1=dofly[1];

while(shijian<=9)

{

lcd_mesg3(shijian);

P1=dofly[shijian--];

speak=0;

delayms(25);

speak=1;

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

}

}

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key2)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key2)

{

initinal();

lcd_mesg(IC_DAT);

delay(100);

TransferData(0X95,0);

delay(100);

TransferData(IC_DAT3[2],1);

delay(100);

speak=0;

delayms(50);

speak=1;

while

(1)

{

if(shijian>=50){speak=0;delayms(300);gotolianghenfei;}

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

lcd_mesg3(shijian--);

P1=dofly[2];

while(shijian<=9)

{

lcd_mesg3(shijian);

P1=dofly[shijian--];

speak=0;

delayms(25);

speak=1;

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

}

}

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key2)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key2)

{

initinal();

lcd_mesg(IC_DAT);

delay(100);

TransferData(0X95,0);

delay(100);

TransferData(IC_DAT3[2],1);

delay(100);

speak=0;

delayms(50);

speak=1;

while

(1)

{

if(shijian>=50){speak=0;delayms(300);gotolianghenfei;}

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

lcd_mesg3(shijian--);

P1=dofly[2];

while(shijian<=9)

{

lcd_mesg3(shijian);

P1=dofly[shijian--];

speak=0;

delayms(25);

speak=1;

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

}

}

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key3)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key3)

{

initinal();

lcd_mesg(IC_DAT);

delay(100);

TransferData(0X95,0);

delay(100);

TransferData(IC_DAT3[3],1);

delay(100);

speak=0;

delayms(50);

speak=1;

while

(1)

{

if(shijian>=50){speak=0;delayms(300);gotolianghenfei;}

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

lcd_mesg3(shijian--);

P1=dofly[3];

while(shijian<=9)

{

lcd_mesg3(shijian);

P1=dofly[shijian--];

speak=0;

delayms(25);

speak=1;

delayms(100);

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

}

}

}

}

if(fuwei==0){speak=0;delayms(25);gotolianghenfei;}

if(!

key4)

{//按下相应的按键,数码管显示相应的码值

delay(100);

if(!

key4)

{

initinal();

lc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1