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

📄 debug.c

📁 51单片机收发短信的程序
💻 C
📖 第 1 页 / 共 3 页
字号:

#include"DEBUG.H"

//////////////////////////////////////////////////////////////////////////////////////
///////////////延时函数///////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
void delay()      //less than 1ms
{
    uchar  i;
    for(i=0;i<100;i++)
    _nop_();
}

void delay_160ms()    //160ms
{
    uchar  i,j;
    for(i=0;i<255;i++)
    {
        for(j=0;j<255;j++)
        {
            _nop_();

        }
    }
}

//延时500ms秒
void delay_500ms()
{
  uchar  i;
  for(i=0;i<2;i++)
    delay_160ms();
}

//延时1S
void delay_1s()     //1s
{
    uint i;
    for(i=0;i<45000;i++)
    {
          _nop_();
          _nop_();
    }
}

////////////////////////////////////////////////////////////////////////////////////////
/////////////液晶相关函数//////////////////////////////////////e/////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
//write command to LCM//
void write_cmd( uchar  cmdData)
{
  uint idata i;
  SID=1;
  for(i=0;i<5;i++)      //5个1
  {
    SCLK=0;SCLK=1;
  }
  SCLK=0;SID=0;SCLK=1;    //RW
  SCLK=0;SCLK=1;         //RS
  SCLK=0;SCLK=1;         //0
  SCLK=0;SID=cmdData&0x80;SCLK=1;
  SCLK=0;SID=cmdData&0x40;SCLK=1;
  SCLK=0;SID=cmdData&0x20;SCLK=1;
  SCLK=0;SID=cmdData&0x10;SCLK=1;
  SCLK=0;SID=0;SCLK=1;   //四个0
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SID=cmdData&0x08;SCLK=1;
  SCLK=0;SID=cmdData&0x04;SCLK=1;
  SCLK=0;SID=cmdData&0x02;SCLK=1;
  SCLK=0;SID=cmdData&0x01;SCLK=1;
  SCLK=0;SID=0;SCLK=1;    //四个0
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;
  delay();
}

//write data to LCD//
void write_data( char  datData)
{
  uint idata i;
  SID=1;                 //五个 1
  for(i=0;i<5;i++)
  {
    SCLK=0;SCLK=1;
  }
  SCLK=0;SID=0;SCLK=1;      //RW
  SCLK=0;SID=1;SCLK=1;     //RS
  SCLK=0;SID=0;SCLK=1;
  SCLK=0;SID=datData&0x80;SCLK=1;
  SCLK=0;SID=datData&0x40;SCLK=1;
  SCLK=0;SID=datData&0x20;SCLK=1;
  SCLK=0;SID=datData&0x10;SCLK=1;
  SCLK=0;SID=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SID=datData&0x08;SCLK=1;
  SCLK=0;SID=datData&0x04;SCLK=1;
  SCLK=0;SID=datData&0x02;SCLK=1;
  SCLK=0;SID=datData&0x01;SCLK=1;
  SCLK=0;SID=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;SCLK=1;
  SCLK=0;
  //reset();
  delay();
}


//液晶初始化函数
void init_LCD()
{
  write_cmd(0x30);  //功能设定:八位控制界面,基本指令集
  write_cmd(0x0c);  //显示状态开关:整体显示
  write_cmd(0x01);  //清除显示
  write_cmd(0x06);  //进入点设定:光标的移动方向(光标右移位址计数器加一)
  write_cmd(0x01);  //clear lcm screen
}

//print string to LCD///////
void  put_string( uchar display_start_addr,char *str_source)
{
   char idata i;
   write_cmd(display_start_addr);
   delay();
   for( i=0;*str_source!='\0';i++)
   {
     write_data(*str_source);
     delay();
     str_source++;
   }
}

//show vegetalbe type screen
void type_screen()
{
  put_string(0x90,"  ");  //显示定位
  switch(vege_page_index)
  {
    case 0:put_string(0x80,"01白萝卜02菠菜  05大白菜06大葱  03菜花  04长茄子");break;
    case 1:put_string(0x80,"07大蒜  08冬瓜  11荷兰豆12红尖椒09豆角  10佛手  ");break;
    case 2:put_string(0x80,"13胡萝卜14黄豆芽17鸡腿菇18尖椒  15黄瓜  16茴香  ");break;
    case 3:put_string(0x80,"19茭白  20芥菜  23空心菜24苦瓜  21金针菇22韭菜  ");break;
    case 4:put_string(0x80,"25莲藕菜26绿豆芽29木耳  30南瓜  27绿尖椒28毛豆  ");break;
    case 5:put_string(0x80,"31平菇  32茄子  35山药  36生菜  33芹菜  34青椒  ");break;
    case 6:put_string(0x80,"37生姜  38丝瓜  41茼蒿  42土豆  39蒜苗  40蒜薹  ");break;
    case 7:put_string(0x80,"43莴笋  44西红柿47西洋芹48香菜  45西葫芦46西兰花");break;
    case 8:put_string(0x80,"49香椿  50香菇  53洋白菜54洋葱头51小白菜52小葱  ");break;
    case 9:put_string(0x80,"55油菜  56油麦菜                57圆茄子58竹笋  ");break;
    default: break; //put_string(0x80,"page does not exist"); break;
  }
  put_string(0x98,"选择代号:");
  write_cmd(0x9d);                    //显示地址设为第4行第6列
  put_string(0x9d,vege_type) ;          //显示当前所选择的蔬菜类型
}

//蔬菜价格界面显示
void price_screen()
{
  char idata a[3]={0xa3,0xaf,'\0'} ;   ////////////中文字符'/'的中文字库编码
  write_cmd(0x01);    //全部清除显示
  put_string(0x90,"  ");  //用于显示定位,如果没有这句就经常不会正常显示
  if(vege_type[0]=='0')
    switch(vege_type[1])
    {
      case'1':put_string(0x90,"输入白萝卜价格:"); break;
      case'2':put_string(0x90,"输入菠菜价格:")  ; break;
      case'3':put_string(0x90,"输入菜花价格:")  ; break;
      case'4':put_string(0x90,"输入长茄子价格:"); break;
      case'5':put_string(0x90,"输入大白菜价格:"); break;
      case'6':put_string(0x90,"输入大葱价格:")  ; break;
      case'7':put_string(0x90,"输入大蒜价格:")  ; break;
      case'8':put_string(0x90,"输入冬瓜价格:")  ; break;
      case'9':put_string(0x90,"输入豆角价格:")  ; break;
      default: break;
    }
  else if(vege_type[0]=='1')
    switch(vege_type[1])
    {
      case'0':put_string(0x90,"输入佛手价格:")  ; break;
      case'1':put_string(0x90,"输入荷兰豆价格:"); break;
      case'2':put_string(0x90,"输入红尖椒价格:"); break;
      case'3':put_string(0x90,"输入胡萝卜价格:"); break;
      case'4':put_string(0x90,"输入黄豆牙价格:"); break;
      case'5':put_string(0x90,"输入黄瓜价格:")  ; break;
      case'6':put_string(0x90,"输入茴香价格:")  ; break;
      case'7':put_string(0x90,"输入鸡腿菇价格:"); break;
      case'8':put_string(0x90,"输入尖椒价格:")  ; break;
      case'9':put_string(0x90,"输入茭白价格:")  ; break;
      default: break;
    }
  else if(vege_type[0]=='2')
    switch(vege_type[1])
    {
      case'0':put_string(0x90,"输入芥菜价格:")  ; break;
      case'1':put_string(0x90,"输入金针菇价格:"); break;
      case'2':put_string(0x90,"输入韭菜价格:")  ; break;
      case'3':put_string(0x90,"输入空心菜价格:"); break;
      case'4':put_string(0x90,"输入苦瓜价格:")  ; break;
      case'5':put_string(0x90,"输入莲藕菜价格:"); break;
      case'6':put_string(0x90,"输入绿豆牙价格:"); break;
      case'7':put_string(0x90,"输入绿尖椒价格:"); break;
      case'8':put_string(0x90,"输入毛豆价格:")  ; break;
      case'9':put_string(0x90,"输入木耳价格:")  ; break;
      default: break;
    }
  else if(vege_type[0]=='3')
    switch(vege_type[1])
    {
      case'0':put_string(0x90,"输入南瓜价格:"); break;
      case'1':put_string(0x90,"输入平菇价格:"); break;
      case'2':put_string(0x90,"输入茄子价格:"); break;
      case'3':put_string(0x90,"输入芹菜价格:"); break;
      case'4':put_string(0x90,"输入青椒价格:"); break;
      case'5':put_string(0x90,"输入山药价格:"); break;
      case'6':put_string(0x90,"输入生菜价格:"); break;
      case'7':put_string(0x90,"输入生姜价格:"); break;
      case'8':put_string(0x90,"输入丝瓜价格:"); break;
      case'9':put_string(0x90,"输入蒜苗价格:"); break;
      default: break;
    }
  else if(vege_type[0]=='4')
    switch(vege_type[1])
    {
      case'0':put_string(0x90,"输入蒜薹价格:")  ; break;
      case'1':put_string(0x90,"输入茼蒿价格:")  ; break;
      case'2':put_string(0x90,"输入土豆价格:")  ; break;
      case'3':put_string(0x90,"输入莴笋价格:")  ; break;
      case'4':put_string(0x90,"输入西红柿价格:"); break;
      case'5':put_string(0x90,"输入西葫芦价格:"); break;
      case'6':put_string(0x90,"输入西兰花价格:"); break;
      case'7':put_string(0x90,"输入西洋芹价格:"); break;
      case'8':put_string(0x90,"输入香菜价格:")  ; break;
      case'9':put_string(0x90,"输入香椿价格:")  ; break;
      default: break;
    }
  else if(vege_type[0]=='5')
    switch(vege_type[1])
    {
      case'0':put_string(0x90,"输入香菇价格:")  ; break;
      case'1':put_string(0x90,"输入小白菜价格:"); break;
      case'2':put_string(0x90,"输入小葱价格:")  ; break;
      case'3':put_string(0x90,"输入洋白菜价格:"); break;
      case'4':put_string(0x90,"输入洋葱头价格:"); break;
      case'5':put_string(0x90,"输入油菜价格:")  ; break;
      case'6':put_string(0x90,"输入油麦菜价格:"); break;
      case'7':put_string(0x90,"输入圆茄子价格:"); break;
      case'8':put_string(0x90,"输入竹笋价格:")  ; break;
      default: break;
    }
  write_cmd(0x9a);
  put_string(0x9a,"(元  公斤)");
  put_string(0x9c,a);  ////第4行第5列显示中文字符'/'
}

//显示己存信息
void info_screen()
{
  char idata i;
  write_cmd(0x01);    //清除当前显示
  put_string(0x80,"  ");
  put_string(0x80,"发送以下信息吗?");
//  receive_SMS();     //receive SMS,judge the center_phone change
  for(i=info_page_index*3; (i<info_page_index*3+3)&&(i<info_count);i++)
    put_string(0x88+8*(i-info_page_index*3),info_string(i)) ;
}
//返回第x条信息对应的字符串
char *info_string(char x)
{
  char idata i ,j=-1 ,info[8], type[9]; //, price[6];
  static char idata total[17];

  //读取第x条蔬菜信息存到info[]数组
  for(i=0;i<strlen(sms_deliver.PDUData);i++)
  {
    if(sms_deliver.PDUData[i]==',')
      j++;
    if(j==x)
      break;
  }
  i++;   //i为第x条信息的第一个字符的索引号
  j=0;
  while(sms_deliver.PDUData[i]!=','&&sms_deliver.PDUData[i]!='\0')
  {
    info[j]=sms_deliver.PDUData[i];
    j++;  i++;
  }
  info[j]='\0';
  if(info[0]=='0')
    switch(info[1])
    {
      case'1':strcpy(type,"白萝卜:") ; break;
      case'2':strcpy(type,"菠菜:  ") ; break;
      case'3':strcpy(type,"菜花:  ") ; break;
      case'4':strcpy(type,"长茄子:") ; break;
      case'5':strcpy(type,"大白菜:") ; break;
      case'6':strcpy(type,"大葱:  ") ; break;
      case'7':strcpy(type,"大蒜:  ") ; break;
      case'8':strcpy(type,"冬瓜:  ") ; break;
      case'9':strcpy(type,"豆角:  ") ; break;
      default: break;
    }
  else if(info[0]=='1')
    switch(info[1])
    {
      case'0':strcpy(type,"佛手:  ") ; break;
      case'1':strcpy(type,"荷兰豆:") ; break;
      case'2':strcpy(type,"红尖椒:") ; break;
      case'3':strcpy(type,"胡萝卜:") ; break;
      case'4':strcpy(type,"黄豆牙:") ; break;
      case'5':strcpy(type,"黄瓜:  ") ; break;
      case'6':strcpy(type,"茴香:  ") ; break;
      case'7':strcpy(type,"鸡腿菇:") ; break;
      case'8':strcpy(type,"尖椒:  ") ; break;
      case'9':strcpy(type,"茭白:  ") ; break;
      default: break;
    }
  else if(info[0]=='2')
    switch(info[1])
    {
      case'0':strcpy(type,"芥菜:  ") ; break;
      case'1':strcpy(type,"金针菇:") ; break;
      case'2':strcpy(type,"韭菜:  ") ; break;
      case'3':strcpy(type,"空心菜:") ; break;
      case'4':strcpy(type,"苦瓜:  ") ; break;
      case'5':strcpy(type,"莲藕菜:") ; break;
      case'6':strcpy(type,"绿豆牙:") ; break;
      case'7':strcpy(type,"绿尖椒:") ; break;
      case'8':strcpy(type,"毛豆:  ") ; break;
      case'9':strcpy(type,"木耳:  ") ; break;
      default: break;
    }
  else if(info[0]=='3')
    switch(info[1])
    {
      case'0':strcpy(type,"南瓜:  "); break;
      case'1':strcpy(type,"平菇:  "); break;
      case'2':strcpy(type,"茄子:  "); break;
      case'3':strcpy(type,"芹菜:  "); break;
      case'4':strcpy(type,"青椒:  "); break;
      case'5':strcpy(type,"山药:  "); break;
      case'6':strcpy(type,"生菜:  "); break;
      case'7':strcpy(type,"生姜:  "); break;
      case'8':strcpy(type,"丝瓜:  "); break;
      case'9':strcpy(type,"蒜苗:  "); break;
      default: break;
    }
  else if(info[0]=='4')
    switch(info[1])
    {
      case'0':strcpy(type,"蒜薹:  ") ; break;
      case'1':strcpy(type,"茼蒿:  ") ; break;
      case'2':strcpy(type,"土豆:  ") ; break;
      case'3':strcpy(type,"莴笋:  ") ; break;
      case'4':strcpy(type,"西红柿:") ; break;
      case'5':strcpy(type,"西葫芦:") ; break;
      case'6':strcpy(type,"西兰花:") ; break;
      case'7':strcpy(type,"西洋芹:") ; break;
      case'8':strcpy(type,"香菜:  ") ; break;
      case'9':strcpy(type,"香椿:  ") ; break;
      default: break;
    }
  else if(info[0]=='5')
    switch(info[1])
    {
      case'0':strcpy(type,"香菇:  ") ; break;
      case'1':strcpy(type,"小白菜:") ; break;
      case'2':strcpy(type,"小葱:  ") ; break;
      case'3':strcpy(type,"洋白菜:") ; break;
      case'4':strcpy(type,"洋葱头:") ; break;
      case'5':strcpy(type,"油菜:  ") ; break;
      case'6':strcpy(type,"油麦菜:") ; break;
      case'7':strcpy(type,"圆茄子:") ; break;
      case'8':strcpy(type,"竹笋:  ") ; break;
      default: break;
    }
  strcpy(total,type);
  total[8]=' ';
  //拷贝蔬菜价格到数组total[]中
  for(j=2;j<strlen(info);j++)
    total[7+j]=info[j];
  for(j+=7; j<14; j++ )
    total[j]=' ';                //空余的数组字节置空格
  total[14]=0xd4;  total[15]=0xaa;  //'元'的中文字库码为0xd4aa
  total[16]='\0';
  return(total);
}




