#include "config.h"
/*------宏定义------*/
#define uchar uint8
#define uint uint32
void delay(uint n)
{
while(n--);
}
void delay_nus(uint n)
{
uchar i=0;
while(n--)
for(i=0;i<8;i++);
}
void delay_nms(uint n)
{
uint16 i;
while(n--)
for(i=0;i<7990;i++);
}
#define CS 0x00000002
#define SID 0x00000008
#define CLK 0x00000020
#define RET 21
#define set_CS() IO0SET=CS
#define clr_CS() IO0CLR=CS //串行的片选端
#define set_SID() IO0SET=SID
#define clr_SID() IO0CLR=SID //串行数据口
#define set_CLK() IO0SET=CLK
#define clr_CLK() IO0CLR=CLK //串行同步时钟
//#define set_RET() IO0SET=1<<RET
//#define clr_RET() IO0CLR=1<<RET //复位引脚,低电平有效P0.0
uint8 const ASCII[19][5]={
{0x3E,0x41,0x41,0x41,0x3E},//0
{0x00,0x42,0x7F,0x40,0x00},//1
{0x72,0x49,0x49,0x49,0x46},//2
{0x21,0x41,0x49,0x4D,0x32},//3
{0x18,0x14,0x12,0x7F,0x10},//4
{0x27,0x45,0x45,0x45,0x38},//5
{0x3C,0x4A,0x49,0x49,0x30},//6
{0x01,0x01,0x7D,0x03,0x00},//7
{0x36,0x49,0x49,0x49,0x36},//8
{0x06,0x49,0x49,0x29,0x16},//9
{0x7C,0x12,0x11,0x12,0x7C},//A 10
{0x00,0x41,0x7F,0x41,0x00},//I 11
{0x3F,0x40,0x40,0x40,0x3F},//U 12
{0x1C,0x20,0x40,0x20,0x1C},//v 13
{0x00,0x00,0x60,0x60,0x00},//. 14
{0x38,0x44,0x44,0x44,0x28},//c 15
{0x38,0x54,0x54,0x54,0x18},//e 16
{0x7C,0x04,0x78,0x04,0x78},//m 17
{0x3C,0x40,0x40,0x20,0x7C} //u 18
};
uint8 dis_data[1024]={//16*64=1024(128*64=(16*8)*64)
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X01,0XFF,0XC0,0X63,0X80,0X71,0XC0,0X06,0XC0,0X00,0XE0,0X0E,0X38,0X0E,0X0E,0X00,
0X01,0XFF,0XC0,0XE3,0X80,0X7F,0XF8,0X06,0XC0,0X38,0XF8,0X0E,0X38,0X0E,0X6E,0X00,
0X01,0XC1,0XC0,0XC3,0X80,0XF1,0XCC,0X06,0XC0,0X38,0XEC,0X3E,0XFF,0X0E,0X7E,0X00,
0X01,0XFF,0XC1,0XFF,0XF9,0XFB,0XE0,0X7F,0XFC,0X70,0XE6,0X3E,0XFF,0X0E,0X7F,0XC0,
0X01,0XC1,0XC3,0XFF,0XF9,0X86,0X00,0X7F,0XFC,0X6F,0XFE,0X2F,0X38,0X3F,0XFF,0XC0,
0X01,0XFF,0XC3,0XC7,0X83,0XFF,0XFC,0X76,0XDC,0XFF,0XE0,0X7F,0XFF,0XBF,0XEE,0X00,
0X00,0X00,0X07,0XCF,0XC3,0X80,0X1C,0X76,0XDC,0XF8,0XFE,0X7F,0XFF,0XBE,0XCE,0X00,
0X07,0XF7,0XED,0XCF,0XE3,0XFF,0XFC,0X7F,0XFC,0X33,0XFE,0X0E,0X0E,0X3E,0X0E,0X00,
0X07,0XF7,0XE1,0XDF,0XF0,0X70,0XE0,0X7F,0XFC,0X73,0XE0,0X1F,0XFF,0X8E,0X7F,0X80,
0X07,0X76,0XE1,0XDB,0XB8,0X7F,0XE0,0X76,0XDC,0XFC,0XFC,0X7E,0XFF,0X8E,0X7F,0X80,
0X07,0XF7,0XE1,0XFF,0XFC,0X70,0X00,0X76,0XDC,0XFC,0XFC,0X7E,0X0E,0X0E,0X0E,0X00,
0X07,0X76,0XE1,0XFF,0XFC,0X7F,0XF0,0X76,0XDC,0X00,0X70,0X0E,0XEE,0X0E,0X0E,0X00,
0X07,0XF7,0XE1,0XC3,0X80,0X70,0X70,0X7F,0XFC,0XFE,0XF9,0X0E,0X7E,0X0E,0X0E,0X00,
0X07,0XF7,0XE1,0XC3,0X80,0X7F,0XF0,0X7F,0XFC,0XF3,0XDF,0X0E,0X1E,0X0E,0XFF,0XC0,
0X07,0X76,0XE1,0XC3,0X80,0X70,0X70,0X70,0X1C,0X03,0X8E,0X0E,0X1C,0X0E,0XFF,0XC0,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X00,0X32,0X07,0X30,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X6F,0XC6,0X38,0X33,0X07,0X38,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X7F,0XD6,0X1C,0X3B,0X0E,0X1B,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3C,0XD6,0X1F,0XFF,0X8F,0XDB,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X0D,0XD6,0X03,0XFF,0X9F,0XC7,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X6D,0XD6,0X78,0X38,0X3E,0XE7,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X7D,0XD6,0X7B,0XF8,0X3E,0XEE,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3D,0XD6,0X1B,0XF8,0X0E,0X7E,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X0D,0XD6,0X19,0XDC,0X0E,0X7C,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3D,0XD6,0X19,0XDC,0X0E,0X3C,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X33,0X16,0X19,0XDC,0X0E,0X3C,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X37,0XC6,0X1D,0XFF,0X8E,0X7E,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X76,0XEE,0X1F,0XFF,0X0E,0XE7,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X6E,0X7E,0X1B,0X87,0X0F,0XC3,0X80,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X6C,0X1C,0X00,0X03,0X0F,0X81,0XC0,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,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,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X01,0X80,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X03,0X00,0X00,0X01,0X0C,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X86,0X00,0X00,0X01,0X18,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X8C,0X00,0X00,0X01,0XB0,0X00,0X00,0X00,0XBF,0X00,0X00,0X02,0XFC,0X00,
0X00,0X00,0X98,0X00,0X00,0X01,0XE0,0X00,0X00,0X00,0XA0,0X00,0X00,0X02,0X80,0X00,
0X00,0X00,0XB0,0X00,0X00,0X01,0XE0,0X00,0X00,0X00,0XA4,0X00,0X00,0X02,0X90,0X00,
0X00,0X00,0XE0,0X00,0X00,0X01,0XF0,0X00,0X00,0X00,0XA6,0X00,0X00,0X02,0XB0,0X00,
0X00,0X00,0XC0,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0XBF,0X00,0X00,0X02,0XFC,0X00,
0X00,0X00,0X80,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0XA7,0X00,0X00,0X02,0XB4,0X00,
0X01,0XFF,0X80,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0XA5,0X00,0X00,0X02,0X94,0X00,
0X00,0X00,0X80,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0XA1,0X00,0X00,0X02,0X84,0X00,
0X00,0X00,0XC0,0X00,0X00,0X01,0XC0,0X00,0X00,0X3F,0XBF,0X00,0X00,0XFE,0XFC,0X00,
0X00,0X00,0XE0,0X00,0X00,0X01,0X60,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0XB0,0X00,0X00,0X01,0X30,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X99,0X00,0X00,0X01,0X18,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X8F,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X07,0X00,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,0X00,
0X00,0X00,0X0F,0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X04,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
};
//写数据到12864
void WriteData(uint8 ch,uint8 d_c)//d_c=1是命令,0为数据
{//RE=0
uint8 i;
int32 dc;
//long dc;
dc=(d_c?0xf80000:0xfa0000);
set_CS();
dc|=(((ch&0xf0)<<8)|((ch&0x0f)<<4));
for(i=0;i<24;i++)
{
clr_CLK();
delay(2); //将PB^5位置1
if((dc<<i)&0x800000)
set_SID();
else
clr_SID();
delay(2);
set_CLK();
delay(2);
}
clr_CS();
}
void LCD_CLEAR(void)//写命令到12864清屏
{
WriteData(0x01,1); // 清屏
delay_nms(15);
}
//全屏显示图片,把一维的数组写进去
//clr为1时,清屏,为0时直接加到原图上
void LCD_Picture_Display(uint8 *tab,uint8 clr)
{
unsigned i, j, k, lcd_x, lcd_y,jj=0;
if(clr) LCD_CLEAR();//清屏
lcd_x = 0x80;//第一页页地址
for(i=0 ; i<2; i++)//分两页来写
{
for(j=0, lcd_y=0x80; j<32; j++, lcd_y++)
{
WriteData(0x36,1); //8位扩充指令集,绘图开
WriteData(lcd_y,1); //地址设置
WriteData(lcd_x,1);
WriteData(0x30,1);
for(k=16; k>0; k--)
{
WriteData(tab[jj++],0);
}
}
lcd_x = 0x88;//第二页页地址
}
}
//设置数组中的一个点,f为0则清点,为1则描点,
void set_pic_point(uint8 y,uint8 x,uint8 f)
{
uint16 p;
p=16*y+(x>>3);
x&=0x07;//x%=8;
x=1<<(7-x);
if(f)dis_data[p]|=x;
else dis_data[p]&=(~x);
}
//画一条水平或垂直直线
void dis_line(uint8 ystar,uint8 yend,uint8 xstar,uint8 xend)
{
uint8 Xle=xend-xstar,Yle=yend-ystar,i;
if(Xle)//画X轴平行直线
{
for(i=0;i<Xle;i++)
set_pic_point(ystar,xstar+i,1);
}
else
{
for(i=0;i<Yle;i++)
set_pic_point(ystar+i,xstar,1);
}
}
//显示一个字符
void dis_char(uint8 y,uint8 x,uint8 ch)
{
uint i,j;
for(i=0;i<5;i++)
for(j=0;j<7;j++)
set_pic_point(y+j,x+i,(ASCII[ch]>>j)&1);
}
//显示数字两位
void dis_NUM(uint8 y,uint8 x,uint8 ch)
{ uint8 i,j,tm;
if(ch>9)
{
ch%=100;
tm=ch/10;
ch%=10;
x-=5;
for(i=0;i<5;i++)
for(j=0;j<7;j++)
set_pic_point(y+j,x+i,(ASCII[tm]>>j)&1);
x+=5;
}
for(i=0;i<5;i++)
for(j=0;j<7;j++)
set_pic_point(y+j,x+i,(ASCII[ch]>>j)&1);
}
void set_lxy(uint8 nx,uint8 ny)//画X和Y轴
{
uint8 y=12,x=62;
uint8 i;
// ny/=5;
dis_char(52,123,13);//V
dis_char(0,16,17);//m
dis_char(0,22,10);//A
dis_line(0,62,y,y);
dis_line(x,x,y,128);
dis_NUM(57,4,0);
set_pic_point(1,y-1,1);
set_pic_point(1,y+1,1);
set_pic_point(2,y-2,1);
set_pic_point(2,y+2,1);
set_pic_point(x-2,125,1);
set_pic_point(x-1,126,1);
set_pic_point(x+1,126,1);
set_pic_point(x+2,125,1);
i=1;
while(x>20)
{
x-=10;
set_pic_point(x,y-1,1);
set_pic_point(x,y-2,1);
i++;
}
dis_NUM(x-3,y-7,nx);
i=1;x=61;
while(y<102)
{
y+=20;
set_pic_point(x,y,1);
i++;
set_pic_point(x-1,y,1);
}
i--;
dis_NUM(x-8,y-2,i*ny/5);
}
//写0到图片数组,清屏
void clear_pic(void)
{
uint i=1023;
while(i)dis_data[i--]=0;
}
/*****************************************
液晶初始化程序
输入数据:无
*****************************************/
void lcd12864_init(void)
{
//PINSEL0&=~((0x03<<CS)|(0x03<<SID)|(0x03<<CLK)|(0x03<<RET));
IO0DIR=IO0DIR|(CS)|(SID)|(CLK);
clr_CS() ;
clr_SID();
clr_CLK();
//clr_RET();
delay_nms(10);
//set_RET();
delay_nms(5);
WriteData(0x32,1);
delay_nus(150);
WriteData(0x32,1);
delay_nus(150);
WriteData(0x0c,1);
delay_nus(150);
WriteData(0x60,1);
delay_nus(150);
WriteData(0x04,1);
LCD_CLEAR();//清屏
}
int main (void)
{// add user source code
lcd12864_init();
while(1)
{
set_pic_point(1,2,0);
dis_line(1,1,2,2);
set_pic_point(1,3,1);
dis_NUM(3,1,88);
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/ |