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

📄 ocmj4x8c.c

📁 此为2007年全国大学生电子设计大赛A题音频信号分析仪的源代码
💻 C
字号:
#include <MSP430X16X.h>
#include"OCMJ4X8C.h"

#define comm  0
#define dat   1

/*
sbit rs = P2^0;   //H=data; L=command;
sbit rw = P2^1;   //H=read; L=write;
sbit  e = P2^2;   //input enable;
sbit psb= P2^3;   //H=并口; L=串口;
sbit rst= P2^4;   //Reset Signal 低电平有效


sbit busy=P1^7;   //lcd busy bit
*/


/*------------------初始化-----------------*/
void init_lcd (void)
{
  P2DIR |=0x1F;
  P4DIR |=0xFF;
  P2OUT |=0x10;//rst=1;
  P2OUT |=0X08;//psb=1;
  
  wr_lcd (comm,0x30);  /*30---基本指令动作*/  
  /*
  DL=1: 8-BIT 控制接口
  DL=0: 4-BIT 控制接口
  RE=1: 扩充指令集动作
  RE=0: 基本指令集动作
  */
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
  lat_disp (0x00,0x00);
}

/*---------------显示汉字或字符----------------*/
void chn_disp (uchar *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}
/**********************************************
显示单个字符在液晶上
num:为要显示的字符;   addr:为显示的地址
**********************************************/
void num_disp(uchar num,uint addr)
{
  wr_lcd(comm,0x30);
  wr_lcd(comm,addr);
  wr_lcd(dat,num);
  wr_lcd(dat,' ');
}
/*********************************************
显示一个字符加小数点
*********************************************/
void dot_disp(uchar num,uint addr)
{
  wr_lcd(comm,0x30);
  wr_lcd(comm,addr);
  wr_lcd(dat,num);
  wr_lcd(dat,'.');
}
  
/*********************************************
显示一行字符在液晶上
*********************************************/
void line_disp(uchar* line,uint addr)
{
  uchar i;
  wr_lcd (comm,0x30);
  wr_lcd (comm,addr);
  for (i=0;i<16;i++)
    wr_lcd (dat,*line++);
}

/*-----------上半屏显示汉字或字符------------*/
void chn_disp1 (uchar *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  wr_lcd (comm,0x90);
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
}

/*--------------清DDRAM------------------*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  delay(2000);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  //chk_busy ();
  if(dat_comm)
   {
    P2OUT |=0X01;//rs=1;   //data
    _NOP();
    _NOP();
    P2OUT &=0XFD;//rw=0;   //write
    _NOP();
    _NOP();
   }
  else 
   {
    P2OUT &=0XFE;//rs=0;   //command
    _NOP();
    _NOP();
    P2OUT &=0XFD;//rw=0;   //write
    _NOP();
    _NOP();
   }
  P4OUT=content;   //output data or comm
  _NOP();
  _NOP();
  P2OUT |=0X04;//e=1;
  _NOP();
  _NOP();
  P2OUT &=0XFB;//e=0;
  delay(500);
}

void delay (uint us)   //delay time
{
  while(us--);
}

/*--------------显示点阵----------------*/
void lat_disp (uchar data1,uchar data2)
{
  uchar i,j,k,x;
  x=x1;
  for(k=0;k<2;k++)
  {
    for(j=0;j<16;j++)
    {
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data1);
        wr_lcd (dat,data1);
      }
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2+1);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data2);
        wr_lcd (dat,data2);
      }
    }
    x=x2;
  }
  wr_lcd (comm,0x36);
}

/****************************************************************
把输入的设置值在液晶显示
Value:显示的输入值
****************************************************************/
void Convert(unsigned char *Result,unsigned int value1,unsigned int value2,unsigned int Freq)
{
  Result +=6;
  *Result ='z';
  Result--;
  *Result ='H';
  Result--;
  for(unsigned char i=0;i<5;i++)
  {
    *Result=Freq%10;
    *Result +=48;
    Result--;
    Freq=Freq/10;
  }  
  Result+=16;
  for(unsigned char j=0;j<4;j++)
  {
    *Result=value2%10;
    *Result +=48;
    Result--;
    value2=value2/10;
  }  
  *Result='.';
  Result--;
  for(unsigned m=0;m<3;m++)
  {
    *Result=value1%10;
    *Result +=48;
    Result--;
    value1=value1/10;
  }
  *Result=' ';
}
/****************************************************************
把输入的设置值在液晶显示,显示浮点数
Value:显示的输入值
****************************************************************/
void float_Convert(unsigned char *Result,float Value,unsigned int Freq)
{
  unsigned int value1;
  Value *=100000;
  value1=(unsigned int)Value;
  value1&=0x7FFFF;
  Result +=6;
  *Result ='z';
  Result--;
  *Result ='H';
  Result--;
  for(unsigned char i=0;i<5;i++)
  {
    *Result=Freq%10;
    *Result +=48;
    Result--;
    Freq=Freq/10;
  }  
  Result+=16;
  for(unsigned char j=0;j<2;j++)
  {
    *Result=value1%10;
    *Result +=48;
    Result--;
    value1=value1/10;
  }
  *Result='.';
  Result--;
  for(unsigned char m=0;m<3;m++)
  {
    *Result=value1%10;
    *Result +=48;
    Result--;
    value1=value1/10;
  }
  for(unsigned char n=0;n<3;n++)
  {
    *Result=' ';
    *Result--;
  }
}

⌨️ 快捷键说明

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