📄 t.c
字号:
#include<reg51.h>
#include<ks0108.h>
#include<lib.h>
//===========================函数声明=====================================//
void SendData(unsigned char Serial_data) ;
unsigned char ReadCode();
unsigned char DisplayUART();
void ChangCode();
//==========================================================================//
sbit key0=P3^2;//=======确认键
sbit key1=P3^3;//=======选择键
sbit key2=P3^4;//=======确认键2
sbit Inf=P3^5;//15pin
sbit LED=P0^0;
sbit LED2=P0^5;
unsigned char SerialBuf[100];
unsigned char SerialBufCount;
unsigned char Flag=0;
//=====================================================================//
//====================主程序======================//
main()
{
TMOD=0x21;
TH1=0xE8; //波特率1200时,定时器/计数器T1自动重装初值
TL1=0xE8;
PCON=0x00; //SMOD为0不倍增模式
SCON=0xc0; //串行口设置为模式3,//
//REN=1; //允许接收
//ES=0; //串行口允许中断
EA=1;
IT1=1;
IT0=1; //键盘中断
EX0=1;EX1=1;
Initialize();
ClearScr(0,0,8,128);
DisplayListChar(0,0,Tip,0);
DisplayPic(1,1,2,16,wu,1);DisplayPic(1,17,2,16,zhi,1);DisplayPic(1,33,2,16,bin,1);//汉字测试
DisplayPic(3,1,2,16,hzk[0],1);DisplayPic(3,17,2,16,hzk[1],1);DisplayPic(3,33,2,16,hzk[2],1);//汉字测试
Delay(200);
while(1)
{if (key2==0){Delay(2000);while(key2==0);Flag=3;}
switch (Flag)
{case 1:LED=0;ClearScr(0,0,8,128);DisplayListChar(0,0,Rec,0);
ReadCode();LED2=0;DisplayListChar(0,0,End,0);Flag=0;break;
case 2:ClearScr(0,0,8,128);DisplayUART();Flag=0;break;
case 3:ClearScr(0,0,8,128);DisplayListChar(0,0,Cod,0);ChangCode();Flag=0;break;
}
}
}
//=============================================================================//
void Key_1() interrupt 2
{
Delay(2000);
while(key1==0);
Flag=1;
}
//==============================================================================//
//KEY0确认键处理子程序==============================================================//
void Key_0() interrupt 0
{
Delay(2000);
while(key0==0);
Flag=2;
}
//UART中断程序
void Uart() interrupt 4
{RI=0;
SerialBuf[SerialBufCount]= SBUF;
SerialBufCount++;
}
//==============================================================================//
unsigned char DisplayUART()
{
unsigned char i,x=0,y=0;
TR1=1;//ES=1;
for (i=0;i<SerialBufCount;i++)
{
SendData(SerialBuf[i]);
if (y>120)y=0,x++;
if (SerialBufCount>100)return(1);
DisplayListChar(x,y,&Number[SerialBuf[i]],0);y+=14;
}
SerialBufCount=0;LED2=1;LED=1;
TR1=0;//ES=0;
}
//---------------------------------------------*/
void SendData(unsigned char Serial_data)
{
ACC=Serial_data;
TB8=P;TI=0;
SBUF=Serial_data;
while(!TI);
TI=0;
}
//---------------------------------------------
unsigned char ReadCode()
{
unsigned char i;
SerialBufCount=0;
while(Inf==1);// 等待信号
TH0=0x00;
TL0=0x00;
TR0=1; // 如果有信号开定时器(这时的信号为引导码)
//--------------------------------
for (i=0;i<100;i++)//读值
{
while(Inf==0);TR0=0;
//读值时先等待低电平可以省去判断引导码的过程(引导码过后的第一个低电平表示数据开始)
SerialBuf[SerialBufCount]= TH0;
SerialBufCount++; TH0=0x00;TL0=0x00;TR0=1;//只需取个大概值所以省略TL0
while(Inf==1);
if (TH0>0x4e) {SerialBufCount--;return 0;}
//如果所有的数据接收完了就返回(当接收端出现大于0x4e时间的高电平就表示结束)
TR0=0;
SerialBuf[SerialBufCount]= TH0;
SerialBufCount++; TH0=0x00;TL0=0x00;TR0=1;
}
}
//--------------------------------
void ChangCode()
{
unsigned char temp=0,i,k=3,x,Code[4];
for (x=0;x<4;x++)
{
for (i=0;i<8;i++)
{
temp=temp>>1;
if (SerialBuf[i+k]>0x04){temp=temp|0x80;k++;}
else if (SerialBuf[i+k]<0x04){temp=temp&0x7f;k++;}
}
Code[x]=temp;k=k+8;
}
i=30;
TR1=1;
for (x=0;x<4;x++)
{SendData(Code[x]);DisplayListChar(2,i,&Number[Code[x]],0);i+=14;}
TR1=0;LED2=1;LED=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -