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

📄 test_lcd12864.c

📁 通过读取打卡器上传送过来的串口数据,识别打卡人
💻 C
字号:


#include<reg51.H>
#include<test_lcd12864.h>
#include <intrins.h>
#include <absacc.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint  unsigned int
void Display_comm(void);
void Display(void);
void Display_second(void);

void Display_name(void);
void Display_data(void);
void delay_ms(int ms);
unsigned char idata Return_data[17];
int j[4];
int k=0;

//串口初始化 晶振为11.0592M 方式1 波特率300-57600
void InitCom(unsigned char BaudRate)
{
unsigned char THTL;
switch (BaudRate)
{
case 1: THTL = 64; break; //波特率300
case 2: THTL = 160; break; //600
case 3: THTL = 208; break; //1200
case 4: THTL = 232; break; //2400
case 5: THTL = 244; break; //4800
case 6: THTL = 250; break; //9600
case 7: THTL = 253; break; //19200
case 8: THTL = 255; break; //57600
default: THTL = 208;
}
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1定时方式2
TCON = 0x40; //设定时器1开始计数
TH1 = THTL;
TL1 = THTL;
PCON = 0x80; //波特率加倍控制,SMOD位
RI = 0; //清收发标志
TI = 0;
TR1 = 1; //启动定时器
}


//从串口接收一个字符串(非中断方式)
void ComInStr(void)
{
unsigned char temp,len;
 temp = 1;
 len =0;

 while (temp)
 {

   while(!RI); //空语句判断字符是否收完
   temp = SBUF; //保存字符
   Return_data[len] = temp;
   if (temp == 0x0A)//判断结束标志位
      temp = 0x00;
   RI = 0; //清RI
   len++; //字符串指针加一
  } 
}


//比较所获得的字符串
int cmpstr(void)
{unsigned char idata have_data0[7]={0x46,0x33,0x39,0x34,0x34,0x45,0x42};//陈志宏
 unsigned char idata have_data1[7]={0x46,0x33,0x32,0x30,0x34,0x41,0x30};//李志华
 unsigned char idata have_data2[7]={0x46,0x31,0x36,0x46,0x44,0x37,0x44};//林跃东
 unsigned char idata have_data3[7]={0x45,0x45,0x46,0x33,0x36,0x34,0x45};//张仁建
int i=0;
for(i=0;i<7;i++)
      { if (have_data0[i]==Return_data[i+8]) 
	   j[0]++;
       else if (have_data1[i]==Return_data[i+8]) 
	   j[1]++;
       else if (have_data2[i]==Return_data[i+8]) 
	   j[2]++;
       else if (have_data3[i]==Return_data[i+8]) 
	   j[3]++;
       }
for(k=0;k<4;k++)
   if (j[k]==7)   Display_name();   
}
//判断刷卡人
void Display_name()
{switch(k)
  {case 0:	DisplayCgrom(0x8a,"陈志宏");break;
   case 1:	DisplayCgrom(0x8a,"李志平");break;
   case 2:	DisplayCgrom(0x8a,"林跃东");break;
   case 3:	DisplayCgrom(0x8a,"张仁建");break;
  } 
}

void main(void)
{   //初始化液晶显示和串口
	LcdInit();
	InitCom(6);
	//清屏
	LcdClear();

	{



    //显示"请刷卡"
	Display();
    //串口接收字符
	ComInStr();
    //字符识别
    cmpstr();
   	delay(2000);
    delay(2000);
    }	
 	
	while(1);
}



/********************************
函数名称:Display()显示刷卡界面
入口参数:无
返回参数:无
********************************/
void Display(void)
{
	DisplayCgrom(0x92,"请刷卡"); 
}



/********************************
函数名称:Display_first 显示第二屏
入口参数:无
返回参数:无
********************************/
//void Display_first(void)
//{
//    DisplayCgrom(0x90,"刷卡人:");
//   	DisplayCgrom(0x8a,"林跃东");
   

//}

⌨️ 快捷键说明

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