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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LCD12232串行顯示C51程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年04月18日   【字體:
原本想把這個案子介紹給一個朋友的,也許太忙了,連回個信息的時間都沒有;
沒辦法,就這樣試著寫下去;
這個程序包含三個方面的知識:
1。4*4按鍵的部份--完成(0~9)數字鍵,功能鍵,字母鍵的輸入;按鍵抬起后才能作用;
2。LCD12232的顯示部份;串行顯示,只用兩根線,顯示中英文字母及數字;
3。TTL系列芯片與CMOS系列芯片的知識,及做庫;這部份還沒完成;
我想第三步完成了,MM還符合一名合格的大學畢業生的;
哈!直接上代碼了,下載地址:http://www.zg4o1577.cn/f/12232ch.rar
#include <reg52.h>
 #define uint unsigned int
 #define uchar unsigned char
 sbit SID = P0^5 ;
 sbit SCK = P0^6 ;
 sbit BUZ = P0^7;
 
 sbit A0 = P3^0;
 sbit A1 = P3^1;
 sbit A2 = P3^2;
 sbit A3 = P3^3;
 sbit A4 = P3^4;
 sbit A5 = P3^5;
 sbit B0 = P0^0;
 sbit B7 = P1^7;
 sbit B6 = P1^6;
 sbit B5 = P1^5;
 sbit B4 = P1^4;
 sbit B3 = P1^3;
 sbit B2 = P1^2;
 uchar Key_Select,Key_Mode;
 uchar code Disp_1[]={"浙江師范大學行"};
 uchar code Disp_2[]={"知學院電子信息"};
 uchar code Disp_3[]={"工程08級毛夢超"};
 uchar code Disp_4[]={"的畢業設計--集"}; 
 uchar code Disp_5[]={"成電路測試系統!"};
 uchar code Disp_6[]={"指導老師:丁宇"}; 
 uchar code Disp_7[]={"請插入芯片后按"};
 uchar code Disp_8[]={"確認鍵進行測試!"};
 uchar code Disp_9[]={"請選擇芯片類型:"};
 uchar code Disp_10[]={"1-CMOS; 2-TTL;"};
 uchar code Disp_11[]={"請輸入CMOS系列"};
 uchar code Disp_12[]={"請輸入TTL 系列"};
 uchar code Disp_13[]={"IC型號:"};
//-----------------Delay_*2us-------------------
 void Delay_us(uchar x2us)
 {
  while(--x2us);
 }
 
 void Delay_ms(uint xms)
 {
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=122;j>0;j--)
   {}
 }
//-------------4KHz------------------- 
 void Buz(void)
 {
  uint i;
  for(i=200;i>0;i--)
  {
   BUZ=1;
   Delay_us(120);
   BUZ=0;
  }
  BUZ=0;
 }
