久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

電子測(cè)速里程防盜報(bào)警器設(shè)計(jì)(3)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年09月12日   【字體:
//***************************************
//顯示程序
//功能:驅(qū)動(dòng)12864LCD
//***************************************
//延時(shí)子程序
void delay(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
         ;
}


void lcdwbit(bit n)
{  SIPIN = n;
   _nop_();
   SCLPIN = 1;
   _nop_();
   SCLPIN = 0;
   _nop_();
   SCLPIN = 1;
}


void lcdwbyte(unsigned char databyte)
{  unsigned char i;
   CSPIN=1;
   CSPIN=0;
   for(i=0;i<8;i++)
   {  if((databyte&0x80)==0x80)
         lcdwbit(1);
      else
         lcdwbit(0);
      databyte<<=1;
   }
   CSPIN=1;
}


//寫(xiě)指令代碼
void lcdwc(unsigned char cmdcode)
{  A0PIN=0;
   lcdwbyte(cmdcode);
}


//寫(xiě)數(shù)據(jù)
void lcdwd(unsigned char dispdata)
{  A0PIN=1;
   lcdwbyte(dispdata);
}


//內(nèi)部數(shù)據(jù)地址指針定位
void lcdpos(void)
{  unsigned char x1,y1;
   x1=(Lcd_CurrentX+1)>>4;              //列從1 → 128  x1為高四位
   if(Lcd_CurrentY<32)
      y1=Lcd_CurrentY+32;
   else
      y1=Lcd_CurrentY-32;
   lcdwc(0xb0|((y1/8)&0x0f));           //設(shè)置地址頁(yè)指針
   lcdwc(0x10|x1);                      //設(shè)置地址列指針(高四位)
   lcdwc((Lcd_CurrentX+1)&0x0f);        //設(shè)置地址列指針(低四位)
}


//當(dāng)前坐標(biāo)移動(dòng)到下一個(gè)點(diǎn)
void lcdcursornext(void)
{  Lcd_CurrentX++;
   if(Lcd_CurrentX>LCD_RIGHT)
   {  Lcd_CurrentX=LCD_LEFT;
        Lcd_CurrentY+=8;
        if(Lcd_CurrentY>LCD_BOTTOM)
           Lcd_CurrentY=LCD_TOP;
   }
}



void displaybyte(unsigned char dispdata)
{  lcdpos();         //內(nèi)部數(shù)據(jù)地址指針定位
   lcdwd(dispdata);  //寫(xiě)數(shù)據(jù)
   lcdcursornext();  //當(dāng)前坐標(biāo)移動(dòng)到下一個(gè)點(diǎn)
}

//整屏顯示
void lcdfill_quick(unsigned char FillData)
{  unsigned char i,j;
   for(j=0;j<8;j++)
   {  Lcd_CurrentY=j*8;
      Lcd_CurrentX=0;
      lcdpos();
      for(i=0;i<128;i++)
         lcdwd(FillData);
   }
}

void lcdfill(unsigned char FillData)
{  Lcd_Mask=0xff;
   for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;)
   {  displaybyte(FillData);
      if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP))
         break;
   }
}

//初始化
void lcdreset()
{  lcdwc(0xa2);    //設(shè)置LCD bias
   lcdwc(0xa0);    //設(shè)置ADC select
   lcdwc(0xc8);    //設(shè)置COM反向
   lcdwc(0x2f);    //設(shè)置電源控制模式
   lcdwc(0xaf);    //開(kāi)顯示
   lcdwc(0x40);    //設(shè)置顯示初始行
}


