⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abc.c

📁 单片机89s52与12864a液晶驱动及动画演示
💻 C
📖 第 1 页 / 共 2 页
字号:
//程序名称: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 + -