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

📄 vision.c

📁 自动写的一个3200的应用程序
💻 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 + -