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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1889|回復: 0
收起左側

51單片機12864顯示和按鍵控制程序

[復制鏈接]
ID:997284 發表于 2022-1-7 08:47 | 顯示全部樓層 |閱讀模式
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int


sbit CS =P2^6;
sbit SCK=P2^7;
sbit SID=P2^5;
sbit PSB=P3^2;
sbit KEY_ADD=P3^0;         //定義按鍵輸入端口
sbit KEY_DEC=P3^1;



unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a, 0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
};

//#define keyport P3


unsigned char curr,currold;//全局變量,當前箭頭位置
unsigned char code user16x16[]={ //箭頭圖片
0x00,0x00,0x20,0x00,0x30,0x00,0x38,0x00,0x3C,0x00,0x3E,0x00,0x3F,0x00,0x3F,0x80,
0x3F,0xC0,0x3F,0x80,0x3F,0x00,0x3E,0x00,0x3C,0x00,0x38,0x00,0x30,0x00,0x20,0x00,
};

//☆(0)
unsigned char code star16x16[]={//五角星
0xBF,0x3F,0xBF,0xBF,0xBF,0x9F,0xE3,0xFC,0xE3,0x9F,0xBF,0xBF,0xBF,0x3F,0xBF,0xFF,
0xFF,0xFF,0xBE,0xC6,0xD9,0xEF,0xEF,0xF7,0xF7,0xEF,0xD9,0xC6,0xBE,0xFF,0xFF,0xFF};/*"☆",0*/


unsigned char code *MainMenu[]=
{
{"1.設置1"},
{"2.設置2"},
{"3.設置3"},
{"4.設置4"},
{"5.設置5"},
{"6.設置6"},
{"7.設置7"},
{"8.設置8"},
{"9.設置9"},
{"10. 設置10"},
};




/*------------------------------------------------
   延時
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}

void DelayMs(unsigned char t)
{
     
while(t--)
{
     //大致延時1mS
     DelayUs2x(245);
     DelayUs2x(245);
}
}

/*------------------------------------------------
   發送
------------------------------------------------*/
void SendByte(unsigned char Dbyte)
{
         unsigned char i;
         for(i=0;i<8;i++)
         {
                 SCK = 0;
                 Dbyte=Dbyte<<1;
                 SID = CY;
                 SCK = 1;
                 SCK = 0;
         }
}
/*------------------------------------------------
   接收
------------------------------------------------*/
unsigned char ReceiveByte(void)
{
         unsigned char i,temp1,temp2;
         temp1=temp2=0;
         for(i=0;i<8;i++)
         {
                 temp1=temp1<<1;
                 SCK = 0;
                 SCK = 1;               
                 SCK = 0;
                 if(SID) temp1++;
         }
         for(i=0;i<8;i++)
         {
                 temp2=temp2<<1;
                 SCK = 0;
                 SCK = 1;
                 SCK = 0;
                 if(SID) temp2++;
         }
         return ((0xf0&temp1)+(0x0f&temp2));
}
/*------------------------------------------------
   忙檢測
------------------------------------------------*/
void CheckBusy( void )
{
         do    SendByte(0xfc);     //11111,RW(1),RS(0),0
         while(0x80&ReceiveByte());
}
/*------------------------------------------------
   寫指令
------------------------------------------------*/
void WriteCommand( unsigned char Cbyte )
{
         CS = 1;
         CheckBusy();
         SendByte(0xf8);          //11111,RW(0),RS(0),0
         SendByte(0xf0&Cbyte);
         SendByte(0xf0&Cbyte<<4);
         CS = 0;
}
/*------------------------------------------------
   寫數據
------------------------------------------------*/
void WriteData( unsigned char Dbyte )
{
         CS = 1;
         CheckBusy();
         SendByte(0xfa);          //11111,RW(0),RS(1),0
         SendByte(0xf0&Dbyte);
         SendByte(0xf0&Dbyte<<4);
         CS = 0;
}
/*------------------------------------------------
   延時
------------------------------------------------*/
void delay(unsigned int MS)
{
         unsigned char us,usn;
         while(MS!=0)             //for 12M
                 { usn = 2;
                         while(usn!=0)
                                 {
                                         us=0xf5;
                                         while (us!=0){us--;};
                                         usn--;
                                 }
                         MS--;
                 }
}
/*------------------------------------------------
   12864初始化
------------------------------------------------*/
void LcmInit( void )
{
         WriteCommand(0x30);
         WriteCommand(0x03);
         WriteCommand(0x0C);
         WriteCommand(0x01);
         WriteCommand(0x06);
}
/*------------------------------------------------
                      清屏
------------------------------------------------*/
void ClrScreen()
{
   WriteCommand(0x01);
   DelayMs(15);
}
/*void LcmClearTXT( void )
{
         unsigned char i;
         WriteCommand(0x30);
         WriteCommand(0x80);
         for(i=0;i<64;i++)
            WriteData(0x20);
}
void LcmClearBMP( void )
{
         unsigned char i,j;
         WriteCommand(0x34);
         WriteCommand(0x36);
         for(i=0;i<32;i++)
         {
                 WriteCommand(0x80|i);
                 WriteCommand(0x80);
                 for(j=0;j<32;j++)
                    WriteData(0);
         }
}*/
/*------------------------------------------------
                      字符串
------------------------------------------------*/
void PutStr(unsigned char x,unsigned char y,unsigned char code *s)
{
switch(y)
     {
      case 1: WriteCommand(0x80+x);break;
      case 2: WriteCommand(0x90+x);break;
      case 3: WriteCommand(0x88+x);break;
      case 4: WriteCommand(0x98+x);break;
      default:break;
     }
while(*s>0)
   {
      WriteData(*s);
      s++;
      DelayUs2x(50);
   }
}
/*------------------------------------------------
                      圖片
------------------------------------------------*/
void PutBMP(unsigned char *puts)
{
         unsigned int x=0;
         unsigned char i,j;
         WriteCommand(0x34);
         WriteCommand(0x36);
         for(i=0;i<32;i++)
         {
                 WriteCommand(0x80|i);
                 WriteCommand(0x80);
                 for(j=0;j<32;j++)   
                 {                     
                     WriteData(puts[x]);
                     x++;
                 }
         }
}

