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

📄 lcd.c

📁 音频信号分析仪设计原码
💻 C
字号:
#include "spce061.h"
#include "global.h"
#include "LCD.h"

/////////////////lcd control/////////////////
#define lcd_busy 0x2000
#define setb_req 0x4000
#define reset    0x7fff
uint re;

const uint number[][14]=
{
0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,//0
0x00,0x0C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,//1
0x00,0x3E,0x63,0x63,0x03,0x03,0x06,0x0C,0x18,0x30,0x60,0x60,0x7F,0x00,//2
0x00,0x3E,0x63,0x63,0x03,0x03,0x3E,0x03,0x03,0x03,0x63,0x63,0x3E,0x00,//3
0x00,0x06,0x06,0x0E,0x1E,0x16,0x26,0x26,0x66,0x7F,0x06,0x06,0x06,0x00,//4
0x00,0x7F,0x60,0x60,0x60,0x7E,0x63,0x03,0x03,0x03,0x63,0x63,0x3E,0x00,//5
0x00,0x3E,0x63,0x63,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,//6
0x00,0x7F,0x03,0x06,0x06,0x0C,0x0C,0x0C,0x18,0x18,0x18,0x18,0x18,0x00,//7
0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,//8
0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x63,0x63,0x3E,0x00, //9
0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, //:
};

void write_data(uint date)      //write a date
{
uint i;
PABUF=PABUF&(~setb_req);
date&=0xff;
while(PA&lcd_busy);//接lcd的req脚
PABUF&=0xff00;
PABUF|=date;
PABUF|=setb_req;
i=PA&lcd_busy;
if(i==lcd_busy)
  i=0;
else 
  i=1;
while(i)
  {
   i=PA&lcd_busy;
   if(i==lcd_busy)
     i=0;
   else 
     i=1;
  }
PABUF&=(~setb_req);
}  

void clrscreen()
{
write_data(0xf4);
}

void displayscreen(uint *p,uint type)
{
uint i=0x00;
uint j=0xffff;
draw_pic(p,type);
for(;i<=0x48;i++)
 {
  write_data(0xf5);
  while(j--);
   j=0xffff;
  }
}
   
void draw_pic(uint *pp,uint type)
    {
    uint i;
    uint j;
    uint buf;
    uint *p_buf;
    uint k=0xffff;
    uint *p=pp;
    if(type==0)
    {
    for(j=0x8;j<0x48;j++)
    {
    for(i=0x2;i<0x12;i++)
    {
    write_data(0xf3);
    write_data(i);
    write_data(j);
    buf=*p++;
    if(re)
    buf=~buf;
    write_data(buf);
    }
    clrWatchDog();
    }
    }
    else if(type==1)
    {
    p_buf=p;
    for(j=8;j<0x48;j+=3)
    {
    for(i=0x02;i<0x12;i++)
    {
    write_data(0xf3);
    write_data(i);
    write_data(j);
    buf=*p++;
    if(re)
    buf=~buf;
    write_data(buf);
    }
    clrWatchDog();
    p+=32;
    }
    while(k--);
    k=0xffff;
    p=p_buf+16;
    for(j=0x01;j<0x40;j+=3)
    {
    for(i=0x04;i<0x14;i++)
    {
    write_data(0xf3);
    write_data(i);
    write_data(j);
    buf=*p++;
    if(re)
    buf=~buf;
    write_data(buf);
    }
    clrWatchDog();
    p+=32;
    }
    while(k--);
    k=0xffff;
    p=p_buf+32;
    for(j=0x02;j<0x40;j+=3)
    {
    for(i=0x04;i<0x14;i++)
    {
    write_data(0xf3);
    write_data(i);
    write_data(j);
    buf=*p++;
    if(re)
    buf=~buf;
    write_data(buf);
    }
    clrWatchDog();
    p+=32;
    }
    }
    } 

void initLCD()
   {
   uint i=1000;
   PB&=reset;
   while(i--);
    PB|=~(reset);
   clrscreen();
   }
   
void dispnumber(uint xaddr,uint yaddr,uint date)
{
     uint z1;
     uint i;
     uint *p=number[date];
     xaddr+=4;
     yaddr*=16+1;
     z1=yaddr+14;
     for(;yaddr<z1;yaddr++)
     {
     write_data(0xf3);
     write_data(xaddr);
     write_data(yaddr);
     i=*p;
     if(re)
      i=~i;
     p++;
     write_data(i);
     }
     }

void dispwavetype(uint xaddr,uint yaddr,uint wavetype)
     {
     if(wavetype==NONE)
     {
     write_word(xaddr,yaddr,0xceb4);
     write_word(xaddr,yaddr+1,0xd6aa);
     write_word(xaddr,yaddr+2,0xb2a8);
     }
     else if(wavetype==AM)
     {
     write_word(xaddr,yaddr,0xb5f7);
     write_word(xaddr,yaddr+1,0xb7f9);
     write_word(xaddr,yaddr+2,0xb2a8);
     }
     else if(wavetype==FM)
     {
     write_word(xaddr,yaddr,0xb5f7);
     write_word(xaddr,yaddr+1,0xc6b5);
     write_word(xaddr,yaddr+2,0xb2a8);
     }
     else if(wavetype==TM)
     {
     write_word(xaddr,yaddr,0xb5f7);
     write_word(xaddr,yaddr+1,0xd6c6);
     write_word(xaddr,yaddr+2,0xb2a8);
     }
     else if(wavetype==OM)
     {
     write_word(xaddr,yaddr,0xc6e4);
     write_word(xaddr,yaddr+1,0xcbfb);
     write_word(xaddr,yaddr+2,0xb2a8);
     }
     }

void write_word(uint xaddr,uint yaddr,uint date)
     {
     uint high=date/256-0xa0;
     uint low=date%256-0xa0;
     xaddr+=2;
     yaddr+=1;
     write_data(0xf0);
     write_data(xaddr);
     write_data(yaddr);
     write_data(high);
     write_data(low);
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -