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

📄 display.c

📁 凌阳61单片机实现的多功能电子琴源程序代码
💻 C
字号:
/*************************************************************
型号:      OCM12864-8
编写:      hyc
控制IC:    ST7565p
E-mail:    hyc_sea@mail.sdu.edu.cn
***************************************************************/

///////////////////////////////////////////////
//		9 	A---------------VDD
//		8 	K----------------GND
//		7  	VSS--------------GND
//		6 	VDD--------------VDD

//		5	CDA--------------IOB4
//      4	SCK--------------IOB3
//		3 	A0 --------------IOB2
//		2	/RES-------------IOB1
//		1 	/CS--------------IOB0
/////////////////////////////////////////////////


#include "SPCE061A.H"
#include "char_lib.h"
#include "display.h"
#include "organ.h"


extern int mode;			//模式
// mode=0		模式选择
// mode=1		录音
// mode=2		编辑
// mode=3		播放
extern int page; 			//页
extern int colume;			//列
extern int n;				//已输入的音符数
//  n从1开始,n<=96,n=96时为满屏
extern unsigned char cha[96];	//存储音符的数组
//unsigned char *note;


/***************************************************/
/*125us的延时*/
void delay_nus(int n)//125us
{
	while(n--);
	*P_Watchdog_Clear=0x0001;
}

/*毫秒级延时*/
void delay_nms(int n)//
{
  int i;
  for(i=0;i<n;i++)
    delay_nus(78);
  
}

/*写命令到寄存器*/
void send_cmd(unsigned char cmd)
{
  unsigned char i;
  unsigned char tmp;
  LCD_A0_L;            //指令通道  
  LCD_SCK_H;			//时钟高,变数据
  LCD_CS_L;               //片使能
  delay_nus(5);
  for(i=0;i<8;i++)
  {
    tmp=cmd&0x0080;
    if(tmp)
    	LCD_CDA_H;
    else
    	LCD_CDA_L;
    LCD_SCK_L;		//时钟低,送数据
    __asm("NOP");
    __asm("NOP");
    LCD_SCK_H;		//上升沿,读数据
    __asm("NOP");
    __asm("NOP");
    cmd<<=1;
  }
  LCD_CS_H;              //片禁能
  delay_nus(5); 
}

/*写数据到DDRAM*/
void send_dat(unsigned char dat)
{
  unsigned char i;
  unsigned char tmp;
  LCD_A0_H;       	 	//数据通道      
  LCD_SCK_H;			//时钟高,变数据
  LCD_CS_L;              //片使能
  delay_nus(5); 
  for(i=0;i<8;i++)
  {
  	tmp=dat&0x0080;
    if(tmp) 	LCD_CDA_H;
    else    	LCD_CDA_L;
    LCD_SCK_L;		//时钟低,送数据
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    LCD_SCK_H;		//时钟高,变数据
     __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    dat<<=1;
  }
  LCD_CS_H;              //片禁能
  delay_nus(5);
}
/*写页地址*/
void set_page_address(unsigned char dat)
{
    send_cmd(0xb0|dat);
}

/*写列地址*/
void set_colume_address(unsigned char dat)
{
    unsigned char tmp;
	tmp=dat>>4;
	tmp&=0x00ff;
    send_cmd(0x10|tmp);  //送列地址高三位
	tmp=0x0f&dat; 
    send_cmd(tmp);       //送列地址低四位
}
/*清屏*/
void Clear_S()
{
  unsigned char i,j;
  for(i=0;i<8;i++)
  {
    set_page_address(i);
    set_colume_address(0x00);
    for(j=0;j<0x84;j++)
    {
      send_dat(0x00);
    }
  }
}


/*显示汉字*/
void display_cha(unsigned char *cha,int page,int colume)
{
	int j;
	set_page_address(page);
    set_colume_address(colume);
    for(j=0;j<16;j++)
    {
    	send_dat(*(cha+j));
   	}
   	set_page_address(page+1);
    set_colume_address(colume);
     for(j=0;j<16;j++)
    {
    	send_dat(*(cha+16+j));
   	}
 }
 /*显示音符*/
void display_note(unsigned char *note,int page,int colume)
{
	int j;
	set_page_address(page);
    set_colume_address(colume);
    for(j=0;j<8;j++)
    {
    	send_dat(*(note+j));
   	}
 }
/*显示模式选择界面*/
void display_mode_choice(void)
{
	send_cmd(0xa6);
    display_cha(qing,0,0);
    display_cha(xuan,0,16);
    display_cha(ze,0,32);
    display_cha(gong,0,48);
    display_cha(zuo,0,64);
    display_cha(mo,0,80);
    display_cha(shi,0,96);
    display_cha(colon,0,112);
    display_cha(num1,2,0);
    display_cha(tan,2,16);
    display_cha(zou,2,32);
    display_cha(num2,4,0);
    display_cha(bian,4,16);
    display_cha(ji,4,32);
}
void display_mode_1(void)
{
	send_cmd(0xa6);
    display_cha(num1,0,0);
    display_cha(tan,0,16);
    display_cha(zou,0,32);
    display_cha(mo,0,48);
    display_cha(shi,0,64);
    display_cha(colon,0,80);
    page=1;
    colume=0;
}
//根据数字,选择相应音符字模首地址给全局变量*note
/*void choose_note_lib(void)
{
	switch(num)
		case 1 
}

void display_add(void)
{
	if(n<96)
	{
		if(colume!=120)
		{
			set_colume_address(colume);
			set_page_address(page);
			display_note(*(note+n+1));			
		}
		else
		{
			set_colume_address(0);
			page++;
			set_page_address(page);
			display_note(*(note+n+1));	
		}
	}
	else
	{
		display_full();
	}
	n++;
}
*/
/*初始化*/
void lcd_initial(void)
{
	LCD_RES_L;
	delay_nus(5);
	LCD_RES_H;
	delay_nus(5);
	send_cmd(0xA2);	//LCD bias setting: 1/9
	send_cmd(0xA0);	//ADC selection: ram-seg normal
	send_cmd(0xC8); //Common output mode selection: reverse
//	send_cmd(0xDC); //??????????????????


//	send_cmd(0xC8);//?????????????????

	send_cmd(0x25); //resistor
	send_cmd(0x81); //Electonic Volume
	send_cmd(0x14);
	send_cmd(0x2C); //voltage booster
	send_cmd(0x2E); //voltage regulator
	send_cmd(0x2F); //voltage follower
	send_cmd(0xAF); //LCD display on
	send_cmd(0xE0); //Column address increment w+1
	send_cmd(0x40); //start line address
	Clear_S();
}



⌨️ 快捷键说明

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