//-------------LCD Part-------------------- 
//LCD顯示部份之寫地址
//-----------------------------------------
 void Lcd_Wr_Command(uchar com_data)
 {
  uchar i;
  uchar i_data;
  i_data=0xf8;
  SCK=0;
  for(i=0;i<8;i++)
  {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
  i_data=com_data;
  i_data&=0xf0;
  for(i=0;i<8;i++)
  {
   SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
   i_data=com_data;
   i_data<<=4;
   for(i=0;i<8;i++)
   {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
   }
   Delay_ms(1);
 }
//-------------LCD Part-------------------- 
//LCD顯示部份之寫數據
//-----------------------------------------
 void Lcd_Wr_Data(uchar com_data)
 {
  uchar i;
  uchar i_data;
  i_data=0xfa;
  
  for(i=0;i<8;i++)
  {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
  i_data=com_data;
  i_data&=0xf0;
  for(i=0;i<8;i++)
  {
   SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
  }
   i_data=com_data;
   i_data<<=4;
   for(i=0;i<8;i++)
   {
    SID=(bit)(i_data&0x80);
   SCK=0;
   SCK=1;
   i_data=i_data<<1;
   }
   Delay_ms(1);
 }
//-------------LCD Part-------------------- 
//LCD顯示部份之初始化
//-----------------------------------------
 void Lcd_init()
 {
  Delay_ms(100);
  Lcd_Wr_Command(0x30);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
  Lcd_Wr_Command(0x06);
  Delay_ms(5);
  Lcd_Wr_Command(0x0c);
  Delay_ms(5);
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  //Lcd_Wr_Command(0x80);
 }
 void Posit(uchar x,uchar y,uchar *String)
 {
  uchar Posit,Addr;
  if(y==1)
  Addr=0x80;
  if(y==2)
  Addr=0x90;
  Posit=Addr+x;
  Lcd_Wr_Command(Posit);
  while(*String!='\0')
  {
   Lcd_Wr_Data(*String++);
   Delay_ms(250);
  } 
 
 }
//-------------------------------------------------
//4*4鍵盤掃描部份;按鍵釋放后才返回鍵值
//------------------Key_Scan-----------------------
 uchar s_scan(void)
 {
  
  P2=0xf0;
  if((P2&0xf0)!=0xf0)
  {
   P2=0xf0;
   Delay_ms(30);
   if((P2&0xf0)!=0xf0)
   { 
     P2=0xfe ;  //第一列開始,逐行掃描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(16);}    //取消鍵
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(15);}    //確認鍵`
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(14);}    //選擇鍵
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(13);}    //測試鍵
    }
      P2=0xfd; //第二列開始,逐行掃描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(12);}    //“LS”字母輸入鍵
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(11);}    //“CD”字母輸入鍵
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(10);}    //“0”鍵
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(9);}    //“9”鍵
    }
     P2=0xfb;    //第三列開始,逐行掃描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(8);}   //“8”鍵
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(7);}   //“7”鍵
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(6);}   //“6”鍵
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(5);}   //“5”鍵
    }  
      P2=0xf7; //第四列開始,逐行掃描
    if((P2&0xf0)!=0xf0)
    {
     P2&=0xf0;
     if(P2==0xe0)
     {Buz();while(!(P2==0xf0));return(4);}  //“4”鍵
     if(P2==0xd0)
     {Buz();while(!(P2==0xf0));return(3);}  //“3”鍵
     if(P2==0xb0)
     {Buz();while(!(P2==0xf0));return(2);}  //“2”鍵
     if(P2==0x70)
     {Buz();while(!(P2==0xf0));return(1);}  //“1”鍵
    }
   }
  }
  return 0;
 }
