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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Atmega16單片機(jī)實(shí)用程序

          Atmega16單片機(jī)實(shí)用程序

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
          /****************************************************************
          名稱:設(shè)置顯示列地址
          功能:設(shè)置顯示列地址y,範(fàn)圍0~63;
          *****************************************************************/
          void LCD_Command_set_y(uchar column)
          {
          RW_WRITE;
          RS_COMM;
          EN_CLR;
          SET_DATA(0x40+column); //設(shè)置顯示列地址y,範(fàn)圍0~63;
          EN_SET;
          delayus(2);
          EN_CLR;
          }
          /********************************************************************
          名稱:LCD顯示數(shù)據(jù)寫入
          功能:將顯示數(shù)據(jù)寫入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;
          }
          /************************************************************
          名稱:清除指定範(fàn)圍函數(shù)
          功能:清除LCD屏幕指定範(fàn)圍起始行~結(jié)束行的顯示內(nèi)容
          ************************************************************/
          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地址每次操作後自動(dòng)加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]
          輸出:無(wú)
          功能:在LCD指定行列寫一個(gè)數(shù)據(jù)
          **************************************************************/
          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]
          輸出:無(wú)
          功能:在指定像素位置描點(diǎn),此函數(shù)為覆蓋式描點(diǎn),原位置一個(gè)
          字節(jié)數(shù)據(jù)被覆蓋
          *********************************************************/
          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-顯示字符自模數(shù)組首地址
          輸出:無(wú)
          功能:在LCD指定顯示單元顯示一個(gè)字符,每個(gè)顯示單元默認(rèn)為8*16
          點(diǎn)陣字體,對(duì)12864點(diǎn)陣LCD,x最多顯示4行,y最多顯示16個(gè)字
          符。
          ***********************************************************/
          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-顯示字符字模組首地址
          輸出:無(wú)
          功能:在LCD指定顯示單元顯示一個(gè)中文字符,每個(gè)顯示單元默認(rèn)為
          16*16點(diǎn)陣字體,對(duì)128*64點(diǎn)陣LCD,x最多顯示4行,y最多顯
          示16個(gè)字符,不允許顯示半個(gè)漢字
          ***********************************************************/
          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的整數(shù)倍),
          y1_length-橫向像素(不一定為8的整數(shù)倍)
          輸出:無(wú)
          功能:在指定區(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
          輸入:無(wú)
          輸出:忙狀態(tài)返回1,空閒狀態(tài)返回0;
          功能:判別LCD控制器內(nèi)部狀態(tài),忙時(shí)返回1,閑時(shí)返回0
          **********************************************************/
          uchar busy(void)
          {
          RS_COMM;
          RW_READ;
          if(BIT(7)==0)
          {
          return 0;
          }
          else
          return 1;
          }
          /***************************************************************
          名稱:12864測(cè)試
          功能:逐點(diǎn)掃描
          ****************************************************************/
          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()
          輸入:無(wú)
          輸出:無(wú)
          功能:標(biāo)定界面坐標(biāo)
          ***************************************************************/
          void axis()
          {
          uchar a,b,y,x;
          for(a=0;a<63;a++) //y軸坐標(biāo)及分位點(diǎn);
          {
          LCD_write_data(a,29,0x01);
          }
          for(b=0;b<127;b+=5) //x軸坐標(biāo)及分位點(diǎn);
          {
          LCD_write_data(30,b,0x04);
          }
          }
          /**********************************************************
          /********************************************************
          名稱:定時(shí)器0初始化
          輸入:
          輸出:
          描述:普通方式,中斷工作方式,注意中斷響應(yīng)程序中要重裝初值
          *********************************************************/
          void timer0_init()
          {
          SFIOR|=BIT(0); //復(fù)位預(yù)定比例分頻器;
          TCCR0|=(BIT(2)|BIT(0)); //設(shè)定分頻器為1024分頻;
          //TCCR0|=BIT(0); //設(shè)定分頻器為無(wú)分頻;
          TCNT0=255; //裝訂計(jì)數(shù)初值
          TIMSK|=BIT(0); //開(kāi)啟T/C0中斷;
          SEI(); //開(kāi)總中斷;
          DDRC|=BIT(0);
          PORTC|=BIT(0);
          }
          /************************************************************
          中斷處理函數(shù)
          ************************************************************/
          #pragma interrupt_handler time0_proc:10
          void time0_proc()
          {
          TIMSK&=~BIT(0); //關(guān)閉中斷;
          TCNT0=255; //重新裝訂計(jì)數(shù)初值;
          PORTC^=BIT(0);
          TIMSK|=BIT(0); //開(kāi)啟T0中斷
          }
          /*************************************************************
          名稱:6位數(shù)碼管按鍵位移顯示
          輸入:無(wú)
          輸出:無(wú)
          描述:按鍵輸入時(shí)在LED上移位顯示按鍵值,當(dāng)按下f時(shí),全部清零。
          **************************************************************/
          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);
          }
          }
          }
          }
          /*********************************************************
          主函數(shù)main().c,地球人都知道,不必廢話
          **********************************************************/
          void main()
          {
          while(1)
          {
          }
          }
          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();