Atmega16单片机实用程序
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中斷 } /********************************************
Atmega16单片机实用程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)