51单片机按键抢答器程序
/**********************************************
函数名称:write_data(uchar date)
函数功能:写数据
函数调用:delay_ms(uint num)
输入参数:数据
输出参数:
版权信息:
时间版本: V1.0
***********************************************/
void LCD_w_data(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_DATA=dat;
delay_ms(5);
LCD_EN=1;
delay_ms(5);
LCD_EN=0;
}
/**********************************************
函数名称:
函数功能:LCD_init()
函数调用:LCD_w_com()
输入参数:
输出参数:
版权信息:
时间版本: V1.0
***********************************************/
void LCD_init()
{
LCD_EN=0;
LCD_w_com(0x38);//8线2行5X7字符模式
LCD_w_com(0x0c);//显示开,光标不显示,光标不闪烁
LCD_w_com(0x06);//光标右移,文字不移动
LCD_w_com(0x01);//清除显示,光标复位
}
/**********************************************
函数名称: LCD_disp_cher(uchar x,uchar y,uchar *p)
函数功能: 指定位置显示字符串
函数调用: LCD_w_com(),LCD_w_data()
输入参数: x,y坐标,字符串指针数组
输出参数:
版权信息:
时间版本: V1.0
备注: x为列,x<16,y为行,y<2. 字符串长+x不大于16.
***********************************************/
void LCD_disp_cher(uchar x,uchar y,uchar *p)
{
if(y==1)
{
LCD_w_com(0x80+x);
while(*p)
{
LCD_w_data(*p);
p++;
}
}
if(y==2)
{
LCD_w_com(0x80+0x40+x);
while(*p)
{
LCD_w_data(*p);
p++;
}
}
}
#endif//end LCD1602.H本文引用地址:https://www.eepw.com.cn/article/201612/324577.htm
#ifndef _interrupt_H_
#define _interrupt_H_
#define uint unsigned int
#define uchar unsigned char
uint sec=10;
sbit sb=P1^0;
sbit si=P1^1;
void interrupts_init()
{
EA=1; //开总中断
ET0=1; // T0(定时中断0) 的溢出中断允许位
TR0=1; //0的运行控制位
TMOD=0x1; //16位定时器
TH0=(65536-50000)/255;
TL0=(65536-50000)%255;
}
void ghjfgf() interrupt 1
{
uint subtle;
TH0=(65536-50000)/255;
TL0=(65536-50000)%255;
subtle++;
if(subtle==20)
{
subtle=0;
sec--;
}
}
#endif
#ifndef _chiclet_keyboard_H_
#define _chiclet_keyboard_H_
sbit S1=P3^4; //独立按键S1~S4
sbit S2=P3^5;
sbit S3=P3^6;
sbit S4=P3^7; //用复位键退出这样节省按键
void delay(uint ms) //延时
{
uchar mus;
for(ms; ms>0; ms--)
for(mus=110; mus>0; mus--);
}
uint chiclet_keyboard_() //按键检测子程序有返回值用于退出该子程序
{
uchar dsa[10]; //用于储存显示的数组
while(1) //检测死循环,直至检测道按键或时间到sec=0;
{
if(S1==0)
{
delay(5);
if(S1==0)
{
LCD_disp_cher(0,1," S1 "); //显示先按的按键
return 0;
}
}
if(S2==0)
{
delay(5);
if(S2==0)
{
LCD_disp_cher(0,1," S2 "); //显示先按的按键
return 0;
}
}
if(S3==0)
{
delay(5);
if(S3==0)
{
LCD_disp_cher(0,1," S3 "); //显示先按的按键
return 0;
}
}
if(S4==0)
{
delay(5);
if(S4==0)
{
LCD_disp_cher(0,1," S4 "); //显示先按的按键
return 0;
}
}
if(sec==0)
{
LCD_disp_cher(0,1," over time ");
return 0;
}
sprintf(dsa," time %d ",sec); //显示时间
LCD_disp_cher(0,1,dsa);
}
}
#endif
评论