?? lcd.c
字號:
void bmp_tran(unsigned char x,unsigned char y,unsigned char high,unsigned char width,const unsigned char *bmp_p)
{
unsigned char i,j;
x+=4;
for(j=0;j<high;j++)
{
for(i=0;i<width;i++)
{
ocmj_write(0xf3);
ocmj_write(x);
ocmj_write(y);
ocmj_write(*bmp_p);
bmp_p++;
x++;
}
x-=width;
y++;
}
}
/* 傳送LCD內(nèi)部漢字數(shù)據(jù)到LCD */
/* x:0x00~0x07 y:0x00~0x03 */
void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p)
{
x+=2;
while((*hz_p)!=0)
{
ocmj_write(0xf0);
ocmj_write(x);
ocmj_write(y);
ocmj_write(*hz_p-0xa0);
hz_p++;
ocmj_write(*hz_p-0xa0);
hz_p++;
if(x<0x09)
x++;
else
{
x=0x02;
y++;
}
}
}
/* 傳送ASCII字母到LCD */
/* x:0x00~0x0f y:0~64 */
void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)
{
x+=4;
while((*asc_p)!=0)
{
ocmj_write(0xf1);
ocmj_write(x);
ocmj_write(y);
ocmj_write(*asc_p);
asc_p++;
if (x<0x13)
x++;
else
{
x=0x04;
y+=8;
}
}
}
/* 畫點函數(shù) */
void pset(unsigned char x,unsigned char y)
{
ocmj_write(0xf2);
ocmj_write(x+32);
ocmj_write(y);
}
/* 畫線函數(shù) */
void line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
unsigned char t;
signed int xerr=0,yerr=0;
signed int delta_x,delta_y,distance;
signed char incx,incy;
/* 計算兩個方向的長度 */
delta_x=x2-x1;
delta_y=y2-y1;
/* 計算增量的方向,增量為"0"表示為垂直或水平線 */
if(delta_x>0)
incx=1;
else
{
if( delta_x==0 )
incx=0;
else
{
incx=-1;
delta_x =-delta_x;
}
}
if(delta_y>0)
incy=1;
else
{
if( delta_y==0 )
incy=0;
else
{
incy=-1;
delta_y =-delta_y;
}
}
/* 確定畫線的范圍 */
if( delta_x > delta_y ) distance=delta_x;
else distance=delta_y;
/* 畫線 */
for(t=0;t<= distance+1;t++)
{
ocmj_write(0xf2);
ocmj_write(x1+32);
ocmj_write(y1);
xerr += delta_x ;
yerr += delta_y ;
if( xerr > distance )
{
xerr-=distance;
x1+=incx;
}
if( yerr > distance )
{
yerr-=distance;
y1+=incy;
}
}
}
/* 畫圓函數(shù) */
void circle(unsigned char x0,unsigned char y0,unsigned char r)
{
unsigned char x,y;
unsigned int xx,rr,xt,yt,rs;
yt=r;
rr=r*r+1; //補償 1 修正方形
rs=yt*3/4; //畫8分之一圓弧
for (xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while ((yt*yt)>(rr-xx))
yt--;
x=x0+xt; //第一象限
y=y0-yt;
pset(x,y);
x=x0-xt; //第二象限
pset(x,y);
y=y0+yt; //第三象限
pset(x,y);
x=x0+xt; //第四象限
pset(x,y);
/******45度鏡象畫另外8分之一圓弧******/
x=x0+yt; //第一象限
y=y0-xt;
pset(x,y);
x=x0-yt; //第二象限
pset(x,y);
y=y0+xt; //第三象限
pset(x,y);
x=x0+yt; //第四象限
pset(x,y);
}
}
void putchar(unsigned char newx,unsigned char newy,unsigned char data)
{
static unsigned char x,y;
if(newx<16)
x=newx+4;
if(newy<64)
y=newy;
ocmj_write(0xf1);
ocmj_write(x);
ocmj_write(y);
ocmj_write(data);
if (x<0x13)
x++;
else
{
x=0x04;
if(y<56)
y+=8;
else
{
ocmj_write(0xf4);
y=0;
}
}
}
/* MAIN入口 */
void main(void)
{
unsigned char i;
CLI();
XDIV = 0x00;
MCUCR = 0x00;
EICRB = 0x00; //external interrupts sources
EIMSK = 0x00;
ocmj_init();//初始化
timer0_init();
timer2_init();
init_kb();
TIMSK = 0x01; //timer interrupt sources
EIMSK=0x10;
DDRF=0x00;
PORTF=0xfc;
adc1=0;
adc2=0;
ADMUX=0;
ADCSRA=0xdf;
timecal();
SEI();
DDRB=0x80;
while(1)
{
ocmj_write(0xf4);//清屏
/*debug
hz_tran(1,0,"測試掃描碼");
while(1)
{
cls(0,1,3,8);
asc_tran(0,16,kb_buffer);
delay_ms(100);
}
debug*/
ico_tran(0,0,sl_ico);//傳送圖標,也可用bmp_tran()傳送
hz_tran(3,0,"廣州大華");//傳送內(nèi)部漢字
hz_tran(2,1,"電子有限公司");
asc_tran(5,39,"HTTP://");//傳送ASCII字符
asc_tran(2,50,"WWW.SL.COM.CN");
delay_ms(2000);//延時
ocmj_write(0xf4);//清屏
bmp_tran(4,2,60,8,hz1);//傳送漢字"和"
delay_ms(3000);
ocmj_write(0xf4);
bmp_tran(1,3,49,13,atmel_bmp);//傳送ATMEL標志圖形
asc_tran(2,54,"WWW.ATMEL.COM");
delay_ms(3000);
ocmj_write(0xf4);
bmp_tran(2,15,33,4,hz2);//傳送漢字"歡"
bmp_tran(6,15,33,4,hz3);//傳送漢字"迎"
bmp_tran(10,15,33,4,hz4);//傳送漢字"您"
hz_tran(0,0,"恭");
hz_tran(0,1,"祝");
hz_tran(0,2,"各");
hz_tran(0,3,"位");
hz_tran(7,0,"萬");
hz_tran(7,1,"事");
hz_tran(7,2,"如");
hz_tran(7,3,"意");
delay_ms(3000);
for(i=0;i<32;i++)
{
ocmj_write(0xf4);
line(i*2,32,64,i);
line(64,i,(127-i*2),32);
line((127-i*2),32,64,(63-i));
line(64,(63-i),i*2,32);
delay_ms(100);
}
for(i=0;i<32;i++)
{
ocmj_write(0xf4);
circle(63,31,i);
delay_ms(100);
}
ocmj_write(0xf4);
hz_tran(2,0,"測量電壓");
hz_tran(1,1,"第一路");
hz_tran(1,2,"第二路");
for(i=0;i<100;i++)
{
cls(4,1,2,3);
asc_tran(8,22,adctoasc(adc1));
asc_tran(8,38,adctoasc(adc2));
timetoasc();
delay_ms(200);
}
ocmj_write(0xf4);
asc_tran(2,5,"PC");
hz_tran(2,0,"機鍵盤輸入");
hz_tran(0,1,"按");
asc_tran(2,21,"DEL");
hz_tran(3,1,"鍵重新啟動");
cls(0,2,2,8);
putchar(0,32,':');
putchar(99,99,'>');
keytime=0;
do{
i=getchar();
if(i!=0)
putchar(99,99,i);
}
while(keytime<20);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -