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

📄 ca12864_dsp.c

📁 dsp经典代码 dsp经典代码 dsp经典代码
💻 C
字号:
#include	"regs2407.h"
//#include	"register.h" 
#include	"HZTABLE.h" 
//#include "intrins.h"
#include "stdio.h"
//#include "absacc.h"
#include "math.h"
#define uint  unsigned int


#define delay100ns() {int i;for(i=4;i>0;i--) i=i;}
#define kick_dog() {WDKEY= 0x055;WDKEY= 0x0AA;}
#define writeCom_start() {PADATDIR |= 0x40;PADATDIR &= 0xffd7;PADATDIR |= 0x50;PCDATDIR |= 0x01;delay100ns();}//IOPA3,5=0;IOPA4=1;IOPA6=1;IOPC0=1;
#define writeDat_start() {PADATDIR &= 0xff97;PADATDIR |= 0x10;PCDATDIR |= 0x01;delay100ns();}//IOPA3,5=0;IOPA4=1;IOPA6=0;IOPC0=1;
#define write_end() {delay100ns();PADATDIR |=0x08;delay100ns();PADATDIR |= 0x38;delay100ns();PADATDIR^=0x40;PCDATDIR &= 0xfffe;}//IOPA3,4,5=1

#define readCom_start() {PADATDIR |= 0x40;PADATDIR &= 0xFfcf;PADATDIR |= 0x48;PCDATDIR &= 0xfffe;PBDATDIR &=0xff;delay100ns();}//IOPA4,5=0;IOPA3=1;IO
#define readDat_start() {PADATDIR &= 0xFf8f;PADATDIR |= 0x08;PCDATDIR &= 0xfffe;PBDATDIR &=0xff;delay100ns();}//IOPA4,5=0;IOPA3=1;I
#define read_end() {delay100ns();PADATDIR |= 0x38;PADATDIR^=0x40;}//IOPA3,4,5=1

//以8*8字符计算,显示屏横向、纵向可以显示的字符个数
//以128*64为例:
#define LineChar 30 //一行16个字符(8*8)
#define ColumnChar 16 //总共16列

extern int bbb[320];



//指令,数据 读写状态检查
RWCheck() 
{ uint sta,sta1; 
do{
readCom_start(); 
sta=PBDATDIR & 0x03; 
read_end();kick_dog(); }while(sta!=0x03);
 }
//数据自动读 状态检查
#define AutoRCheck() { uint sta; do{readCom_start();sta=PBDATDIR & 0x04;read_end();} while(sta!=0x04); }
//数据自动写
#define AutoWCheck() { uint sta; do{readCom_start();sta=PBDATDIR & 0x08;read_end(); } while(sta!=0x08); }

/*------输入/出函数,与T6963通讯------------------------------------------------*/
/*------------------------------------------------------------------------*/

// 向数据口发Data
OutPortData(dat ) 
{ 
uint i;
RWCheck(); 
writeDat_start();
PBDATDIR=(dat|0xff00); 
write_end(); PBDATDIR&=0xff; 
}

//写有 1 个参数命令
OutPortCom1(command) 
{ 
uint i;
RWCheck(); 
writeCom_start();
PBDATDIR=(command|0xff00);   
write_end();PBDATDIR&=0xff; }

//写有 2 个参数命令
#define OutPortCom2(dat, command) { OutPortData(dat);OutPortCom1(command); }

//写有 3 个参数命令
#define OutPortCom3(data1, data2, command) { OutPortData(data1); OutPortData(data2); OutPortCom1(command);}


uint InPortData() 
{
	uint i,j; 
	RWCheck(); 
	readDat_start();
	i= PBDATDIR&0x00fF; 
	read_end();
	return(i);
}


/*----------------------------------------------------------------------------------------------*/
//显示一个汉字(16*16点阵)
//x:行, y: 列,number:汉字在字库中的位置;p:字库数组首地址指针
void ShowHZ1616(uint x,uint y,uint number)
{
        int i,j;
        uint StartAddr;

        StartAddr=y*LineChar + x; //定位起始行
        j = number*32;
        for(i=0;i<16;i++)
        {       
                OutPortCom3(StartAddr, StartAddr>>8, 0x24);
                OutPortCom2( hzk1616[j+i*2], 0xc0); //左半部 地址加一
                OutPortCom2( hzk1616[j+i*2+1], 0xc0); //右半部 字模地址加一 
                StartAddr=StartAddr + LineChar; 
               
        }

}

/*----------------------------------------------------------------------------------------------*/
//显示一个汉字(16*8点阵)
//x:行, y: 列,number:汉字在字库中的位置;p:字库数组首地址指针
void ShowHZ168(uint x,uint y,uint number)
{
        uint i,j;
        uint StartAddr;

        StartAddr=y*LineChar + x; //定位起始行
        j = number * 16;
        for(i=0;i<16;i++)
        {
                OutPortCom3( StartAddr, StartAddr>>8, 0x24);                 
				OutPortCom2( hzk168[j+i], 0xc0);
				StartAddr=StartAddr + LineChar;
        }

}



void boxing_show(int x,int y,int number)
{
        int i,j,command=0xf8;
        int StartAddr;

        StartAddr=y*30 + x; //定位起始行
        command=0xf8|number;

                OutPortCom3( StartAddr, StartAddr>>8, 0x24);                 
                OutPortCom1(command);

}

void Clear_boxing(int x,int y,int number)
{
        int i,j,command=0xf0;
        int StartAddr;

        StartAddr=y*30 + x; //定位起始行
        command=0xf0|number;

                OutPortCom3( StartAddr, StartAddr>>8, 0x24);                 
                OutPortCom1(command);

}

/*----------------------------------------------------------------------------------------------*/

//反显一个字符
//x:行(0-7), y: 列(0-15)
void ReverseShowChar(uint xx,uint yy,uint x)
{
        uint i,dat,StartAddr;

        StartAddr=yy*LineChar +xx; //定位起始行

        for(i=0;i<x;i++)
        {
                OutPortCom3( (uint)(StartAddr), (uint)(StartAddr>>8), 0x24);
                OutPortCom1( 0xc5 ); //数据一次读,地址不变
                dat=InPortData(); //读入数据
                dat=(~dat)&0x00ff; //取反
                OutPortCom2( dat, 0xc4); //送回

                StartAddr=StartAddr+ LineChar;
        }
}

/*----------------------------------------------------------------------------------------------------*/
//反显一个汉字
//x:行(0-7), y: 列(0-15)字体:x*y
void ReverseShowHZ(uint xx,uint yy,uint x,uint y)
{       uint i;
        for (i=0;i<y/8;i++)
        {
                ReverseShowChar(xx+i,yy,x);
        }
}

void ClearScreen()
{

unsigned int i;
///////// 清显示 RAM 区 0000h--2000h (8k)
OutPortCom3(0x00,0x00,0x24); //设置指针地址0000H

OutPortCom1(0xb0); //设置自动写状态
for(i=0x0000;i<8192;i++) 
	{OutPortData(0x0); // data=0;      
	 i=i;
	}	
OutPortCom1(0xb2); // 自动写结束
}

//初始化LCD
//需要手动设置
void InitLCD()
{



OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
OutPortCom3( 30,0x00,0x43 ); //设置图形显示区域宽度 : LineChar
//OutPortCom3( 0,0x00,0x22 ); //设置图形显示区域宽度 : LineChar
//OutPortCom3( 0,0x00,0x24 ); //设置图形显示区域宽度 : LineChar

OutPortCom3( 0x00,0x10,0x40 ); //设置文本显示区域首地址GraphAddr
OutPortCom3( 30,0x00,0x41); //设置文本显示区域宽度:10H

OutPortCom1(0xa7); //设置光标形状 cursor size 8x8
OutPortCom1(0x80); //设置显示方式: CGROM方式 文本\图形 "或"
OutPortCom1(0x98); //设置显示开关: 1001 1100 图形
OutPortCom3( 0x00,0x00,0x21);

ClearScreen();





}  

⌨️ 快捷键说明

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