<tfoot id="m7gql"><source id="m7gql"></source></tfoot>
      1. 久久久久亚洲精品无码网站,欧美午夜成人片在线观看,亚洲男女羞羞无遮挡久久丫,日产乱码一区二区国产内射,亚洲一区二区三区高清在线看,午夜福利理论片高清在线观看,国产免费午夜福利蜜芽无码,亚洲AV永久精品三区在线
        文章詳情

        ST7920反白程序

        日期:2025-12-29 14:10
        瀏覽次數(shù):2451
        摘要:

        ST7920反白程序

        /*ST7920驅(qū)動(dòng)的12864液晶,3線模式,帶任意位置漢字反白程序AVR單片機(jī)
         //ST7920驅(qū)動(dòng)的帶字庫(kù)的液晶雖然有反白指令,但是不能單行反白,單字反白,它只能1、3兩行或2、4兩行同時(shí)
        //反白。本程序克服了這個(gè)缺點(diǎn),可以設(shè)置任意位置的文字反白與取消反白。希望對(duì)有需要的朋友有用*/

        /***********************************************************************
        工    程:ST7920驅(qū)動(dòng)的12864液晶的3線串行驅(qū)動(dòng)模式    
        引腳定義:RS(CS)=====>PB5
            RW(SID)====>PB6
                  EN(SCLK)===>PB7
            PSB為硬件控制,接高電平為8位或4位的并行模式,接低電平為串行模式
            本例程使用3線串行模式
        ************************************************************************/
        #include <iom128v.h>
        #include <macros.h>

        #define uchar unsigned char
        #define uint unsigned int
        #define nop()  NOP()
        #define xtal 8
        #define CS  PB5
        #define SID  PB6
        #define SCLK PB7

        #define Set_CS() DDRB |= (1<<CS);PORTB |= (1<<CS)
        #define Set_SID() DDRB |= (1<<SID);PORTB |= (1<<SID)
        #define Set_SCLK() DDRB |= (1<<SCLK);PORTB |= (1<<SCLK)

        #define Clr_CS() DDRB |= (1<<CS);PORTB &=~(1<<CS)
        #define Clr_SID() DDRB |= (1<<SID);PORTB &=~(1<<SID)
        #define Clr_SCLK() DDRB |= (1<<SCLK);PORTB &=~(1<<SCLK)


         
        //====================================================================
        //函數(shù)聲明
        void Delay(uint ms);      //延時(shí)子程序
        void W_1byte(uchar RW, uchar RS, uchar W_data);
        void Write_8bits(uint W_bits);
        void LCD_Init(void);
        void Char_Set_XY(uchar x, uchar y, uchar *p);
        void Set_Draw(void);
        //設(shè)定哪一行,從那一個(gè)位置開始到那一個(gè)位置結(jié)束使用反白
        //x=液晶屏上漢字的位置(1~8);end_x=漢字結(jié)束的地址(1~8);y=1~4行
        //clear=1:**反白;clear=0:設(shè)置反白;
        void Set_White(uchar x,uchar y,uchar end_x,uchar clear);  
        void Draw_Pic(uchar x, uchar y, const uchar *Draw);
        /********************************************************************/

        void main()
        {
         uchar i = 0;
         PORTB = 0XFF;   //
         DDRB = 0XFF;   //PB口全部設(shè)為輸出模式
         Clr_CS();
         Clr_SID();
         Clr_SCLK();
         LCD_Init();
         Delay(50);
         LCD_Init();     //初始化兩邊是關(guān)鍵,否則液晶上電重起將不能顯示
         while(1)
         {
          nop();
          nop();
          Delay(500);
          Char_Set_XY(0,0,"ST7920_3_wires");
          Char_Set_XY(2,1,"反白練習(xí)");
          Char_Set_XY(0,2,"可以單字反白或不");
          Char_Set_XY(3,3,"反白");
          Delay(2000);
          Delay(2000);
          Set_Draw();
          Delay(100);
          Set_White(1,1,7,0);   //第1行,第1個(gè)漢字位置到第8漢字位置反白
          Set_White(3,2,6,0);   //第2行,第3個(gè)漢字位置到第6漢字位置反白
          Set_White(1,3,8,0);   //第3行,第1個(gè)漢字位置到第8漢字位置反白
          Set_White(4,4,5,0);   //第4行,第4個(gè)漢字位置到第5漢字位置反白
          Delay(2000);
          Delay(2000);
          Set_White(4,1,4,1);   //第1行,第4個(gè)漢字位置等取消反白
          Set_White(5,2,5,1);   //第2行,第5個(gè)漢字位置等取消反白
          Set_White(6,3,6,1);   //第3行,第6個(gè)漢字位置等取消反白
          Set_White(4,4,4,1);   //第4行,第4個(gè)漢字位置等取消反白
          Delay(2000);
          Delay(2000);
          Set_White(1,1,1,1);   //
          Set_White(3,2,3,1);   //
          Set_White(2,3,2,1);   //
          Set_White(5,4,5,1);   //
          Delay(2000);
          Delay(2000);
          Set_White(1,1,8,1);   //第1行,第1個(gè)漢字位置到第8漢字位置取消反白
          Set_White(1,2,8,1);   //第2行,第1個(gè)漢字位置到第8漢字位置取消反白
          Set_White(1,3,8,1);   //第3行,第1個(gè)漢字位置到第8漢字位置取消反白
          Set_White(1,4,8,1);   //第4行,第1個(gè)漢字位置到第8漢字位置取消反白
         
          Delay(2000);
          Delay(2000);
           
         }
        }
        /******************************************************************/
        void LCD_Init(void)
        {
          uchar cmd;
          cmd=0x30;   //功能設(shè)置 8位數(shù)據(jù),基本指令
         W_1byte(0,0,cmd);
         Delay(2);
         cmd=0x0C;   //顯示狀態(tài) ON,游標(biāo)OFF,反白OFF
         W_1byte(0,0,cmd); //寫指令
         Delay(2);
         cmd=0x01;   //**顯示
         W_1byte(0,0,cmd); //寫指令
         Delay(2);
         cmd=0x02;   //地址歸位
         W_1byte(0,0,cmd); //寫指令
         Delay(2);
         cmd=0x80;   //設(shè)置DDRAM地址
         W_1byte(0,0,cmd); //寫指令
         Delay(2);   //延時(shí)
        }
        /*******************************************************************
        函 數(shù) 名:W_1byte
        入口參數(shù):RW、RS、W_data
        出口參數(shù):無(wú)
        建立日期:2007年3月3日
        修改日期:
        函數(shù)作用:寫一個(gè)字節(jié)的數(shù)據(jù)到12864液晶,包括指令和數(shù)據(jù)
        說    明:RW=1,從液晶讀數(shù)據(jù)到MCU;RW=0,寫一個(gè)數(shù)據(jù)到液晶;
           (一般RW都設(shè)為0,即只向液晶寫數(shù)據(jù),不讀數(shù)據(jù))
                  RS=1,寫入的是數(shù)據(jù);RS=0,寫入的是指令;
            一般模式:RW=0,RS=1;寫數(shù)據(jù)
               RW=0,RS=0;寫指令
        ********************************************************************/
        void W_1byte(uchar RW, uchar RS, uchar W_data)
        {
         uint H_data,L_data,S_ID = 0xf8;  //11111RWRS0
         if(RW == 0)
         {
           S_ID &=~ 0x04;
         }
         else     //if(RW==1)
         {
           S_ID |= 0X04;
         }
         if(RS == 0)
         {
           S_ID &=~ 0x02;
         }
         else     //if(RS==1)
         {
           S_ID |= 0X02;
         }
         H_data = W_data;
         H_data &= 0xf0;   //屏蔽低4位的數(shù)據(jù)
         L_data = W_data;     //xxxx0000格式
         L_data &= 0x0f;   //屏蔽高4位的數(shù)據(jù)
         L_data <<= 4;   //xxxx0000格式
         Set_CS();
         Write_8bits(S_ID);   //發(fā)送S_ID
         Write_8bits(H_data); //發(fā)送H_data
         Write_8bits(L_data); //發(fā)送L_data
         Clr_CS();
        }
        /********************************************************************
        函 數(shù) 名:Write_8bits
        入口參數(shù):W_bits
        出口參數(shù):無(wú)
        建立日期:2007年3月3日
        修改日期:
        函數(shù)作用:負(fù)責(zé)串行輸出8個(gè)bit位
        說    明:
        ********************************************************************/
        void Write_8bits(uint W_bits)
        {
         uint i,Temp_data;
         for(i=0; i<8; i++)
         {
          Temp_data = W_bits;
          Temp_data <<= i;
          if((Temp_data&0x80)==0)
          {
            Clr_SID();
          }
          else
          {
            Set_SID();
          }
          nop();
          Set_SCLK();
          nop();
          nop();
          Clr_SCLK();
          nop();
          Clr_SID();
         }
        }
        /********************************************************************
        函 數(shù) 名:Delay
        入口參數(shù):ms
        出口參數(shù):無(wú)
        建立日期:2007年3月3日
        修改日期:
        函數(shù)作用:毫秒級(jí)的延時(shí)程序,當(dāng)晶振為12Mhz時(shí),xtal=12;
        說    明:
        ********************************************************************/
        void Delay(uint ms)
        {
            uint i;
            while(ms--)   
           {
             for(i=1;i<(uint)(xtal*143-2);i++)
                 ;
           }  
        }
        //===================================================================*/
        /********************************************************************
        函 數(shù) 名:Char_Set_XY
        入口參數(shù):x,y,*p
        出口參數(shù):無(wú)
        建立日期:2007年8月26日
        修改日期:
        函數(shù)作用:
        說    明:
        ********************************************************************/
        void Char_Set_XY(uchar x, uchar y, uchar *p)
        {
             if(y == 0)
         {
           W_1byte(0,0,(0x80+x));
         }
         if(y == 1)
         {
          W_1byte(0,0,(0x90+x));
         }
         if(y == 2)
         {
          W_1byte(0,0,(0x88+x));
         }
         if(y == 3)
         {
          W_1byte(0,0,(0x98+x));
         }
         while(*p != 0)
         {
          W_1byte(0,1,*p++);
         }
        }
        //===================================================================*/

        /********************************************************************
        函 數(shù) 名:Set_Draw(
        入口參數(shù):無(wú)
        出口參數(shù):無(wú)
        建立日期:2007年8月26日
        修改日期:
        函數(shù)作用:
        說    明:
        ********************************************************************/
        void Set_Draw(void)
        {
         //W_1byte(0,0,0x01);   //清屏
         Delay(20);     //延時(shí)
         //W_1byte(0,0,0x34);   //8BIT控制界面,擴(kuò)充指令集,,繪圖顯示OFF
         W_1byte(0,0,0x36);
         Delay(20);     //延時(shí)
        }
        //===================================================================*/
        /********************************************************************
        函 數(shù) 名:Draw_Pic  128*64
        入口參數(shù):x,y,*Draw
        出口參數(shù):無(wú)
        建立日期:2007年8月26日
        修改日期:
        函數(shù)作用:
        說    明:
        ********************************************************************/
        /*************************************************/

        void Draw_Pic(uchar x, uchar y, const uchar *Draw)
        {
         uchar i, j, temp_x, temp_y;  //
         temp_x = x;      //
         temp_y = y;      //
         temp_x |= 0x80;     //
         temp_y |= 0x80;     //
         for(i=0;i<32;i++ )    //上半屏32行
         {
          W_1byte(0,0,temp_y++);  //設(shè)置繪圖區(qū)的Y地址坐標(biāo)0
          W_1byte(0,0,temp_x);  //設(shè)置繪圖區(qū)的X地址坐標(biāo)0
          for(j=0;j<16;j++)   //
          {
            W_1byte(0,1,*Draw++); //
          }
         }
         
         temp_x = 0x88;     //
         temp_y = 0x80;     //
         j = 0;         //
         for(;i<64;i++ )
         {
          W_1byte(0,0,temp_y++);  //設(shè)置繪圖區(qū)的Y地址坐標(biāo)
          W_1byte(0,0,temp_x);   //設(shè)置繪圖區(qū)的X地址坐標(biāo)
          for(j=0;j<16;j++)
          {
            W_1byte(0,1,*Draw++); //
          }
         }
          
        }
        /**************************************************/
        /**************************************************/
        void Set_White(uchar x,uchar y,uchar end_x,uchar clear)
        {
          uchar i, j, white_x, white_y,white_end_x,clr_x,clr_y;  //
         white_end_x = (end_x-x+1);
         white_end_x <<= 1;
         if(y==1)
         {
           white_x = (0x80+x-1);
          white_y = 0x80;
          clr_x = 0x80;
          clr_y = 0x80;
         }
         else if(y==2)
         {
           white_x = (0x80+x-1);
          white_y = 0x90;
          clr_x = 0x80;
          clr_y = 0x90;
         }
         else if(y==3)
         {
           white_x = (0x88+x-1);
          white_y = 0x80;
          clr_x = 0x88;
          clr_y = 0x80;
         }
         else if(y==4)
         {
           white_x = (0x88+x-1);
          white_y = 0x90;
          clr_x = 0x88;
          clr_y = 0x90;
         }
         if(clear==0)//要反白時(shí),先將整行的液晶全部清成不反白(此處行指y)
         {
           for(i=0;i<16;i++ )   //16行
          {
            W_1byte(0,0,clr_y++); //設(shè)置繪圖區(qū)的Y地址坐標(biāo)0
           W_1byte(0,0,clr_x);  //設(shè)置繪圖區(qū)的X地址坐標(biāo)0
           for(j=0;j<16;j++)  //
           {
             W_1byte(0,1,0x00); //清成不反白
             nop();
           }
          }
         }
         nop();
         for(i=0;i<16;i++ )    //16行,因?yàn)槭?6*16漢字
         {
          W_1byte(0,0,white_y++);  //設(shè)置繪圖區(qū)的Y地址坐標(biāo)0
          W_1byte(0,0,white_x);  //設(shè)置繪圖區(qū)的X地址坐標(biāo)0
          for(j=0;j<white_end_x;j++) //
          {
            if(clear==1)
            {
              W_1byte(0,1,0x00); //取消這一行的8個(gè)點(diǎn)的反白,液晶地址自動(dòng)加1
                   //(此處行指一個(gè)一個(gè)液晶點(diǎn)所組成的行)
            }
            else
            {
            W_1byte(0,1,0xff); //反白這一行的8個(gè)點(diǎn),液晶地址自動(dòng)加1
                   //(此處行指一個(gè)一個(gè)液晶點(diǎn)所組成的行)
            }
            nop();
          }
         }
        }
        /*************************************************/
         

        主站蜘蛛池模板: av岛国在线免费播放| 偷拍精品一区二区三区| 国内精品国产成人国产三级| 日本视频久久| 久久香蕉成人免费大片| 国产欧美日韩亚洲精品区2345| 精品人妻系列无码专区久久| 国产人妖视频一区二区| 阳茎伸入女人阳道视频免费| 成人在线视频网站不卡| 久久精品国产再热青青青| 国产人久久人人人人爽| 国内精品伊人久久久久7777| 日本猛少妇色xxxxx猛交| 精品国偷自产在线视频99| 国内精品伊人久久久久7777| 人妻丝袜无码专区视频网站| 亚洲高清无在码在线无弹窗| 亚洲国产成人AV片在线播放| 日本一区二区中文字幕在线| 亚洲日韩激情无码一区| 成人亚洲一区无码久久| 特大巨黑吊xxxx高潮| 熟女性饥渴一区二区三区| 亚洲av片在线免费观看| 男人的天堂在线视频| 国产中文字幕久久黄色片| 国产精品自在线拍国产手机版| 1插菊花综合网| 久久午夜无码鲁丝片直播午夜精品 | 日韩成人在线视频观看| 亚洲av色区一区二区三区| 国产av麻豆mag剧集| 性激烈欧美三级在线播放| 强奷白丝美女在线观看| 国产精品一区二区不卡的视频| 久久国语露脸国产精品电影| 成年大片免费视频播放手机不卡| 日韩一区二区三区不卡片| 亚洲精品在看在线观看高清 | 91麻豆国产精品91久久久|