做一回伸手党,求一个51驱动12864画点画线建立坐标系的程序
这两天正想用12864画点画线建立直角坐标系,为竞赛做一些准备,但是自己不懂写,好伤脑筋!请各位大牛提供一些例程代码参考,谢谢!另外我的硬件用的是1T单片机,画图速度应该够快了吧? 给你一个链接吧http://download.csdn.net/detail/fingi/2348512 这个是代码 fbestwish 发表于 2014-8-6 15:22
这个是代码
谢谢,先下来看看!
很奇怪,打点函数要好久才出得来! ruan18278816371 发表于 2014-8-6 21:38
很奇怪,打点函数要好久才出得来!
你自己优化一下吧,我这没有硬件环境,还是4年前弄的 看下这个,我以前参照着写过 en ,这个可以用来借鉴一下{:smile:} 太懒了吧,st7920 的划线c代码度娘一下怕是上万。 stc89c52 11.0592MHz 这个程序看懂了 画饼都可以充饥了
#include <reg52.h>
#include <intrins.h>
#define LCD_DATA P0
sbit LCD_RS=P3^5;
sbit LCD_RW=P3^6;
sbit LCD_EN=P3^4;
sbit LCD_PSB=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
sfr T2MOD=0XC9;
unsigned char code dis[]=
{0xC0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,
0xE0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,
0x60,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,
0x60,0x07,0x00,0x00,0x00,0x00,0x06,0x03,0x00,0x04,0x00,0x03,0x00,0x00,0x3D,0xE0,
0x60,0x0E,0x00,0x0C,0x20,0x00,0x1C,0x03,0x00,0x0C,0x00,0x03,0x00,0x01,0xF9,0xC0,
0x60,0x1C,0x00,0x0C,0x30,0x00,0x38,0x02,0x00,0x08,0x00,0x01,0x80,0x00,0xF3,0x80,
0xE0,0x38,0x00,0x0C,0x70,0x01,0xFC,0x06,0x00,0x18,0xF0,0x01,0x00,0x00,0x77,0x00,
0xE3,0x78,0x00,0x0C,0x70,0x01,0xBC,0xCC,0x00,0x13,0xF0,0x01,0x00,0x02,0x2C,0x00,
0xE3,0xF0,0x00,0x1C,0x60,0x00,0x7C,0xC8,0x00,0x30,0x30,0x01,0x00,0x0C,0x18,0x00,
0xE3,0xE0,0x00,0x1C,0x60,0x00,0x7C,0xD8,0x00,0x60,0x00,0x01,0xF0,0x7C,0x30,0x00,
0xE3,0xC0,0x00,0x1C,0x66,0x00,0x7C,0x38,0x00,0x42,0x00,0x03,0xE0,0x38,0x60,0x00,
0xE3,0x1C,0x00,0x1C,0x6E,0x00,0x7E,0x78,0x00,0xC7,0x00,0x0F,0x80,0x00,0xC0,0x00,
0xC0,0x1C,0x00,0x6C,0xFC,0x00,0x7E,0x3C,0x00,0x8F,0x00,0x3F,0x00,0x01,0xF0,0x00,
0xC0,0x1F,0x00,0x7C,0xF8,0x00,0x7C,0x7C,0x01,0x80,0x00,0x03,0x00,0x01,0xF0,0x00,
0xC0,0x1F,0x80,0x7C,0xE0,0x00,0x7C,0xF0,0x01,0x00,0x00,0x06,0x00,0x00,0x70,0x00,
0xC0,0x79,0x80,0x7C,0xC0,0x00,0xEC,0xF0,0x03,0x1B,0xC0,0x06,0xE0,0x00,0x77,0x80,
0xC0,0xF9,0xC0,0x5C,0xC1,0x01,0xCC,0x2C,0x02,0x1F,0xC0,0x0E,0x70,0x00,0x7F,0x00,
0xC1,0xF9,0xC0,0xDC,0xC3,0x03,0x8C,0x66,0x06,0x1F,0xC0,0x0C,0x70,0x00,0x7C,0x00,
0xC3,0xB1,0xC0,0x5C,0xC6,0x03,0x0C,0xC6,0x0C,0x1D,0xC0,0x1C,0x78,0x00,0xCC,0x00,
0xC7,0x33,0x80,0x7C,0xFC,0x00,0x0D,0x86,0x0C,0x1F,0x80,0x38,0x30,0x00,0xEE,0x00,
0xE6,0x73,0x80,0x7C,0xF8,0x00,0x0D,0x00,0x00,0x0F,0x80,0x70,0x00,0x00,0x7C,0x00,
0xE6,0x63,0x80,0x7C,0x60,0x00,0x1C,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x38,0x00,
0xE7,0xC3,0x00,0x6C,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xE7,0x87,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x67,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x0C,0x00,0x01,0x83,0xFE,0x1E,0x63,0xE6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x33,0x0F,0xF8,0xFF,0xCF,0x66,0x0F,0x63,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0x98,0x00,0x0C,0x03,0x66,0x7F,0xFB,0xF0,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x33,0x3F,0xF0,0x0C,0x0F,0xFE,0x60,0x1B,0xDF,0x80,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0x00,0x00,0x0C,0x03,0x00,0x7F,0xF3,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0x33,0x1F,0xF0,0x0C,0x07,0xFF,0x01,0x83,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x33,0x00,0x30,0x0C,0x07,0x98,0x03,0x03,0x6F,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0x00,0x30,0x0C,0x0F,0x7E,0x7F,0xFB,0xEF,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0x30,0x00,0x30,0x0C,0x0F,0x18,0x03,0x03,0x0F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x31,0x80,0x3C,0x0C,0x03,0x18,0x03,0x03,0x1B,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x80,0x1D,0xFF,0xE3,0xFF,0x0F,0x03,0x73,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,0x02,0x3C,0x38,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0xA5,0xE2,0x40,0x88,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x24,0x22,0x5F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x25,0xFE,0x41,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1F,0xE8,0x22,0x42,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x05,0x28,0x72,0x44,0x90,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0D,0xA4,0x6A,0x58,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x15,0x64,0xA2,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x05,0x3D,0x22,0x4A,0x48,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x09,0x20,0x20,0x49,0x24,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x13,0x20,0x21,0xD1,0x24,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 dis1[]="初始化中";
unsigned char code dis2[]="请稍后。。。";
unsigned char code horn[]= //喇叭
{0x00,0x00,0x00,0x00,0x01,0x88,0x03,0x98,0x07,0x90,0x0F,0x80,0x3F,0xC0,0x3F,0xCC,
0x3F,0xCC,0x3F,0xC0,0x0F,0x80,0x07,0x90,0x03,0x98,0x01,0x88,0x00,0x00,0x00,0x00};
unsigned char code test[]="测试";
unsigned char temph,templ;
unsigned char T2FLAG,T2NUM;
unsigned int sum;
void delay(unsigned int x) //毫秒级延时
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=110;j>0;j--);
}
/*****************************************
void delay20us(unsigned int x) //微秒级延时首次大约36us--11.0592MHz
{
while(x--)
{
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
}
}
******************************************/
/*****************************************
函数名称:LcdBusyChk
功 能:忙检测
参 数:无
返 回 值:无
******************************************/
void LcdBusyChk()
{
unsigned char flag=100;
LCD_DATA=0xff;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
while(LCD_DATA & 0x80 && flag)
{
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
flag--;
}
LCD_EN=0;
}
/*****************************************
函数名称:LcdLcdWriteCmd
功 能:Write Command to LCD
参 数:cmd--The Command
返 回 值:无
******************************************/
void LcdWriteCmd(unsigned char cmd)
{
// delay20us(21);
LcdBusyChk();
LCD_RW=0;
LCD_RS=0;
LCD_DATA=cmd;
LCD_EN=1;
LCD_EN=0;
}
/*****************************************
函数名称:LcdLcdWriteData
功 能:Write Data to LCD
参 数:byte--the content of data
返 回 值:无
******************************************/
void LcdWriteData(unsigned char byte)
{
// delay20us(1); //延时36us或延时15us
LcdBusyChk();
LCD_RS=1;
LCD_RW=0;
LCD_DATA=byte;
LCD_EN=1;
LCD_EN=0;
}
/*****************************************
函数名称:LcdReadData
功 能:读数据
参 数:void
返 回 值:byte--所读数据
******************************************/
unsigned char LcdReadData()
{
unsigned char byte;
LcdBusyChk();
LCD_DATA=0xff;
LCD_RS=1;
LCD_RW=1;
LCD_EN=1;
// delay20us(1);
byte=LCD_DATA;
LCD_EN=0;
return byte;
}
/*****************************************
函数名称:ClrGDRAM
功 能:Clear GDRAM
参 数:void
返 回 值:无
******************************************/
void ClrGDRAM()
{
unsigned char i,j;
for(i=0;i<32;i++) //Clear GDRAN
{
LcdWriteCmd(0x80+i);
LcdWriteCmd(0x80);
for(j=0;j<32;j++)
LcdWriteData(0);
}
}
/*****************************************
函数名称:InitLcd
功 能:Initialize LCD
参 数:无
返 回 值:无
******************************************/
void InitLcd()
{
LCD_PSB=1; //并行
LCD_EN=0;
LcdWriteCmd(0x30); //8位,基本指令集
// delay20us(5);
LcdWriteCmd(0x30);
// delay20us(2);
LcdWriteCmd(0x0c); //Display--No,Cursor--Off,Blink--Off
// delay20us(5);
LcdWriteCmd(0x01); //Display Clear
// delay(10);
LcdWriteCmd(0x06); //Entry Mode Set,Cursor Move Right
}
main()
{
unsigned char i,j;
unsigned int num=0;
T2FLAG=0;
T2NUM=0;
dula=0;
wela=0;
delay(1);
InitLcd(); //LCD初始化
TH2=7936/256;
TL2=7936%256;
RCAP2H=7936/256;
RCAP2L=7936%256;
T2CON=0;
T2MOD=0;
TH1=0;
TL1=0;
TMOD=0X50;
TR1=1;
ET2=1;
EA=1;
LcdWriteCmd(0x80); //开机提示界面
for(i=0;dis1;i++)
LcdWriteData(dis1);
LcdWriteCmd(0x92);
for(i=0;dis2;i++)
LcdWriteData(dis2);
delay(1000);
LcdWriteCmd(0x34); //扩充指令集
LcdWriteCmd(0x02); //SR=0,允许设置CGRAM地址
for(i=0;i<32;i++) //画上半屏幕
{
LcdWriteCmd(0x80+i);
LcdWriteCmd(0x80);
for(j=0;j<16;j++)
LcdWriteData(dis);
}
for(i=0;i<32;i++) //画下半屏幕
{
LcdWriteCmd(0x80+i);
LcdWriteCmd(0x88);
for(j=0;j<16;j++)
LcdWriteData(dis);
}
LcdWriteCmd(0x30); //Basic Instruction
LcdWriteCmd(0x01); //Clear Screen
LcdWriteCmd(0x32); //Open GDRAM
LcdWriteCmd(0x36); //Extended Instruction
delay(2000);
LcdWriteCmd(0x34);
ClrGDRAM(); //Clear GDRAM
LcdWriteCmd(0x30); //Basic Instruction
LcdWriteCmd(0x40+0x20); //将小喇叭图标写到CGRAM中
for(i=0;i<32;i++)
LcdWriteData(horn);
LcdWriteCmd(0x80); //测试LCD读命令
for(i=0;i<4;i++)
LcdWriteData(test);
delay(2000);
LcdWriteCmd(0x81);
i=LcdReadData(); //dump read
temph=LcdReadData();
templ=LcdReadData();
LcdWriteCmd(0x90);
LcdWriteData(temph);
LcdWriteData(templ);
delay(3000);
/* while(1)
{
LcdWriteCmd(0x98);
LcdWriteData(0x00);
LcdWriteData(0x04); //自造字RAM中第三个汉子的编码
delay(500);
LcdWriteCmd(0x98);
LcdWriteData(' ');
LcdWriteData(' ');
delay(500); //1s闪烁
}*/
while(1)
{
LcdWriteCmd(0x87);
LcdWriteData(sum/10%10+'0');
LcdWriteData(sum%10+'0');
LcdWriteCmd(0x86);
LcdWriteData(sum/1000%10+'0');
LcdWriteData(sum/100%10+'0');
LcdWriteCmd(0x85);
LcdWriteData(sum/100000%10+'0');
LcdWriteData(sum/10000%10+'0');
}
}
void t2() interrupt 5
{
T2NUM++;
if(T2NUM>=16)
{
T2NUM=0;
T2FLAG=1;
sum=TH1*256+TL1;
}
}
{:funk:} 这个资料多的
页:
[1]