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

Atmega16单片机实用程序

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

for(count=7;count>

x_address=x>>

: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的整數倍)

輸出:無

功能:在指定區域顯示指定像素大小的圖片

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

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

輸入:無

輸出:忙狀態返回1,空閒狀態返回0;

功能:判別LCD控制器內部狀態,忙時返回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中斷

}

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

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

网站地图

Top