?? abc.c
字號:
//程序名稱:128x64 windows啟動模擬 //
//作者:潘策榮 2006.11.
//主要寫了用12864液晶屏模擬windows啟動畫面的程序
//拿來玩的,不要當真
//不過寫了蠻久//寫寫停停,主要是因為在上課,具體的演示效果參看視頻,沒錄好,呵呵。
//寫了一些函數,可以用作其它用處。
#include <reg51.h>
#include <stdio.h>//在調試的時候使用
#define uchar unsigned char
#define uint unsigned int
sbit cs2=P0^0;
sbit cs1=P0^1;
sbit rw=P0^3;
sbit e=P0^4;
sbit di=P0^2;
sbit rest=P0^7;
uint i;
uchar code b[]={"START YFKJ WINDOWS./0WAITING.../0FOUND ATMEL 89S52.../0256 RAM /0NO USB.../0NO KEYBOARD.../0128X64 DISPLAY.../0LOADING.../0DESIGN BY PCR /0 /0 /0LOADING PLEASE WAITING.../0"};
//設定一個長字符串,遇到/0的時候就換行,并進行動畫演示,同時延時
/*-- 調入了一幅圖像:C:\Documents and Settings\Administrator\桌面.bmp --*/
/*-- 寬度x高度=89x36 --*/
/*-- 寬度不是8的倍數,現調整為:寬度x高度=89x40 --*/
uchar code a[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,
0xFC,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x7C,0xFC,
0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xE0,0x80,0x1F,0x3F,0x7F,0x7F,0x7F,0x7F,0x3F,
0x1F,0xC0,0xE0,0xF0,0xF0,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xC3,0xE7,0xE7,
0xEF,0xEF,0xEF,0xC7,0x83,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x63,0x67,0x67,0xEF,
0xEF,0xEF,0x67,0x67,0x63,0x01,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x21,0x30,0x28,0x24,0x23,0x00,0x1F,0x20,0x20,0x20,0x1F,0x00,
0x1F,0x20,0x20,0x20,0x1F,0x00,0x1F,0x22,0x22,0x22,0x1C,0x00,0x30,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x07,
0x03,0xF8,0xFC,0xFE,0xFE,0xFE,0xFE,0xFC,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x02,0x03,0x03,0xFF,0xFE,
0x00,0x00,0x03,0x1F,0x7C,0xF0,0xC0,0xF8,0x3F,0x07,0x81,0x80,0x80,0x80,0x8C,0x92,
0x92,0x92,0x62,0x00,0x10,0xF0,0x80,0x60,0x10,0x90,0xA8,0xA8,0xC8,0x08,0x08,0xFC,
0x88,0x08,0x70,0xA8,0xA8,0xB0,0x00,0x00,0xF8,0x08,0x08,0xF0,0x08,0xF8,0xF8,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,
0x3F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,
0x06,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char code asc[]=
{ //非常好,這里是一部分的ascii碼相對應的字庫。參照標準的字庫進行為8x5大小//
0x00,0x00,0x00,0x00,0x00, //空白 5
0x00,0x00,0x5F,0x00,0x00, // ! 10
0x04,0x03,0x04,0x03,0x00, // " 15
0x14,0x7F,0x14,0x7F,0x14, // # 20
0x24,0x2A,0x7F,0x2A,0x12, // $ 25
0x23,0x13,0x08,0x64,0x62, // %
0x36,0x49,0x55,0x22,0x50, // &
0x00,0x05,0x03,0x00,0x00, // '
0x00,0x1C,0x22,0x41,0x00, // (
0x00,0x41,0x22,0x1C,0x00, // )
0x14,0x08,0x3E,0x08,0x14, // *
0x08,0x08,0x3E,0x08,0x08, // +
0x00,0x50,0x30,0x00,0x00, // ,
0x08,0x08,0x08,0x08,0x08, // -
0x00,0x60,0x60,0x00,0x00, // .
0x20,0x10,0x08,0x04,0x02, // /
0x3E,0x51,0x49,0x45,0x3E, // 0
0x00,0x42,0x7F,0x40,0x00, // 1
0x42,0x61,0x51,0x49,0x46, // 2
0x21,0x41,0x45,0x4B,0x31, // 3
0x18,0x14,0x12,0x7F,0x10, // 4
0x27,0x45,0x45,0x45,0x39, // 5
0x3C,0x4A,0x49,0x49,0x30, // 6
0x03,0x01,0x71,0x09,0x07, // 7
0x36,0x49,0x49,0x49,0x36, // 8
0x06,0x49,0x49,0x29,0x1E, // 9
0x00,0x6C,0x6C,0x00,0x00, // :
0x00,0x56,0x36,0x00,0x00, // ;
0x08,0x14,0x22,0x41,0x00, // <
0x14,0x14,0x14,0x14,0x14, // =
0x00,0x41,0x22,0x14,0x08, // >
0x02,0x01,0x51,0x09,0x06, // ?
0x32,0x49,0x79,0x41,0x3E, // @
0x7E,0x11,0x11,0x11,0x7E, //A
0x7F,0x49,0x49,0x49,0x36, //B
0x3E,0x41,0x41,0x41,0x22, //C
0x7F,0x41,0x41,0x22,0x1C, //D
0x7F,0x49,0x49,0x49,0x41, //E
0x7F,0x09,0x09,0x09,0x01, //F
0x3E,0x41,0x49,0x49,0x7A, //G
0x7F,0x08,0x08,0x08,0x7F, //H
0x00,0x41,0x7F,0x41,0x00, //I
0x20,0x40,0x41,0x3F,0x01, //J
0x7F,0x08,0x14,0x22,0x41, //K
0x7F,0x40,0x40,0x40,0x40, //L
0x7F,0x02,0x0C,0x02,0x7F, //M
0x7F,0x04,0x08,0x10,0x7F, //N
0x3E,0x41,0x41,0x41,0x3E, //O
0x7F,0x09,0x09,0x09,0x06, //P
0x3E,0x41,0x51,0x21,0x5E, //Q
0x7F,0x09,0x19,0x29,0x46, //R
0x46,0x49,0x49,0x49,0x31, //S
0x01,0x01,0x7F,0x01,0x01, //T
0x3F,0x40,0x40,0x40,0x3F, //U
0x1F,0x20,0x40,0x20,0x1F, //V
0x3F,0x40,0x38,0x40,0x3F, //W
0x63,0x14,0x08,0x14,0x63, //X
0x07,0x08,0x70,0x08,0x07, //Y
0x61,0x51,0x49,0x45,0x43, //Z
0x00,0x7F,0x41,0x41,0x00, //[
0x02,0x04,0x08,0x10,0x20, /* \ */ //一個大bug,不得不這樣搞
0x00,0x42,0x42,0x7E,0x00, //]
0x04,0x02,0x01,0x02,0x04, //^
0x40,0x40,0x40,0x40,0x40, //_
0x00,0x03,0x04,0x00,0x00, //`
0x20,0x54,0x54,0x54,0x78, //a
0x7F,0x48,0x44,0x44,0x38, //b
0x38,0x44,0x44,0x44,0x20, //c
0x38,0x44,0x44,0x48,0x7F, //d
0x38,0x54,0x54,0x54,0x18, //e
0x08,0x7E,0x09,0x0A,0x00, //f
0x0C,0x52,0x52,0x52,0x3E, //g
0x7F,0x08,0x04,0x04,0x78, //h
0x00,0x44,0x7D,0x40,0x00, //i
0x20,0x40,0x44,0x3D,0x00, //j
0x7F,0x10,0x28,0x44,0x00, //k
0x00,0x41,0x7F,0x40,0x00, //l
0x7C,0x04,0x18,0x04,0x78, //m
0x7C,0x08,0x04,0x04,0x78, //n
0x38,0x44,0x44,0x44,0x38, //o
0x7E,0x0A,0x0A,0x0A,0x04, //p
0x04,0x0A,0x0A,0x0C,0x7E, //q
0x7C,0x08,0x04,0x04,0x08, //r
0x48,0x54,0x54,0x54,0x20, //s
0x04,0x3F,0x44,0x44,0x20, //t
0x3C,0x40,0x40,0x20,0x7C, //u
0x1C,0x20,0x40,0x20,0x1C, //v
0x3C,0x40,0x30,0x40,0x3C, //w
0x44,0x28,0x10,0x28,0x44, //x
0x0C,0x50,0x50,0x50,0x3C, //y
0x44,0x64,0x54,0x4C,0x44, //z
};
void delay(uint i)//短延時
{
while(i--);
}
void delay2(uchar i)//長延時
{
while (i--)
{
delay(2000);
}
}
void reset()//重啟
{
rest=0;
delay(20);
rest=1;
delay(20);
}
void wcode(uchar c,uchar c1,uchar c2)//寫指令
{
cs1=c1;
cs2=c2;
di=0;
rw=0;
P2=c;
e=0;
delay(5);
e=1;
delay(5);
e=0;
}
void wdata(uchar c,uchar c1,uchar c2)//寫數據
{
cs1=c1;
cs2=c2;
di=1;
rw=0;
P2=c;
e=0;
delay(5);
e=1;
//delay(5);//好像沒有必要做這個延遲
e=0;
}
uchar rdata(uchar c1,uchar c2)//讀指令 經典部分,為了這個搞了一天
{
uchar c;
cs1=c1;
cs2=c2;
di=1;
rw=1;
e=1;
delay(5);
e=0;
delay(5);
e=1;
c=P2;
e=0;
return (c);
}
void set_startline(uchar i)//設置起始行,很少用到,在做滾動時可能很有用。
{
i+=0xc0;
wcode(i,1,1);
}
void set_adr(uchar x,uchar y)//設置開始x,y,地址
{
x+=0xb8;
y+=0x40;
wcode(x,1,1);
wcode(y,1,1);
}
void dison_off(uchar m)//屏幕關
{
m+=0x3e;
wcode(m,1,1);
}
void point (uchar x1,uchar y1)//寫一個點,讀到后與現在的數合并,重新寫回去//
{
uchar m=0x01;
uchar x2;
uchar s1=1;
uchar s2=0;
uchar x3;
if (y1>63){s1=0;s2=1;y1-=64;};
x2=x1/8;
x1=x1%8;
x1=m<<x1;
x1=~x1;
set_adr(x2,y1);//設置地址
x3=rdata(s1,s2);//讀出數
set_adr(x2,y1);//重新設地址
x3&=x1;//與現在的數相與傳給x3
wdata(x3,s1,s2);//把數寫回去
}
void line(uchar x,uchar y,uchar x1,uchar y1)//畫一條任意兩點間的直線 ,用了我幾天阿
{
uchar i;
uchar a;
uchar b;/////////////////把此函數中的所有數字用char可能會提高一些速度。///////////
uchar c;//中間值
uint a1;
uint b1;
char d=1;//標志位,1表示x大,-1表示x1大
char e=1;//標志位,1表示y大,-1表示y1大?
bit f=0;//標志位,0表示a大,1表示b大
if (x1>x){a=(x1-x);d=-1;}
else a=(x-x1); ///
if (y1>y){b=(y1-y);e=-1;}
else b=(y-y1); ///
a1=a;
b1=b;
if (b>a) {c=b;b=a;b=c;f=1;} //保證a>b容易對數進行操作
if(f==0){ //分為兩種情況 a>b的時候
for (i=0;i<=a;i++)
{
x1=x;
y1=y;
x=x-d*i;
y=y-(b1*i/a1)*e;
point(x,y);
x=x1;
y=y1;
}
};
if(f==1){ //a<b的時候;以空間換時間算法//
for (i=0;i<=b;i++)
{
x1=x;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -