微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 12684打点程序

12684打点程序

时间:10-02 整理:3721RD 点击:
打点的路径自己设定
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^1; //寄存器选择输入
sbit rw=P1^5;   //液晶读/写控制
sbit en=P1^6;  //液晶使能端控制
sbit psb=P2^0;  //串/并方式控制
sbit rst=P1^7;  //复位
sbit wela=P2^6;
sbit dula=P2^7;
sbit k1=P3^2; //上移
sbit k2=P3^3; //下移
#define LcdData P0 //液晶数据端口
//延时函数
void delayms(unsigned int n)
{
   unsigned char i;
   for(;n>0;n--)
      for(i=0;i<100;i++);
}
//液晶检测忙状态
void check_busy(void)
{  
rs=0;
rw=1;
en=1;
LcdData=0xff;
while((LcdData&0x80)==0x80);  
en=0;  
}  
//写入指令代码
void Lcd_WriteCmd(unsigned char Cmd)
{
check_busy();
rs=0;
rw=0;
en=1;
LcdData=Cmd;
_nop_();
    en=0;
}
//写入数据
void Lcd_WriteData(unsigned char Data)
{
check_busy();
rs=1;
rw=0;
en=1;
LcdData=Data;
_nop_();
    en=0;
}
//读数据
unsigned char Lcd_ReadData(void)
{
    unsigned char temp;
    check_busy();
    LcdData=0xff;
rs=1;
rw=1;
en=0;
en=1;
temp=LcdData;
en=0;
return temp;
}
//清除内存
void ClrGDARM(void)
{
    unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
  {
     Lcd_WriteCmd(0x34);
     Lcd_WriteCmd(y+0x80);
     Lcd_WriteCmd(x+0x80);
     Lcd_WriteCmd(0x30);
  Lcd_WriteData(0x00);
  Lcd_WriteData(0x00);
}
}
//初始化函数
void Lcd_Init(void)
{
wela=0;
dula=0;
Lcd_WriteCmd(0x30);//选择基本指令集
delayms(50);
Lcd_WriteCmd(0x01);//来显示(无游标,不泛白)
delayms(50);
Lcd_WriteCmd(0x06);//清除指令
delayms(50);
Lcd_WriteCmd(0x0c);//指定在资料的读取及写入时
  ClrGDARM();
psb=1;
}
//画点,打点位置(x0,y0)colour=1,点亮,colour
void drawPoint(uchar x,uchar y,uchar colour)
{
   unsigned char row,collum,cbite; //行列
   unsigned char tempH,tempL; //定义两个临时变量,用于存放读出来的数据
   Lcd_WriteCmd(0x34);
   Lcd_WriteCmd(0x36);
   collum=x>>4;
   cbite=x&0x0f;
   if(y<32)
     row=y;
   else
     {
     row=y-32;
  collum+=8;
  }
   Lcd_WriteCmd(0x80+row);
   Lcd_WriteCmd(0x80+collum);
   Lcd_ReadData();
   tempH=Lcd_ReadData();
   tempL=Lcd_ReadData();
   Lcd_WriteCmd(0x80+row);
   Lcd_WriteCmd(0x80+collum);
   if(colour)
   {
      if(cbite<8)
   {
      tempH|=(1<<(7-cbite));
   }
      else
   {
      tempL|=(1<<(15-cbite));
   }
   }
   else
   {
      if(cbite<8)
   {
      tempH&=(1<<(7-cbite));
   }
      else
   {
      tempL&=(1<<(15-cbite));
   }
   }
   Lcd_WriteData(tempH);
   Lcd_WriteData(tempL);
   Lcd_WriteCmd(0x30);
}
void main()
{
    unsigned x=0,y=0;
Lcd_Init();
while(1)
{
       if(k1==0)
    {
       y++;
    x=0;
    drawPoint(x,y,1);
    while(k1==0);
    }
       if(k2==0)
    {
       y=63;
    x++;
    drawPoint(x,y,1);
    while(k2==0);
    }
    if(x>127)
    {
    x=0;
     }


}
}

MARK,这个东西有用,记得当初自己也弄过的

学习中,同乐互助,共同进步。

学习中,同乐互助,共同进步。

谢谢!正需要!   

我一直ucGUI的时候就需要两个函数:打点和读取某点像素值,这个真心难搞,高了两天才完成

准备升级中·····

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top