📄 vision.c
字号:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#define MAX_RINTL 15 //串口接收缓冲区长度
unsigned char (*pic_index)(); //当前页面指针
unsigned char code pic_0[]={0,1,2,3,4,5,6,7}; //第一页跳转表
unsigned char code pic_1[]={1,0}; //第二页跳转表
unsigned char code pic_2[]={2,8,0}; //第三页跳转表
unsigned char code pic_3[]={3,0}; //第四页跳转表
unsigned char code pic_4[]={4,0}; //第五页跳转表
unsigned char code pic_5[]={5,0}; //第六页跳转表
unsigned char code pic_6[]={6,0}; //第七页跳转表
unsigned char code pic_7[]={7,0}; //第八页跳转表
unsigned char code pic_8[]={8,9,0}; //第九页跳转表
unsigned char code pic_9[]={9,8,0}; //第十页跳转表
unsigned char idata str_test[14] = {0xF0 ,0x5A}; //智能LCD接收命令
unsigned char idata pint_buf[MAX_RINTL]; // 串口接收缓冲区
unsigned char idata pint_buf1[MAX_RINTL];
//unsigned char data pint_read; //串口缓冲区读指针
unsigned char data pint_write; //串口缓冲区写指针
//unsigned char data psend_int; //串口发送允许标志
unsigned char psend_int;
unsigned char flag;
unsigned char rece_flag;
unsigned char flag_axes;
unsigned char start;
bit rece_time;
bit rece_axes;
bit rece_start;
unsigned char pic_sel_0(void);
unsigned char pic_sel_1(void);
unsigned char pic_sel_2(void);
unsigned char pic_sel_3(void);
unsigned char pic_sel_4(void);
unsigned char pic_sel_5(void);
unsigned char pic_sel_6(void);
unsigned char pic_sel_7(void);
unsigned char pic_sel_8(void);
unsigned char pic_sel_9(void);
unsigned char pic_sel_10(void);
void delay(void);
void delay1(void);
void delay2(unsigned char us);
unsigned char HEX_TO_D(unsigned char num);
unsigned char D_TO_HEX(unsigned char num);
void com_send_command(unsigned char onebyte);
void system_init(void);
void picture_num(unsigned char num);
#include <pic_sel_all.h>
void delay(void)
{
unsigned int i;
unsigned int j;
for(i=200;i>0;i--)
for(j=200;j>0;j--);
}
void delay1(void)
{
unsigned int i;
unsigned int j;
for(i=10;i>0;i--)
for(j=100;j>0;j--);
}
void delay2(unsigned char us)
{
while(us--);
}
//把从智能LCD接收到的坐标值转换成10进制的数据;
//例如接收到的坐标值为0x10,则要将其转换成十进制的10;
unsigned char HEX_TO_D(unsigned char num)
{
unsigned char X;
X=(num/16)*10+num%16;
return(X);
}
//把十进制的坐标值转换成16进制坐标值;
//例如十进制10变成16进制0x10;
unsigned char D_TO_HEX(unsigned char num)
{
unsigned char X;
X=(num/10)*16+num%10 ;
return(X);
}
/********************************************************************
函 数 名:com_int_proc()
功 能:串口中断服务程序
***********************************************************************/
void com_int_proc(void) interrupt 4 using 3
{
unsigned char temp;
unsigned char temp1;
if (TI == 1) //是发送中断
{
TI = 0;
psend_int = 1; //可以发送
}
if (RI == 1) // 是接收中断
{
RI = 0; // 清串口接收中断
temp1 = SBUF;
temp = pint_write + 1; // 判断是否可以写入
if (temp == MAX_RINTL)
{
temp=0;
}
if(temp==3)
{
rece_start=1;
}
if(rece_start)
{
rece_start=0;
switch(temp1)
{
case 0x12:
rece_time=1;
break;
case 0x37:
rece_axes=1;
break;
default:
break;
}
}
if(rece_time)
{
pint_buf[pint_write] = temp1; //读取数据
}
if(rece_axes)
{
pint_buf1[pint_write] = temp1; //读取数据
}
pint_write = temp;
if(temp1==0xA5)
{
rece_flag++;
}
if((temp1==0xF0)&&(rece_flag==1))
{
if(rece_flag)
{
flag_axes++;
}
rece_flag = 0;
pint_write = 0;
rece_time = 0;
rece_axes = 0;
flag = 1;
}
}
}
//串口发送一个字节
void com_send_command(unsigned char onebyte)
{
psend_int = 0;
SBUF = onebyte;
while (psend_int != 1);
}
//初始化子程序
void system_init(void)
{
EA = 0; // CPU关中断
SCON = 0x48;
PCON = 0x00;
TMOD = 0x20;
TCON = 0x50;
TH1 = 0xFD; //波特率为9600 晶振11.0592MHZ的TH1=TL1=0xFD
TL1 = 0xFD;
TR1 = 1; //定时器1启动计数
ES = 1; //串口开中断
PX1 = 1; //串口低优先级
REN = 1; // 串口接收允许
EX1 = 1;
EA = 1; //开CPU中断
start = 1;
}
//发送显示指定编号的图片
void picture_num(unsigned char num)
{
unsigned char j;
str_test[2] = 0x91;
str_test[3] = 0x00;
str_test[4] = num;
str_test[5] = 0x00;
str_test[6] = 0x00;
str_test[7] = 0x00;
str_test[8] = 0x00;
str_test[9] = 0xA5;
str_test[10] = 0xF0;
for(j=0;j<11;j++)
{
com_send_command(str_test[j]);
}
}
main()
{
unsigned char m;
unsigned char return_value;
unsigned char return_num;
pic_index=pic_sel_0;
system_init(); //系统上电初始化
/*/////////关蜂呜器
com_send_command(0XF0);
com_send_command(0X5A);
com_send_command(0X31);
com_send_command(0X00);
com_send_command(0XA5);
com_send_command(0XF0); */
while(start)
{
start=0;
// undisp_clock(); //发送不显示时间命令
picture_num(0x00); //发送调用第一幅图片的命令
// system_start(); //在智能LCD上显示启动进度块
}
while(1)
{
while(return_value==0) //等待界面选择
{
return_value=(*pic_index)(); //根据返回值判断应该进入那个操作界面
_nop_();
}
switch(return_value)
{
case 0: //返回值为零不进入任何操作界面
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default:
break;
}
return_value=0;
return_num=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -