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

📄 xianshi.h

📁 基于430F247单片机,4Mflash串行读取存储器SST25VF032B的读写程序
💻 H
字号:

uchar keym;
uchar flag;
uchar pid;
uchar tzw;
uchar tdata;
uchar fixs;
uchar gnszbit;//进入功能还是设置标志
uchar dd[2];//保存设置模式下的断点信息
uchar gbwdbj=0;//打开关闭温度报警功能标志
uchar gbgdbj=0;//打开关闭高度报警功能标志
uchar qfbit;//取反显示标志
void qufanpd(uchar addry,uchar addrx)//取反判断程序
{if(pid==2&&gnszbit==1)//在第二层且是功能表选项
 {if((tzw==9||tzw==6||tzw==3)&&addry==0x40)
  {qfbit=2;}
  else if((tzw==8||tzw==5||tzw==2)&&addry==0x43)
  {qfbit=1;}
  else if((tzw==7||tzw==4||tzw==1)&&addry==0x43)
  {qfbit=2;}
  else
  {qfbit=0;}
 }
 else if(pid==2&&gnszbit==2)//在第二层且是设置选项
 {if((tzw==7||tzw==4||tzw==1)&&addry==0x40)
  {qfbit=2;}
  else if((tzw==6||tzw==3)&&addry==0x43)
  {qfbit=1;}
  else if((tzw==5||tzw==2)&&addry==0x43)
  {qfbit=2;}
  else
  {qfbit=0;}
 }
 else if(pid==3)//在设置选项的第三层
 {switch(dd[0])
  {case 7://时间设置时位取反
   if(tzw==6&&addry==0x43&&addrx==0x86)
   {qfbit=1;}
   else if(tzw==5&&addry==0x43&&addrx==0x8c)
   {qfbit=1;} 
   else if(tzw==4&&addry==0x43&&addrx==0x98)
   {qfbit=1;} 
   else if(tzw==3&&addry==0x43&&addrx==0x9e)
   {qfbit=1;} 
   else if(tzw==2&&addry==0x43&&addrx==0xaa)
   {qfbit=1;} 
   else if(tzw==1&&addry==0x43&&addrx==0xb0)
   {qfbit=1;} 
   else if(tzw==13&&addry==0x42&&addrx==0x86)
   {qfbit=1;} 
   else if(tzw==12&&addry==0x42&&addrx==0x8c)
   {qfbit=1;} 
   else if(tzw==11&&addry==0x42&&addrx==0x98)
   {qfbit=1;} 
   else if(tzw==10&&addry==0x42&&addrx==0x9e)
   {qfbit=1;} 
   else if(tzw==9&&addry==0x42&&addrx==0xaa)
   {qfbit=1;} 
   else if(tzw==8&&addry==0x42&&addrx==0xb0)
   {qfbit=1;} 
   else if(tzw==7&&addry==0x42&&addrx==0xc2)
   {qfbit=1;} 
   else
   {qfbit=0;}
   break;
   ///////////////////////////////////////////
   case 6://温度设置时位取反
   if(tzw==6&&addry==0x42&&addrx==0x80)
   {qfbit=1;}
   else if(tzw==5&&addry==0x43&&addrx==0x98)
   {qfbit=1;} 
   else if(tzw==4&&addry==0x43&&addrx==0x9e)
   {qfbit=1;} 
   else if(tzw==3&&addry==0x43&&addrx==0xa4)
   {qfbit=1;} 
   else if(tzw==2&&addry==0x43&&addrx==0xaa)
   {qfbit=1;} 
   else if(tzw==1&&addry==0x43&&addrx==0xb6)
   {qfbit=1;} 
   else 
   {qfbit=0;}
   break;
   /////////////////////////////////////
   case 5://高度设置时取反程序
   if(tzw==6&&addry==0x43&&addrx==0x98)
   {qfbit=1;} 
   else if(tzw==5&&addry==0x43&&addrx==0x9e)
   {qfbit=1;} 
   else if(tzw==4&&addry==0x43&&addrx==0xa4)
   {qfbit=1;} 
   else if(tzw==3&&addry==0x43&&addrx==0xaa)
   {qfbit=1;} 
   else if(tzw==2&&addry==0x43&&addrx==0xb0)
   {qfbit=1;} 
   else if(tzw==1&&addry==0x43&&addrx==0xb6)
   {qfbit=1;}  
   else 
   {qfbit=0;}  
   break;
   //////////////
   case 4://闹钟设置时
   if(tzw==8&&addry==0x42&&(addrx==0x80||addrx==0x8c))
   {qfbit=1;}
   else if(tzw==7&&addry==0x43&&addrx==0x98)
   {qfbit=1;} 
   else if(tzw==6&&addry==0x43&&addrx==0x9e)
   {qfbit=1;} 
   else if(tzw==5&&addry==0x43&&addrx==0xaa)
   {qfbit=1;} 
   else if(tzw==4&&addry==0x43&&addrx==0xb0)
   {qfbit=1;} 
   else if(tzw==3&&addry==0x43&&addrx==0xbc)
   {qfbit=1;} 
   else if(tzw==2&&addry==0x43&&addrx==0xc2)
   {qfbit=1;} 
   else if(tzw==1&&addry==0x44&&addrx==0x9e)
   {qfbit=1;}  
   else 
   {qfbit=0;} 
   break;
   //////
   case 3://时区设置时
   if(tzw==1&&addry==0x43&&addrx==0xaa)
   {qfbit=1;}
   else if(tzw==2&&addry==0x43&&addrx==0xa4)
   {qfbit=1;}
   else if(tzw==3&&addry==0x42&&addrx==0x98)
   {qfbit=1;}
   else
   {qfbit=0;}
   break;
   ///////
   case 2://日历查询时
   if(tzw==6&&addry==0x42&&addrx==0x80)
   {qfbit=1;}
   else if(tzw==5&&addry==0x42&&addrx==0x86)
   {qfbit=1;}
   else if(tzw==4&&addry==0x42&&addrx==0x92)
   {qfbit=1;}
   else if(tzw==3&&addry==0x42&&addrx==0x98)
   {qfbit=1;}
   else if(tzw==2&&addry==0x42&&addrx==0xa4)
   {qfbit=1;}
   else if(tzw==1&&addry==0x42&&addrx==0xaa)
   {qfbit=1;}
   else
   {qfbit=0;}
   break;
     //////////////
   case 1://位置设置时
   if(tzw==8&&addry==0x42&&(addrx==0x80||addrx==0x8c))
   {qfbit=1;}
   else if(tzw==7&&addry==0x43&&addrx==0x98)
   {qfbit=1;} 
   else if(tzw==6&&addry==0x43&&addrx==0x9e)
   {qfbit=1;} 
   else if(tzw==5&&addry==0x43&&addrx==0xa4)
   {qfbit=1;} 
   else if(tzw==4&&addry==0x43&&addrx==0xb0)
   {qfbit=1;} 
   else if(tzw==3&&addry==0x43&&addrx==0xb6)
   {qfbit=1;} 
   else if(tzw==2&&addry==0x43&&addrx==0xc2)
   {qfbit=1;} 
   else if(tzw==1&&addry==0x43&&addrx==0xc8)
   {qfbit=1;}  
   else 
   {qfbit=0;} 
   break;
  }
 }
 else 
 {qfbit=0;}
}
/*********显示程序开始************************/
void LCD_write_byte(uchar dat,uchar command)
{uchar i;
 P2OUT &= ~BIT1;//	把CE拉高
 if (command == 0)
 {P2OUT &= ~BIT2;}//把DC=0;
 else
 {P2OUT |= BIT2;}//DC=1;
 for(i=0;i<8;i++)
 {if(dat&0x80)
  {P2OUT |= BIT3;}//DIN输出1;
  else
  {P2OUT &= ~BIT3;}//DIN输出0;
  P2OUT &= ~BIT4;//产生时钟上升沿
  dat = dat << 1;//
  P2OUT |= BIT4;
 }
 P2OUT |= BIT1;//把CE拉低
}
void LCD_init(void)
{P2DIR |=0x1f;//把P2.0~4定义为输出
 P2OUT &= ~BIT0;//复位RST
 delay_us(1);
 P2OUT |= BIT0;
 LCD_write_byte(0x21,0);	// 使用扩展命令设置LCD模式
 LCD_write_byte(0xc8,0);	// 设置偏置电压
 LCD_write_byte(0x06,0);	// 温度校正
 LCD_write_byte(0x13,0);	// 1:48
 LCD_write_byte(0x20,0);	// 使用基本命令
 LCD_write_byte(0x0c,0);	// 设定显示模式,正常显示
}
void LCD_clear(void)
{unsigned int i;
 LCD_write_byte(0x0c, 0);			
 LCD_write_byte(0x80, 0);			
 for (i=0; i<504; i++)
 LCD_write_byte(0, 1);			
}
void LCD_write_addrdata(uchar addry,uchar addrx,uchar wdata)//向某一地址写一个数据
{uchar j;
 uchar xsddata[6];
 qufanpd(addry,addrx);//调用取反判断程序
 LCD_write_byte(addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<6;j++)
 {xsddata[j]=flashRead_data((wdata*6+j));
  if(qfbit==1)//要取反
  {xsddata[j]=~xsddata[j];}
  LCD_write_byte(xsddata[j],1);
 }
}
void LCD_write_addrdata1(uchar addry,uchar addrx,uchar wdata,uchar wdata1,uchar hdata)//向某一地址写2个数据和一个汉字
{uchar j;
 uchar xsddata[6],xsddata1[6],xsddata2[6],xsddata3[6];
 uchar xshdata1[24],xshdata[12];
 for(j=0;j<6;j++)
 {xsddata[j]=(flashRead_data((wdata*6+j))<<4)&0xf0;
  xsddata1[j]=(flashRead_data((wdata*6+j))>>4)&0x0f;
  xsddata2[j]=(flashRead_data((wdata1*6+j))<<4)&0xf0;
  xsddata3[j]=(flashRead_data((wdata1*6+j))>>4)&0x0f;
 }
 for(j=0;j<12;j++)
 {xshdata1[j]=(flashRead_data((200+hdata*24+j))<<4)&0xf0;
  xshdata[j]=(flashRead_data((200+hdata*24+j))>>4)&0x0f;
 }
 for(j=0;j<6;j++)
 {xshdata1[j]=xshdata1[j]|xsddata1[j];}
 for(j=6;j<12;j++)
 {xshdata1[j]=xshdata1[j]|xsddata3[j-6];}
 for(j=12;j<24;j++)
 {xshdata1[j]=(flashRead_data((200+hdata*24+j))<<4)&0xf0;
  xshdata1[j]=xshdata1[j]|xshdata[j-12];
 }
 LCD_write_byte(addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<6;j++)
 {LCD_write_byte(xsddata[j],1);}
 for(j=0;j<6;j++)
 {LCD_write_byte(xsddata2[j],1);}
 LCD_write_byte(++addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<12;j++)
 {LCD_write_byte(xshdata1[j],1);}
 LCD_write_byte(++addry,0);
 LCD_write_byte(addrx,0);
 for(j=12;j<24;j++)
 {LCD_write_byte(xshdata1[j],1);}
}
void LCD_write_addrhan(uchar addry,uchar addrx,uchar hdata)
{uchar j;
 uchar xshdata[24];
 qufanpd(addry,addrx);//调用取反判断程序
 LCD_write_byte(addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<12;j++)
 {xshdata[j]=flashRead_data((200+hdata*24+j));
  if(qfbit==1)//要取反
   {xshdata[j]=~xshdata[j];}
  LCD_write_byte(xshdata[j],1);
 }
 LCD_write_byte(++addry,0);
 LCD_write_byte(addrx,0);
 for(j=12;j<24;j++)
 {xshdata[j]=flashRead_data((200+hdata*24+j));
  if(qfbit==1)//要取反
   {xshdata[j]=~xshdata[j];}
  LCD_write_byte(xshdata[j],1);
 }
}
void LCD_write_addrhan1(uchar addry,uchar addrx,uchar hdata1)//向某一地址写1个汉字2
{uchar j;
 uchar xshdata1[24];
 uchar xshdata[12];
 uchar xshdata3[12];
 qufanpd(addry,addrx);//调用取反判断程序
 for(j=0;j<12;j++)
 {xshdata1[j]=flashRead_data((200+hdata1*24+j))<<4;
  xshdata[j]=flashRead_data((200+hdata1*24+j))>>4;
  if(qfbit==1)//要取反
  {xshdata1[j]=(~xshdata1[j])&0xf0;
   xshdata[j]=(~xshdata[j])&0x0f;
  }
 }
 for(j=12;j<24;j++)
 {xshdata3[j-12]=flashRead_data((200+hdata1*24+j))<<4;
  if(qfbit==1)//要取反
  {xshdata3[j-12]=(~xshdata3[j-12])&0xf0;}
  xshdata1[j]=xshdata3[j-12]|xshdata[j-12];
 }
 LCD_write_byte(addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<12;j++)
 {LCD_write_byte(xshdata1[j],1);}
 LCD_write_byte(++addry,0);
 LCD_write_byte(addrx,0);
 for(j=12;j<24;j++)
 {LCD_write_byte(xshdata1[j],1);}
}
void LCD_write_addrhan2(uchar addry,uchar addrx,uchar hdata1,uchar hdata2)//向某一地址写2汉字
{uchar j;
 uchar xshdata1[24],xshdata2[24];
 uchar xshdata[12];
 uchar xshdata3[12];
 qufanpd(addry,addrx);//调用取反判断程序
 for(j=0;j<12;j++)
 {xshdata1[j]=flashRead_data((200+hdata1*24+j));
  xshdata[j]=flashRead_data((200+hdata2*24+j))<<4;
  if(qfbit==1)//要取反
  {xshdata1[j]=~xshdata1[j];}  
  if(qfbit==2)//要取反
  {xshdata[j]=(~xshdata[j])&0xf0;}
 }
 for(j=12;j<24;j++)
 {xshdata3[j-12]=flashRead_data((200+hdata1*24+j));
  if(qfbit==1)//要取反
  {xshdata3[j-12]=~xshdata3[j-12];
   xshdata3[j-12]=xshdata3[j-12]&0x0f;
  }  
  xshdata1[j]=xshdata3[j-12]|xshdata[j-12];
 }
 ////////////////////
 LCD_write_byte(addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<12;j++)
 {LCD_write_byte(xshdata1[j],1);}
 LCD_write_byte(++addry,0);
 LCD_write_byte(addrx,0);
 for(j=12;j<24;j++)
 {LCD_write_byte(xshdata1[j],1);}
 /////////////////////
 for(j=0;j<12;j++)
 {xshdata[j]=(flashRead_data((200+hdata2*24+j))>>4)&0x0f;
 }
 for(j=12;j<24;j++)
 {xshdata2[j]=(flashRead_data((200+hdata2*24+j))<<4)|xshdata[j-12];
 }
 LCD_write_byte(++addry,0);
 LCD_write_byte(addrx,0);
 if(qfbit==2)//要取反
 {for(j=12;j<24;j++)
  {xshdata2[j]=~xshdata2[j];}
 }
 for(j=12;j<24;j++)
 {LCD_write_byte(xshdata2[j],1);}
}
void znanzhtu(uchar addry,uchar addrx,uchar tudata)
{uchar j;
 LCD_write_byte(addry,0);
 LCD_write_byte(addrx,0);
 for(j=0;j<27;j++)
 {LCD_write_byte(flashRead_data((3000+tudata*27+j)),1);}
}

⌨️ 快捷键说明

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