void putsizeimage(unsigned char XSIZE,unsigned char YSIZE,unsigned char code *s)
{  unsigned char k,lx,ly,a1,a2,y;
   k=0;
   YSIZE+=k;
   y=Lcd_CurrentY;
   for(lx=0;lx<XSIZE;lx++,Lcd_CurrentX++)
      for(Lcd_CurrentY=y,ly=k,a1=0;ly<YSIZE;s++)
      {  unsigned char p;
         a2=*s;

         lcdpos();
         p=YSIZE&0x7;
         if(ly<8)
         {  if(YSIZE<8)
            {  Lcd_Mask=LeftMask[k]&RightMask[p];
               //a1=lcdrd();
               a1&=(~Lcd_Mask);
               a1|=(a2&Lcd_Mask);
               lcdwd(a1);
               ly=YSIZE;
               Lcd_CurrentY+=YSIZE-k;
            }
            else
            {  Lcd_Mask=LeftMask[k];
               //a1=lcdrd();
               a1&=(~Lcd_Mask);
               a1|=(a2&Lcd_Mask);
               lcdwd(a1);
               ly+=8-k;
               Lcd_CurrentY+=8-k;
            }
         }
         else if(ly>=YSIZE-p)
         {  if(k>=p)
            {  s--;
               a1=*s;
               a2=0;
               for(p=0;p<k;p++)
               {  a2<<=1;
                  if((a1&0x80)==0x80)
                     a2++;
                  a1<<=1;
               }
               p=YSIZE&0x7;
            }
            Lcd_Mask=RightMask[p];
            //a1=lcdrd();
            a1&=(~Lcd_Mask);
            a1|=(a2&Lcd_Mask);
            lcdwd(a1);
            ly+=p;
            Lcd_CurrentY+=p;
         }
         else
         {  lcdwd(a2);
            ly+=8;
            Lcd_CurrentY+=8;
         }
         a1=*s;
      }
   Lcd_CurrentY=y;
}

//顯示漢字
void displaychinesechardot(unsigned int Index)
{  unsigned char code *s;
   s=ChineseCharDot+Index*CHINESECHARDOTSIZE;  //賦值漢字點(diǎn)陣首地址(數(shù)組名+  )
   {  if(Lcd_CurrentX>LCD_RIGHT-CHINESECHARSIZE+1)
      {  Lcd_CurrentX=LCD_LEFT;
         Lcd_CurrentY+=CHINESECHARSIZE;
         if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1)
            Lcd_CurrentY=LCD_TOP;
      }
      putsizeimage(CHINESECHARSIZE,CHINESECHARSIZE,s);
   }
}

//顯示英文字符
void displayenglishchardot(unsigned int Index)
{  unsigned char code *s;
   s=EnglishCharDot+Index*ENGLISHCHARDOTSIZE;
   if(Lcd_CurrentX>LCD_RIGHT-ENGLISHCHARSIZE+1)
   {  Lcd_CurrentX=LCD_LEFT;
      Lcd_CurrentY+=CHINESECHARSIZE;
      if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1)
         Lcd_CurrentY=LCD_TOP;
   }
   putsizeimage(ENGLISHCHARSIZE,CHINESECHARSIZE,s);
}

//信息顯示
void putchar(unsigned int uChar)
{  unsigned int i;
   if(uChar<128)
      for(i=0;i!=ENGLISHCHARNUMBER;i++)
      {  if(uChar==EnglishCode)
         {  displayenglishchardot(i);
            break;
         }
      }
   else
      for(i=0;i!=CHINESECHARNUMBER;i++)
      {  if(uChar==ChineseCode)
         {  displaychinesechardot(i);
            break;
         }
      }
}

//顯示漢字或英文字符
void put_str(unsigned char code *s)
{  unsigned int i;
   for(;*s!=0;s++)
   {  i=*s;
      if(*s>127)
      {  s++;
         i=i*256+*s;
      }
      if(i=='\n')
      {  Lcd_CurrentX=LCD_LEFT;
         if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1)
            Lcd_CurrentY=LCD_TOP;
         else
            Lcd_CurrentY+=CHINESECHARSIZE;
      }
      putchar(i);
   }
}

//顯示漢字或英文字符
void put_str_xy(unsigned char x,unsigned char y,unsigned char code *s)
{  Lcd_CurrentX=x;
   Lcd_CurrentY=y;
   put_str(s);
}




