无线表决器 源程序
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include
sbit RS = P3^4; //定义端口
sbit RW = P3^3;
sbit EN = P3^2;
#define uchar unsigned char
sbit f=P0^0;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
uchar tong=0,fan=0,qi=0;
uchar a,b,c,d;
uchar a1,b1,c1,d1;
uchar a2,b2,c2,d2;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P1
/*------------------------------------------------
uS 延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M ,精确延时请使用汇编, 大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS 延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M ,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函数
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
写入命令函数
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); //忙则等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
写入数据函数
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙则等待
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
/*------------------------------------------------
清屏函数
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
写入字符函数
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/ }
/*------------------------------------------------
主函数
------------------------------------------------*/
void you()
{
if(P20==1&&P21==0&&a2==0)
{
a1=1;
}
if(P20==0&&P21==1&&a1==0)
{
a2=1;
}
if(P22==1&&P23==0&&b2==0)
{
b1=1;
}
if(P22==0&&P23==1&&b1==0)
{
b2=1;
}
if(P24==1&&P25==0&&c2==0)
{
c1=1;
}
if(P24==0&&P25==1&&c1==0)
{
c2=1;
}
if(P26==1&&P27==0&&d2==0)
{
d1=1;
}
if(P26==0&&P27==1&&d1==0)
{
d2=1;
}
}
void wu()
{
if(P20==0&&P21==0)
{
a=1;
}
if(P22==0&&P23==0)
{
b=1;
}
if(P24==0&&P25==0)
{
c=1;
}
if(P26==0&&P27==0)
{
d=1;
}
}
void main(void)
LCD_Init();
LCD_Clear();//清屏
while (1)
{
//LCD_Write_Char(7,0,'o');
//LCD_Write_Char(8,0,'k');
LCD_Write_String(0,0,"welcome to use !");
while(1)
{
you();
wu();
if(f==0)
{
tong=a1+b1+c1+d1;
fan=a2+b2+c2+d2;
qi=4-tong-fan;
LCD_Write_String(0,0," "); LCD_Write_String(0,1," "); LCD_Write_String(0,0,"T ");
LCD_Write_String(6,0,"F ");
LCD_Write_String(11,0,"up ");
LCD_Write_Char(0,1,tong+0x30 ); LCD_Write_Char(6,1,fan+0x30 ); LCD_Write_Char(11,1,qi+0x30 ); }
if(f==1)
{LCD_Write_String(0 ,1," ");
LCD_Write_String(0,0,"welcome to use !"); LCD_Write_String(2,1," Action !"); a1=b1=c1=d1=0;
a2=b2=c2=d2=0;
tong=a1+b1+c1+d1;
fan=a2+b2+c2+d2;
qi=4-tong-fan;
}
}
}