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

📄 zi.c

📁 基于凌阳和ad9850实现的正弦波信号发生器程序
💻 C
字号:
#include "SPCE061V004.H"
#include "lcd.h"
extern bno;
//=======================================================================================
//
//=======================================================================================
io_init(void)
{
	*P_IOA_Dir=0xffff;
	*P_IOA_Data=0xffff;
	*P_IOA_Attrib=0xffff;

	*P_IOB_Dir=0xffff;
	*P_IOB_Data=0xffff;
	*P_IOB_Attrib=0xffff;
	*P_SystemClock=0x0051;
}

//=======================================================================================
//*写坐标轴
//*全局变量 x,y
//=======================================================================================
w_xy(void)
{
	int xr,yr;
 	x_all=x;
 	if(x<64)
   	{
   		wp=*P_IOA_Buffer&0xe7ff;	//?1110 0111??
    	*P_IOA_Data=wp|0x0800;	//?0000 1000??
   	}
 	else
   	{
    	wp=*P_IOA_Buffer&0xe7ff;	//?1110 0111??
    	*P_IOA_Data=wp|0x1000;	//?0001 0000??
   	}
 	xr=(x&0x3f)|0x0040;		//01AA AAAA
 	i_send(xr);
 	yr=y|0x00b8;           //1011 1AAA
 	i_send(yr);
}
//=======================================================================================
//*写一个字节数据到显示屏
//*入口 数据内容
//*当数据当前坐标到了64则调用w_xyall()函数
//=======================================================================================
w_b(int i)
{
 	d_send(i);
}
//=======================================================================================
//*写指令到显示屏函数
//*入口 指令数据内容
//=======================================================================================
i_send(int i)
{
	wp=*P_IOA_Buffer&0xf800;		//?1111 1000??
 	*P_IOA_Data=i|(wp|0x0400);		//?0000 0100??   e-w\r-d\i:1-0-0     
	delay(5);	
 	wp=*P_IOA_Buffer&0xf8ff;		//?1111 1000??   e-w\r-d\i:0-0-0
 	*P_IOA_Data=wp;		//					????? ???
	// wp=*P_IOA_Buffer|0x0400;		//?1111 1000??   e-w\r-d\i:1-0-0
 	//*P_IOA_Data=wp;		//					?????
}

//=======================================================================================
//*写一个字节数据到显示屏
//*入口 显示数据内容
//=======================================================================================
d_send(int i)
{
	wp=*P_IOA_Buffer&0xf800;		//?1111 1000??
 	*P_IOA_Data=i|(wp|0x0500);		//?0000 0101??   e-w\r-d\i:1-0-1 
	delay(5);    
 	wp=*P_IOA_Buffer&0xf9ff;		//?1111 1001??   e-w\r-d\i:0-0-1
 	*P_IOA_Data=wp;		//					????? ???
	//wp=*P_IOA_Buffer|0x0500;		//?0000 0101??   e-w\r-d\i:1-0-1
 	//*P_IOA_Data=wp;		//					?????
}
//=======================================================================================
//*显示开
//=======================================================================================
displayon()			//显示开
{
	int i=0x003f;				//0011 1111
 	i_send(i);
}
//=======================================================================================
//*延时并喂狗
//=======================================================================================
delay(int i)
{
	int j,k=0;
 	for(j=0;j<i;j++) *P_Watchdog_Clear=0x0001;
}

