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

📄 利用lcd演示q格式运算.txt

📁 是一个比较好的dsp教程
💻 TXT
字号:
/*Main.c*/ 
#include "global.c" 
void SystemInit();
void KickDog();  
void ShowChar(unsigned char,unsigned char,unsigned char);
void Init_Lcd(void);
void Clr_Lcd(void);
void Judge1_Ready(void);
void Judge2_Ready(void);
void Write_Code(void);
void Write1_Data(void);
void Write2_Data(void);
void Lcd_Delay(void); 
void Lcd_Delay1(void);
void QCACU(); 
unsigned int temp1,temp2;
unsigned long code_addr,data_addr;  
unsigned int LineChar=16;
unsigned int ColumnChar=8; 
unsigned int chresult[2][16]={							  	
	                    {0x00,0x11,0x0e,0x15,0x0a,0x11,0x0e,0x15,0x1d,0x12,0x0e,0x12,0x15,0x00,0x00,0x00}, /*;21H!*/	
	                    {00,00,00,0x0,0x0,00,00,00,00,00,00,00,00,00,00,00}};	              	

int qfloat;
main()
{  

   SystemInit();         	//系统初始化
   QCACU();
   MCRA=MCRA & 0xC0FF; 	    //IOPB0-6设为IO口模式
   PBDATDIR=0xFFC2;   	    //所有LED=0 
   PBDATDIR=PBDATDIR |0x003D;  //所有LED=1     
   code_addr=0x8010;
   data_addr=0x8000; 
    
   MCRC=MCRC & 0xFFF0;
   PEDATDIR=PEDATDIR | 0x0200;
   PEDATDIR=PEDATDIR & 0xFFFD;
   asm(" nop ");
   asm(" nop ");
   asm(" nop ");
   asm(" nop ");
   PEDATDIR=PEDATDIR | 0x0202;
   Init_Lcd();
   
    ShowChar(3,0,0);
    
   while(1);
   
}
void QCACU()
{
  
    unsigned int i=0,m=0,n=0,ch,qf2;  
    int endflag=1;
    unsigned long int qf=0x180;			/*Q8格式表示为1.5*/
    unsigned int *addr=(unsigned int *)0x8500;   /*数据存储地址*/
    				
    qf=(qf*qf)>>8;						
    qfloat=(int)qf;						/*Q8格式qfloat=576*/
    *addr=qfloat;						
   

}
void SystemInit() 
{  
 
	asm(" SETC	INTM ");	/* 关闭总中断 */
	asm(" CLRC  SXM  ");	/* 禁止符号位扩展 */ 
	asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/
	asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/
	SCSR1=0x83FE;         	/* 系统时钟CLKOUT=20*0.5=10M */
							/* 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=10M */
	WDCR=0x006F;			/* 禁止看门狗,看门狗时钟64分频 */ 
	KickDog();    			/* 初始化看门狗 */  
    IFR=0xFFFF;				/* 清除中断标志 */
    IMR=0x0000;				/* 关闭中断*/      
    
}  

void ShowChar(unsigned char lin,unsigned char column,unsigned char k)
{
unsigned char i;

unsigned int StartAddr;

StartAddr=lin*LineChar +column; //定位起始行

for(i=0;i<16;i++)
{
data1=(unsigned char)(StartAddr);         
data2=(unsigned char)(StartAddr>>8);
data3=0x24;
Write1_Data(); 
Write2_Data();
Write_Code();
data1=chresult[k][i];
Write1_Data();
data3=0xc4;
Write_Code();
StartAddr=StartAddr + 1;
}

}


