微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Atmega16单片机实用程序

Atmega16单片机实用程序

时间:12-01 来源:互联网 点击:

for(count=7;count>

data;

delayus(3);

}

/****************************************************************

名稱:開關顯示控制

功能:開啟與關閉顯示操作,1為開顯示,0為關閉顯示

*****************************************************************/

void LCD_Command_Displayonoff(uchar onoff)

{

RW_WRITE;

RS_COMM;

EN_CLR;

SET_DATA(0x3e + onoff); //onoff為1開顯示,為0關顯示;

EN_SET;

delayus(2);

EN_CLR;

}

/***************************************************************

名稱: LCD顯示起始行設定

功能:設置LCD顯示起始行位置,startline範圍0~63

***************************************************************/

void LCD_Command_setstartline(uchar startline)

{

RW_WRITE;

RS_COMM;

EN_CLR;

SET_DATA(0Xc0 + startline); //12864行地址為0~63之間設定;

EN_SET;

delayus(2);

EN_CLR;

}

/***************************************************************

名稱:設置顯示行頁地址

功能:設置顯示行頁地址,12864為0~7

****************************************************************/

void LCD_Command_set_x(uchar x)

{

RW_WRITE;

RS_COMM;

EN_CLR;

SET_DATA(0xB8+x); //設置12864行頁地址 x範圍0~7;

EN_SET;

delayus(2);

EN_CLR;

}

/****************************************************************

名稱:設置顯示列地址

功能:設置顯示列地址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]

輸出:無

功能:在指定像素位置描點,此函數為覆蓋式描點,原位置一個

字節數據被覆蓋

*********************************************************/

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

輸入

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top