///////////////////////////////////////////////////////////////////////////////////////
/////////////按键相关函数//////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//数字键的响应函数
void key_num(char x)
{
  char c=0x30+x;        //数字x转换成ASC字符
  if(display_type==0)        //蔬菜品种界面
  {
    if(vege_type[0]=='\0'&&vege_type[1]=='\0')        //尚未设定蔬菜品种
      vege_type[0]=c;   //把x变换成字符保存到蔬菜品种第0位
    else if(vege_type[0]!='\0'&&vege_type[1]=='\0')
      vege_type[1]=c;              //保存到第1位
    put_string(0x9d,vege_type);         // 在第4行第6列处显示蔬菜种类代号

    return;
  }
  if(display_type==1)
  {
    if(vege_price[0]=='\0') vege_price[0]=c;                            //保存蔬菜价格
    else if(vege_price[1]=='\0')  vege_price[1]=c;
    else if(vege_price[1]=='.'&&vege_price[2]=='\0') vege_price[2]=c;
    else if( (vege_price[1]=='.'||vege_price[2]=='.')&&vege_price[3]=='\0' ) vege_price[3]=c;
    else if(vege_price[2]=='.'&&vege_price[4]=='\0')  vege_price[4]=c;
    vege_price[5]='\0';
    put_string(0x8a,vege_price);        //显示输入的价格

  }
}
// . 键的响应函数
void key_dot()
{
  if(display_type==1)
    if(vege_price[0]!='\0')
      if(vege_price[1]!='.'&&vege_price[2]!='.')
      {
        if(vege_price[1]=='\0')  vege_price[1]='.';
        else if(vege_price[2]=='\0')  vege_price[2]='.' ;
        put_string(0x8a,vege_price);   //显示价格
      }
  return;
}

//取消键的响应函数
void key_cancel()
{
  uchar idata i ;
  char chu[3]={0xb3,0xfd,'\0'};   //'除'字的中文字库为0xB3FD
  if(display_type==0)
  {
    if(vege_type[1]!='\0')
      vege_type[1]='\0';
    else if(vege_type[0]!='\0')

⌨️ 快捷键说明

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