void Init_Lcd()
{
 data1=0x00;         //图形区首址 (0000H)
 data2=0x08;
 data3=0x42;
 Write1_Data();
 Write2_Data();
 Write_Code();
 data1=0x10;         //图形区宽度
 data2=0x00;
 data3=0x43;
 Write1_Data();
 Write2_Data();
 Write_Code();
 data1=0x00;         //文本区首址(1000h)
 data2=0x00;
 data3=0x40;
 Write1_Data();
 Write2_Data();
 Write_Code();       
 data1=0x10;         //文本区宽度
 data2=0x00;
 data3=0x41;
 Write1_Data();
 Write2_Data();
 Write_Code(); 
 
 data3=0xa7;          //设置光标的形状
 Write_Code();
 data1=0x0f;      //光标指针,data1为列(00-0f),data2(00-07)为行,8*8框格
 data2=0x07;
 data3=0x21;
 Write1_Data();
 Write2_Data();
 Write_Code();
 
 data3=0x9f;
 Write_Code();    //启用图形和文本显示,光标闪烁
 data3=0x81;
 Write_Code();    //字符发生器为CGRAM,显示方式为逻辑或
 
 data1=0x00;         //置地址指针位置,(*)
 data2=0x00;
 data3=0x24;
 Write1_Data();
 Write2_Data();
 Write_Code(); 
 
 Clr_Lcd();
 return;
}

void Clr_Lcd()
{
  unsigned int p=0,q=0,r=0;
  
  /*data1=0x03;         //CGRAM偏置地址设置
  data2=0x00;
  data3=0x22;
  Write1_Data();
  Write2_Data();
  Write_Code();*/
  
  data2=0x00;
  data3=0x0b0;
  Write_Code();      //为自动写入状态
  data1=0x2000;     //清显示RAM 0000H-2000H(8K)
  while(data1-->0) 
  {
    
    //Judge2_Ready();
    Lcd_Delay1();
    data2=0x0;  
    Write2_Data(); 
  }
  
  data1=0x00;         //置地址指针位置,(*)
 data2=0x00;
 data3=0x24;
 Write1_Data();
 Write2_Data();
 Write_Code(); 
  data1=0x2000;     //写显示RAM 0000H-2000H(8K)
  while(data1-->0) 
  {
    Lcd_Delay1();
    data2=0x0ff;  
    Write2_Data(); 
  } 
  
   data1=0x00;         //置地址指针位置,(*)
 data2=0x00;
 data3=0x24;
 Write1_Data();
 Write2_Data();
 Write_Code(); 
  data1=0x2000;     //清显示RAM 0000H-2000H(8K)
  while(data1-->0) 
  {
    Lcd_Delay1();
    data2=0x0;  
    Write2_Data(); 
  } 
  
  data3=0x0b2;
  Write_Code();
  
    
 return;
}

void Lcd_Delay()
{
unsigned int i=1;
unsigned int j=1;
while(i--) 
{
 while(j--){;}
}
}

void Lcd_Delay1()
{
unsigned int i=1;
unsigned int j=100;
while(i--) 
{
 while(j--){;}
}
}

void Judge1_Ready()
{
 
 do
 {
 asm(" IN 8010h,_temp1 ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 temp1=temp1&3;
 }while(temp1!=3); 
 temp1=0;
}

void Judge2_Ready()
{
 do
 {
 asm(" IN 8010h,_temp2 ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 temp2=temp2&8;
 }while(temp2!=8);
 temp2=0;
}

void Write_Code()
{
//Judge1_Ready(); 
 Lcd_Delay();
 
 PEDATDIR=PEDATDIR | 0x2020;
 asm(" ldp #010h ");
 asm(" OUT 062h,8010h ");  
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 //Lcd_Delay();
 return;
}

void Write1_Data()
{
 Lcd_Delay();
 PEDATDIR=PEDATDIR | 0x2000;
 PEDATDIR=PEDATDIR & 0xFFDF;
 //Judge1_Ready(); 
 asm(" ldp #010h ");
 asm(" OUT 060h,8000h ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 //Lcd_Delay();
 return;
}

void Write2_Data()
{
 Lcd_Delay();
 PEDATDIR=PEDATDIR | 0x2000;
 PEDATDIR=PEDATDIR & 0xFFDF;
 //Judge1_Ready(); 
 asm(" ldp #010h ");
 asm(" OUT 061h,8000h ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 asm(" nop ");
 //Lcd_Delay();
 return;
}

void KickDog()				/*踢除看门狗 */
{
	WDKEY=0x5555;
	WDKEY=0xAAAA;
}

⌨️ 快捷键说明

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