<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Atmega16單片機實用程序

          Atmega16單片機實用程序

          作者: 時間:2016-12-01 來源:網絡 收藏
          /****************************************************************
          名稱:設置顯示列地址
          功能:設置顯示列地址y,範圍0~63;
          *****************************************************************/
          void LCD_Command_set_y(uchar column)
          {
          RW_WRITE;
          RS_COMM;
          EN_CLR;
          SET_DATA(0x40+column); //設置顯示列地址y,範圍0~63;
          EN_SET;
          delayus(2);
          EN_CLR;
          }
          /********************************************************************
          名稱:LCD顯示數據寫入
          功能:將顯示數據寫入12864液晶
          *********************************************************************/
          void LCD_Command_writebyte(uchar data)
          {
          RW_WRITE;
          RS_DATA;
          EN_CLR;
          SET_DATA(data);
          EN_SET;
          delayus(2);
          EN_CLR;
          }
          /*********************************************************************
          名稱:LCD複位操作
          功能:複位LCD
          **********************************************************************/
          void LCD_RESET()
          {
          RESET;
          NOP();
          NOP();
          NOP();
          RESET_OVER;
          }
          /************************************************************
          名稱:清除指定範圍函數
          功能:清除LCD屏幕指定範圍起始行~結束行的顯示內容
          ************************************************************/
          void LCD_CLEAR_LINE(uchar startline,uchar endline)
          {
          uchar i,j;
          for(i-startline;i<=endline;i++)
          {
          CS1_EN;
          CS2_EN;
          LCD_Command_set_x(i);
          LCD_Command_set_y(0); //y地址每次操作後自動加1;
          for(j=0;j<64;j++)
          {
          LCD_Command_writebyte(0x00);
          }
          }
          }
          /*************************************************************
          名稱:顯示初始化
          功能:初始化LCD
          *************************************************************/
          void LCD_init()
          {
          LCD_RESET();
          LCD_CLEAR_LINE(0,7);
          NOP();
          LCD_Command_Displayonoff(1);
          NOP();
          LCD_Command_setstartline(0);
          }
          /**************************************************************
          名稱:LCD_WRITE_DATA
          輸入:x in [0,7] and y in [0,127]
          輸出:無
          功能:在LCD指定行列寫一個數據
          **************************************************************/
          void LCD_write_data(uchar x,uchar y,uchar data)
          {
          if(y<64)
          {
          CS1_EN;
          CS2_DIS;
          LCD_Command_set_x(x);
          LCD_Command_set_y(y);
          }
          else
          {
          CS1_DIS;
          CS2_EN;
          LCD_Command_set_x(x);
          LCD_Command_set_y(y-64);
          }
          LCD_Command_writebyte(data);
          delayus(1);
          }
          /*********************************************************
          名稱:LCD_WRITE_DOT
          輸入:x in [0,63] and y in [0,127]
          輸出:無
          功能:在指定像素位置描點,此函數為覆蓋式描點,原位置一個
          字節(jié)數據被覆蓋
          *********************************************************/
          void LCD_write_dot(uchar x,uchar y)
          {
          uchar x_address,y_address;
          uchar data=0;
          if((x<64)&&(y<128))
          {
          x_address=x>>3;
          y_address=y;
          LCD_write_data(x_address,y_address,data|(1<<(x%8)));
          }
          }
          /**********************************************************
          名稱:LCD_WRITE_CHAR
          輸入:x in [0,3],y in [0,15], disp-顯示字符自模數組首地址
          輸出:無
          功能:在LCD指定顯示單元顯示一個字符,每個顯示單元默認為8*16
          點陣字體,對12864點陣LCD,x最多顯示4行,y最多顯示16個字
          符。
          ***********************************************************/
          void LCD_write_char(uchar x,uchar y,const uchar *disp)
          {
          uchar i;
          uchar x_address;
          uchar y_address;
          if((x<4)&&(y<16))
          {
          for(i=0;i<8;i++)
          {
          x_address=x<<1;
          y_address=(y<<3)+i;
          LCD_write_data(x_address,y_address,*disp++);
          }
          for(i=0;i<8;i++)
          {
          x_address=(x<<1)+1;
          y_address=(y<<3)+i;
          LCD_write_data(x_address,y_address,*disp++);
          }
          }
          }
          /***********************************************************
          名稱:LCD_write_word
          輸入:x in [1,3],y in [1,14] disp-顯示字符字模組首地址
          輸出:無
          功能:在LCD指定顯示單元顯示一個中文字符,每個顯示單元默認為
          16*16點陣字體,對128*64點陣LCD,x最多顯示4行,y最多顯
          示16個字符,不允許顯示半個漢字
          ***********************************************************/
          void LCD_write_word(int x,int y,const uchar *disp)
          {
          int i;
          int x_address;
          int y_address;
          if((x<4)&&(y<15))
          {
          for(i=0;i<16;i++)
          {
          x_address=x<<1;
          y_address=(y<<3)+i;
          LCD_write_data(x_address,y_address,*disp++);
          }
          }
          for(i=0;i<16;i++)
          {
          x_address=(x<<1)+1;
          y_address=(y<<3)+i;
          LCD_write_data(x_address,y_address,*disp++);
          }
          }
          /************************************************************
          名稱:LCD_write_picture
          輸入:x in [1,7] and y in [0,127],x1_length-縱向像素(8的整數倍),
          y1_length-橫向像素(不一定為8的整數倍)
          輸出:無
          功能:在指定區(qū)域顯示指定像素大小的圖片
          ************************************************************/
          void LCD_write_picture(int x1,int y1,int x_length,int y_length,const int *pdata)
          {
          int x_address;
          int y_address;
          for(x_address=x1;x_address<=x1+(x_length>>3)-1;x_address++)
          {
          for(y_address=y1;y_address {
          LCD_write_data(x_address,y_address,*pdata);
          }
          }
          }
          /**********************************************************
          名稱: busy
          輸入:無
          輸出:忙狀態(tài)返回1,空閒狀態(tài)返回0;
          功能:判別LCD控制器內部狀態(tài),忙時返回1,閑時返回0
          **********************************************************/
          uchar busy(void)
          {
          RS_COMM;
          RW_READ;
          if(BIT(7)==0)
          {
          return 0;
          }
          else
          return 1;
          }
          /***************************************************************
          名稱:12864測試
          功能:逐點掃描
          ****************************************************************/
          void LCD_test()
          {
          uchar i,j;
          for(i=0;i<63;i++)
          {
          for(j=0;j<127;j++)
          {
          delayms(20);
          LCD_write_dot(i,j);
          delayms(100);
          }
          }
          }
          /**************************************************************
          名稱:axis()
          輸入:無
          輸出:無
          功能:標定界面坐標
          ***************************************************************/
          void axis()
          {
          uchar a,b,y,x;
          for(a=0;a<63;a++) //y軸坐標及分位點;
          {
          LCD_write_data(a,29,0x01);
          }
          for(b=0;b<127;b+=5) //x軸坐標及分位點;
          {
          LCD_write_data(30,b,0x04);
          }
          }
          /**********************************************************
          /********************************************************
          名稱:定時器0初始化
          輸入:
          輸出:
          描述:普通方式,中斷工作方式,注意中斷響應程序中要重裝初值
          *********************************************************/
          void timer0_init()
          {
          SFIOR|=BIT(0); //復位預定比例分頻器;
          TCCR0|=(BIT(2)|BIT(0)); //設定分頻器為1024分頻;
          //TCCR0|=BIT(0); //設定分頻器為無分頻;
          TCNT0=255; //裝訂計數初值
          TIMSK|=BIT(0); //開啟T/C0中斷;
          SEI(); //開總中斷;
          DDRC|=BIT(0);
          PORTC|=BIT(0);
          }
          /************************************************************
          中斷處理函數
          ************************************************************/
          #pragma interrupt_handler time0_proc:10
          void time0_proc()
          {
          TIMSK&=~BIT(0); //關閉中斷;
          TCNT0=255; //重新裝訂計數初值;
          PORTC^=BIT(0);
          TIMSK|=BIT(0); //開啟T0中斷
          }
          /*************************************************************
          名稱:6位數碼管按鍵位移顯示
          輸入:無
          輸出:無
          描述:按鍵輸入時在LED上移位顯示按鍵值,當按下f時,全部清零。
          **************************************************************/
          void keymovedis()
          {
          uchar keyval1,keyval2,presstimes;
          while(1)
          {
          if(keyscan()==15) //F的鍵值為15;
          {
          for(presstimes=0;presstimes<5;presstimes++)
          {
          dispbuf[presstimes]=date[0];
          show(0,presstimes);
          }
          }
          else
          {
          for(presstimes=0;presstimes<5;presstimes++)
          {
          dispbuf[5-presstimes]=dispbuf[4-presstimes];
          dispbuf[0]=keyscan();
          show(dispbuf[presstimes],presstimes);
          }
          }
          }
          }
          /*********************************************************
          主函數main().c,地球人都知道,不必廢話
          **********************************************************/
          void main()
          {
          while(1)
          {
          }
          }
          上一頁 1 2 3 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();