//------------------main part-----------------
//主函數部份
//-----------------------------------------
 void main()
 {
  uchar key_code;
  Lcd_init();
//-------------------------------
//浙江師范大學行知學院電子信息
//------------------------------- 
  Posit(0,1,Disp_1);
  Posit(0,2,Disp_2);
  Delay_ms(1000);
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
//-------------------------------
//工程08級毛夢超的畢業設計-集
//-------------------------------
  Posit(0,1,Disp_3);
  Posit(0,2,Disp_4);
  Delay_ms(1000);
//-------------------------------
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
//-------------------------------
//成電路測試系統!指導老師:丁宇
//-------------------------------
  Posit(0,1,Disp_5);
  Posit(0,2,Disp_6);
  Delay_ms(5000);
//-------------------------------
  Lcd_Wr_Command(0x01);
  Delay_ms(5);
  Lcd_Wr_Command(0x02);
  Delay_ms(5);
//-------------------------------
//請插入芯片后按確認進行測試!
//-------------------------------
  Posit(0,1,Disp_7);
  Posit(0,2,Disp_8);
  Delay_ms(100);
  while(1)
  {
   key_code=s_scan();
//------------------------------------------------------
//鍵值處理程序,包含數字輸入鍵和字母輸入鍵以及功能鍵操作
//------------------------------------------------------
   switch(key_code)
   {
    case 1:
      {
       Lcd_Wr_Data('1');
       Delay_ms(300);
      }break;
    case 2:
      {
       Lcd_Wr_Data('2');
       Delay_ms(300);
      }break;
    case 3:
      {
       Lcd_Wr_Data('3');
         Delay_ms(300);
      }break;
    case 4:
      {
       Lcd_Wr_Data('4');
       Delay_ms(300);
      }break;
    case 5:
      {
       Lcd_Wr_Data('5');
       Delay_ms(300);
      }break;
    case 6:
      {
       Lcd_Wr_Data('6');
       Delay_ms(300);
      }break;
    case 7:
      {
       Lcd_Wr_Data('7');
       Delay_ms(300);
      }break;
    case 8:
      {
       Lcd_Wr_Data('8');
       Delay_ms(300);
      }break;
    case 9:
      {
       Lcd_Wr_Data('9');
       Delay_ms(300);
      }break;
    case 10:
      {
       Lcd_Wr_Data('0');
       Delay_ms(300);
      }break;
    case 11:
      {
       Posit(5,2,"CD");
       Delay_ms(300);
      }break;
    case 12:
      { 
       Posit(5,2,"LS");
       Delay_ms(300);
      }break;
    case 13:
      {
       P3=0x00;
       if(Key_Select==1)  //CMOS芯片型號CD4053
       {
       
       }
       if(Key_Select==2)  //TTL 芯片型號74LS00
       {
          P3=0x00;
        P1=0x00;
        B4=0x00;
 
        B6=0;B7=0;
        B3=0;B4=0;
         if((A0&0x01)&&(A3&0x01)&&(B0&0x01)&&(B5&0x01))
          {
         Buz();
         Buz();Delay_ms(500);
         Lcd_Wr_Command(0x01);
         Posit(0,1,"測試結果:");
         Posit(4,2,"OK!");
         Buz();Delay_ms(100);
         Buz();Delay_ms(300);
         Buz();Delay_ms(500);
         Buz();Delay_ms(800);
         Buz();Delay_ms(1000);
         Buz();Delay_ms(800);
         Buz();Delay_ms(500);
         Buz();Delay_ms(300);
         Buz();Delay_ms(100);
        }
        else
        {
         Buz();
         Lcd_Wr_Command(0x01);
         Posit(0,1,"測試結果:");
         Posit(4,2,"FAIL!");
         while(Key_Select)
         {
          Buz();
         }
        }
       }
       Delay_ms(300);
      } break;
    case 14: //選擇鍵
      {
       Key_Select++;
       if(Key_Select==1)
       {
        Lcd_Wr_Command(0x0f);
        Lcd_Wr_Command(0x90); 
       }
       if(Key_Select==2)
       {
        Lcd_Wr_Command(0x0f);
        Lcd_Wr_Command(0x94); 
       }
       if(Key_Select==3)
       {
        Lcd_Wr_Command(0x0c);
        Key_Select=0; 
       }
       Delay_ms(300);
      }break;
    case 15: //確認鍵
      {
       Key_Mode++;
       if(Key_Mode==3)
       {
        Key_Mode=0;
        Key_Select=0;
        Lcd_Wr_Command(0x0c);
        Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
        Posit(0,1,Disp_7);
        Posit(0,2,Disp_8); 
       }
       if(Key_Mode==1)
       {
        Lcd_Wr_Command(0x01);
        Posit(0,1,Disp_9);
        Posit(0,2,Disp_10);
       }
       if(Key_Mode==2)
       {
         if(Key_Select==1)
         {
          Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
          Posit(0,1,Disp_11);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95); 
         }
         if(Key_Select==2)
          {
          Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
          Posit(0,1,Disp_12);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95); 
         }
       }
       Delay_ms(300);
      }break;
    case 16: //取消鍵
      {
       if(Key_Select==1)
       {
        Lcd_Wr_Command(0x0c);
        Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
        Lcd_Wr_Command(0x0f);
        Posit(0,1,Disp_11);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95);
       }
       if(Key_Select==2)
       {
        Lcd_Wr_Command(0x0c);
        Lcd_Wr_Command(0x01);
        Lcd_Wr_Command(0x02);
        Lcd_Wr_Command(0x0f);
        Posit(0,1,Disp_12);
        Posit(0,2,Disp_13);
        //Lcd_Wr_Command(0x95);
       }
       Delay_ms(300);
      }break;
    default:P0=0xff;
   }  
    }
 }
關閉窗口

相關文章

主站蜘蛛池模板: 国产日韩一区二区三免费高清 | 黄色一级免费 | 极品粉嫩国产48尤物在线播放 | 欧美一级片久久 | 亚洲 中文 欧美 日韩 在线观看 | 久草视频在线播放 | 在线国产精品一区 | 欧美高清视频一区 | 欧美黄色录像 | 丁香六月伊人 | www日本在线 | 一级黄色录像毛片 | 超碰在线免费公开 | 亚洲天堂中文字幕 | 99亚洲精品 | 91啪亚洲精品 | 欧洲一区二区三区 | 亚洲一av | 国产一区 | 久久夜视频 | 99久久精品国产一区二区三区 | 亚洲aⅴ一区二区 | 高清视频一区二区三区 | 久久99精品国产99久久6男男 | 欧美三级在线 | a毛片视频网站 | 国产精品久久国产精品 | 黄色一级大片视频 | 国产激情视频在线 | 国产精品v | 国产精品91久久久久久 | 精品国产青草久久久久96 | 日韩色图视频 | 国产视频第一页 | 99精品久久久久久 | 精品久久久久久久久久久院品网 | 国产三级| 精品网| 日日淫| 成人免费在线观看视频 | 中文字幕视频网 |