ruan18278816371 发表于 2014-8-6 15:03:29

做一回伸手党,求一个51驱动12864画点画线建立坐标系的程序

这两天正想用12864画点画线建立直角坐标系,为竞赛做一些准备,但是自己不懂写,好伤脑筋!请各位大牛提供一些例程代码参考,谢谢!另外我的硬件用的是1T单片机,画图速度应该够快了吧?

fbestwish 发表于 2014-8-6 15:21:34

给你一个链接吧
http://download.csdn.net/detail/fingi/2348512

fbestwish 发表于 2014-8-6 15:22:56

这个是代码

ruan18278816371 发表于 2014-8-6 15:24:42

fbestwish 发表于 2014-8-6 15:22
这个是代码

谢谢,先下来看看!

ruan18278816371 发表于 2014-8-6 21:38:22

很奇怪,打点函数要好久才出得来!

fbestwish 发表于 2014-8-7 07:52:39

ruan18278816371 发表于 2014-8-6 21:38
很奇怪,打点函数要好久才出得来!

你自己优化一下吧,我这没有硬件环境,还是4年前弄的

L_Hongzhen 发表于 2014-8-7 17:49:52

看下这个,我以前参照着写过

mculjf 发表于 2014-8-11 10:25:51

en ,这个可以用来借鉴一下{:smile:}

bg8wj 发表于 2014-8-12 00:42:34

太懒了吧,st7920 的划线c代码度娘一下怕是上万。

wujin715 发表于 2014-8-13 01:04:55

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;
        }
}

wangkdd 发表于 2014-8-29 11:57:49

{:funk:} 这个资料多的
页: [1]
查看完整版本: 做一回伸手党,求一个51驱动12864画点画线建立坐标系的程序