//****************************************
//屏幕主模式顯示
//*****************************************
void display()
{put_str_xy(x,y,"速度");
put_str_xy(x,y,"里程");
put_str_xy(x,y,"時(shí)間");
put_str_xy(x,y,"計(jì)程");
put_str_xy(x,y,"安全駕駛");
put_str_xy(x,y,"分");
put_str_xy(x,y,"km/h");
put_str_xy(x,y,"km");
put_str_xy(x,y,"hour:miniter:second");
put_str_xy(x,y,"minter1");
put_str_xy(x,y,"mile2");
put_str_xy(x,y,"mile1");
put_str_xy(x,y,"v");
}

//*************************************
//主函數(shù)
//功能:設(shè)置密碼鎖,修改密碼,調(diào)整時(shí)間,
//      設(shè)置開(kāi)鎖模式,計(jì)程、計(jì)時(shí)復(fù)位
//*************************************
void main()
{char keys,lock1;
RSTPIN=0;
LCD_CurrenX=0;
LCD_CurrenY=0;
delay(100);
RSTPIN=1;
lcdreset();
lcdfill(0x00);
delay(5000);
void dispaly();
timer_initialize();
xint0_initialize();
for(i=0;i<5;i++)
password=read_byte(i);
mode=password[4];
do{key();
    key1();
    keys=gotkey();
    switch(keys)
       {case 0xc :
             operation=1;
             lcdfill(0x00);
             if(check_password())
                {lock1=1;
                 put_str_xy(x,y,"密碼正確");
                 isd_setplay(0X00,0x00);        //密碼正確語(yǔ)音播報(bào)
                }
              else
                {put_str_xy(x,y,"密碼錯(cuò)誤");
                 isd_setpaly(0x00,0x00);
                }
              lcdfill(0x00);
              delay(5000);
              operation=0;
              display();
              break;
        case 0xE :
             operation=1;
             lcdfill(0x00);
             delay(5000);
             put_str_xy(x,y,"請(qǐng)輸入密碼");
             get_password();
             if(check_password())
               if(input_new_password())
                  {lcdfill(0x00);
                   delay(5000);
                   put_str_xy(x,y,"正確");
                  }
                else
                  {lcdfill(0x00);
                   delay(5000);
                   put_str_xy(x,y,"錯(cuò)誤");
                  }
             else
                {lcdfill(0x00);
                 delay(5000);
                 operation=0;
                 dispaly();
                }
             break;
        case 0xD :
             lock=0;
             lock1=0;
        case 0xf :
             mile2=0;
             hour1=0;
             miniter1=0;
             break;
       }
//*****************************************
//開(kāi)鎖模式
//******************************************
        if(lock==0)
          {if(mode==1)
              {if(p0^7==1&&lock1=1)
               lock=1;
              }
           if(mode==2)
              {if(p0^7==1||lock1)
               lock=1;
              }
           if(mode==3)
              {if(p0^7==1)
               lock=1;
              }  
          }
        if(p3^6==0)
          {lock=0;mile2=0;miniter=0;}
  }while(1); 

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日日日操 | 免费国产视频在线观看 | 91xxx在线观看 | 国产视频1| 粉嫩高清一区二区三区 | 免费一级黄色录像 | 91人人看| 天天射美女| 欧美国产免费 | 美日韩一区二区 | 中文字幕日韩专区 | 国产精品久久国产精品99 | 国产精品一区久久久 | 色婷婷亚洲国产女人的天堂 | 91精品国产综合久久久亚洲 | 国产精品高潮呻吟久久久久 | 国产精品人人做人人爽 | 日本三级电影在线观看视频 | av三级| 欧美成人a∨高清免费观看 色999日韩 | 亚洲经典一区 | 国产精品一区二区av | 国产激情网站 | 久久久xx| 久久男人| 亚洲在线 | 精品中文字幕一区二区三区 | 成人亚洲精品 | 91超碰在线| 欧美成人免费在线视频 | 欧美综合国产精品久久丁香 | 国产精品18久久久久久久 | 精品欧美一区二区三区久久久 | 在线看中文字幕 | 麻豆毛片| 国产精品视频一区二区三区四蜜臂 | 夏同学福利网 | 免费国产一区二区 | 国产精品完整版 | 美女视频黄色的 | 男女视频网站 |