/*------------------------------------------------
                   用戶自定義字符
------------------------------------------------*/
void CGRAM()
{
     int i;
     WriteCommand(0x30);
     WriteCommand(0x40);
     for(i=0;i<16;i++)
       {
        WriteData(user16x16[i*2]);
        WriteData(user16x16[i*2+1]);
      }
}   
void STRAM()
{
     int i;
     WriteCommand(0x30);
     WriteCommand(0x40);
     for(i=0;i<16;i++)
       {
        WriteData(star16x16[i*2]);
        WriteData(star16x16[i*2+1]);
      }
}   
/*------------------------------------------------
                   顯示用戶自定義字符
------------------------------------------------*/
void DisplayCGRAM(unsigned char x,unsigned char y)
{
switch(y)
     {
      case 1: WriteCommand(0x80+x);break;
      case 2: WriteCommand(0x90+x);break;
      case 3: WriteCommand(0x88+x);break;
      case 4: WriteCommand(0x98+x);break;
      default:break;
     }
    WriteData(00);
    WriteData(00);

}  
/*------------------------------------------------
                   調用顯示更新
------------------------------------------------*/
void DisplayUpdata(void)
{   
    unsigned char num;
     ClrScreen();
    num=sizeof(MainMenu)/sizeof(MainMenu[0]);//判斷數組中數值個數
    if((0+(curr/4)*4)<num)
      PutStr(0,1,MainMenu[0+(curr/4)*4]);
    else //如果超出數組最大元素,則寫空信息,不判斷此信息可能會出現亂碼
      PutStr(0,1,"");
    if((1+(curr/4)*4)<num)
      PutStr(0,2,MainMenu[1+(curr/4)*4]);
    else
      PutStr(0,2,"");
    if((2+(curr/4)*4)<num)
      PutStr(0,3,MainMenu[2+(curr/4)*4]);
    else
      PutStr(0,3,"");
    if((3+(curr/4)*4)<num)
      PutStr(0,4,MainMenu[3+(curr/4)*4]);
    else
      PutStr(0,4,"");
    DisplayCGRAM(0,curr%4+1);
}
   


///////////////////////////////////////////////////////////
void main( void )
{
     
         PSB=0;
         LcmInit();
         PutStr(0,0,*MainMenu);//開機界面
         DisplayUpdata();
         delay(10);

         while(1)
             {  
          if(curr!=currold) //光標位置變化,則更新顯示
            {
        DisplayUpdata();
        currold=curr;
            }
         if(KEY_ADD == 0)
         {
           delay(10);
           if(KEY_ADD == 0)
           {
            while (KEY_ADD == 0);
            {
            if(curr<sizeof(MainMenu)/sizeof(MainMenu[0])-1)
            {
                curr++;
            }
            }
           }
         }
         if (KEY_DEC == 0)
         {
         delay(10);
         if(KEY_DEC == 0)
         {
         while (KEY_DEC == 0);
         {
           if(curr>0)
           {
           curr--;
           }
         }
         
         }
         }
                    
         }
         
         
         //end while
}//end main

Keil代碼下載: 1.zip (48.02 KB, 下載次數: 21)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美涩涩网| 欧美精品一区二区免费视频 | 成人欧美一区二区三区1314 | 国产中文视频 | 亚洲在线中文字幕 | 亚洲欧美日韩精品久久亚洲区 | 精品国产乱码久久久久久果冻传媒 | 亚洲国产偷 | julia中文字幕久久一区二区 | 欧美性猛交 | 欧美日韩国产一区二区三区 | 伊人超碰 | 亚洲成人av在线播放 | 免费欧美视频 | 欧美日韩亚洲一区 | 亚洲国产成人精品女人久久久野战 | 久久伊人一区二区 | 色视频免费 | 久久精品天堂 | 久久综合一区 | 91精品一区| 中文字幕在线精品 | 在线观看黄视频 | 久久国产精品一区 | 欧美视频一区二区三区 | 欧美日韩国产一区 | 国产一区二区自拍 | 精品日韩电影 | 免费国产视频在线观看 | 国产精品有限公司 | 男人午夜视频 | 99这里只有精品视频 | 日本成人中文字幕在线观看 | av资源中文在线天堂 | 一级毛片免费看 | 国产精品视频网站 | 欧美精品1区 | 日韩av手机在线观看 | 九久久 | 国产亚洲精品综合一区 | 亚洲高清在线观看 |