//=======================================================================================
//*刷新显示屏数据
//=======================================================================================
int p;
void w_scr(void)
{
	int i;
 	*P_IOA_Data=*P_IOA_Buffer|0x8000;
 	for(p=0;p<8;p++)
   	{
   		x=0;
   		y=p;
     	w_xy();
     	for(i=0;i<64;i++)
       	{
       		w_b(display[p][i]);          //显示一行中的左半行
       	}
     	x=64;
     	w_xy();
     	for(i=64;i<128;i++)
       	{
       		w_b(display[p][i]);          //显示一行中的右半行
       	}
   	}
  	*P_IOA_Data=*P_IOA_Buffer|0x00ff; 
 	*P_IOA_Data=*P_IOA_Buffer&0x7fff;
}
//=======================================================================================
//*把鼠标显示数据分成2上下页部分
//=======================================================================================
void di_m(void)
{
	int i,j;
	j=0;
 	j=8-line;
 	for(i=0;i<8;i++)
   	{
   		m_t1[i]=mouse[i]<<line;
    	m_t2[i]=mouse[i]>>j;
   	}
 	for(i=0;i<8;i++)
    {
    	mt3[i]=m_t1[i]&0x00ff;
    }
}
//=======================================================================================
//保存要被鼠标覆盖的数据
//=======================================================================================
void save_date(void)
{
	int i,t;
	t=0;
 	t=page+1;
  	for(i=0;i<8;i++)
    {
    	d_t1[i]=display[page][m_x+i];
      	d_t2[i]=display[t][m_x+i];
    }
}
//=======================================================================================
//把鼠标数据叠加到显示数据上
//=======================================================================================
void w_mouse(void)
{
	int i,t;
	t=0;
  	t=page+1;
 	for(i=0;i<8;i++)
    {
    	display[page][m_x+i]=display[page][m_x+i]| mt3[i]; 
       	display[t][m_x+i]=display[t][m_x+i]|m_t2[i];
    }
}
//=======================================================================================
//恢复显示数据,去掉鼠标数据
//=======================================================================================
void b_data(void)
{
	int i,t;
	t=0;
 	t=page+1;
 	for(i=0;i<8;i++)
   	{
   		display[page][m_x+i] = d_t1[i];
    	display[t][m_x+i] = d_t2[i];
   	}
}
//=======================================================================================
//写一个ASII码   number为ASII码
//=======================================================================================
void xieword(int xx,int yy,char number)
{ 
	int i,*p;
	p=&no;
 	p=number*8+p;
  	for(i=0;i<8;i++)
    {
    	display[yy][xx+i]=*p;
      	p++;
    }
}
//=======================================================================================
//
//=======================================================================================
void xiezi(int xx,int yy,int *p)
{
	int i;
  	for(i=0;i<16;i++)
    {
    	display[yy][xx+i]=*p;
      	p++;
    }
  	yy++;
  	for(i=0;i<16;i++)
    {
    	display[yy][xx+i]=*p;
      	p++;
    }
}

//=======================================================================================
//*局部显示数据取反
//*起始位置 (xx,yy)     yy,ye为页
//*结束位置 (xe,ye)
//=======================================================================================
void cpl(int xx,int yy,int xe,int ye)
{
	int i,j;
  	for(j=0;j<(ye-yy+1);j++)
    {
    	for(i=0;i<(xe-xx+1);i++)
        {
        	display[yy+j][xx+i]=(~display[yy+j][xx+i])&0x00ff;
        }
    }
}
//=======================================================================================
//*写局部显示屏
//*起始位置 (xx,yy)     yy,ye为页
//*结束位置 (xe,ye)
//=======================================================================================
void w_p(int xx,int yy,int xe,int ye)
{
	int i,j;
  	for(j=0;j<(ye-yy+1);j++)
    {
    	x=xx;y=yy+j;w_xy();
     	for(i=0;i<(xe-xx+1);i++)
        {
        	if((xx+i)==64){x=64;w_xy();}
          	w_b(display[yy+j][xx+i]);
        }
    }
}
//=======================================================================================
//*鼠标在区域内,显示反白
//*起始位置 (xx,yy)------------页
//*结束位置 (xe,ye)
//*ioro  全局变量 是否在区内标志位
//=======================================================================================
b_in(int xx,int yy,int xe,int ye,int g)
{
	int i,*pt,s=0;
   	pt=&ioro1;
   	pt=pt+g;
  	if(page>=yy&page<=ye&m_x>xx&m_x<xe)
  	{
  		if(*pt==0) i=1;
  	    else i=0; 
  	    *pt=1;
  	}
  	else 
  	{
  		if(*pt==1) i=1;
  	    else i=0;
   	    *pt=0;
  	}
  	if(i==1)
  	{
  		cpl(xx,yy,xe,ye);
  	 	w_scr();
  	 	s=1;
  	}
 	return s;
}
//=======================================================================================
//
//=======================================================================================
void w_word(int xx,int yy,int *p)
{
	int i;
  	for(i=0;i<8;i++)
    {
    	display[yy][xx+i]=*p;
      	p++;
    }
}

//=======================================================================================
//
//=======================================================================================
void xiebword(int xx,int yy,int data )
{
	int i,*p;
   	p=&bno;
   	p=16*data+p;
  	for(i=0;i<8;i++)
    {
    	display[yy][xx+i]=*p;
      	p++;
    }											//上半部分
    yy++;
   	for(i=0;i<8;i++)
    {
    	display[yy][xx+i]=*p;
      	p++;											//下半部分
    }
}
//=======================================================================================
//
//=======================================================================================
void xieenglish(int xx,int yy,int *data )
{
	int i;
	for(i=0;i<8;i++)
    {
    	display[yy][xx+i]=*data;
      	data++;
    }											//上半部分
    yy++;
   	for(i=0;i<8;i++)
    {
    	display[yy][xx+i]=*data;
      	data++;											//下半部分
    }
}

⌨️ 快捷键说明

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