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

📄 exp11.c

📁 ALTERA NIOS处理器
💻 C
字号:
#include "excalibur.h"
#include "exp11.h"
/********************************************/
#define GASAL     0x00   //图形区地址低8位 
#define GASAH     0x02   //图形区地址高8位
#define TASAL     0x00   //文本区地址低8位
#define TASAH     0x00   //文本区地址高8位
#define CGRAMSA   0x7800 //CGRAM起始地址 
#define ZIFU_NUM  30     //一行显示的字符数
#define DL1       30
#define DL2       20
/********************************************************/
UINT i;
UCHAR X,Y;
/********************************************************/

int main(void)
{    	

    na_USB_CS->np_piodata=1;   //USB模块无效
    na_LCD_CS->np_piodata=1;   //释放片选
    na_LCD_WR->np_piodata=1;   //读、写信号无效
    na_LCD_RD->np_piodata=1;   
     
    //初始化LCD
    LCD_None_Command(0x9c);               //LCD为图形兼文本方式
    LCD_Dual_Command(TASAL,TASAH,0x40);   //设置文本区首地址
    LCD_Dual_Command(ZIFU_NUM,0,0x41);    //文本区宽度:每行30个字节
    LCD_Dual_Command(GASAL,GASAH,0x42);   //设置图形区首地址
    LCD_Dual_Command(ZIFU_NUM,0,0x43);    //图形区宽度:每行30个字节
    LCD_Dual_Command(CGRAMSA/2048,0x00,0x22);   //设置CGRAM地址偏移
    LCD_None_Command(0x81);        //方式设置:选择CGROM,逻辑“异或”合成
    Clear_Screen(0x0000,0x7fff);   //清屏,从0x0000~0x7FFF  

  while(1)
    {    
       Display_Graph(0,0,m_Graph1,240,128);
       nr_delay(2000);
       Display_Graph(0,0,m_Graph2,240,128);
       nr_delay(2000);
       Clear_Screen(0x0000,0x200+30*128);   //清屏:文本区和图形区  
       X=3;
       Y=15;
       Display_Hanzi(X,Y,bei); 
       X+=2;
       Display_Hanzi(X,Y,jing);
       X+=2;
       Display_Hanzi(X,Y,bai);
       X+=2;
       Display_Hanzi(X,Y,ke);
       X+=2;
       Display_Hanzi(X,Y,rong);
       X+=2;
       Display_Hanzi(X,Y,chuang);
       X+=2;
       Display_Hanzi(X,Y,ke);
       X+=2;
       Display_Hanzi(X,Y,ji);
       X+=2;
       Display_Hanzi(X,Y,you);
       X+=2;
       Display_Hanzi(X,Y,xian);
       X+=2;
       Display_Hanzi(X,Y,gong);
       X+=2;
       Display_Hanzi(X,Y,si);
       X=11;
       Y=35;
       Display_Hanzi(X,Y,huan);
       X+=2;
       Display_Hanzi(X,Y,ying);
       X+=2;
       Display_Hanzi(X,Y,nin);
       X+=2;
       Display_Hanzi(X,Y,tan_hao);
       Display_Line(59,0x11);
       Display_Line(60,0xff);
       Display_Line(61,0x11);
       Display_Line(62,0xff);
       Display_Line(63,0x11);
       X=5;
       Y=72;
       Display_Hanzi(X,Y,dian);
       X+=2;
       Display_Hanzi(X,Y,hua);
       X+=2;
       Display_String(X,Y/8,tel1,14);
       Display_String(X,Y/8+1,tel2,14);
       X=5;
       Y=92;
       Display_Hanzi(X,Y,chuan);
       X+=2;
       Display_Hanzi(X,Y,zhen);
       X+=2;
       Display_String(X,(Y+4)/8,fax,14);
       X=5;
       Y=108;
       Display_Hanzi(X,Y,wang);
       X+=2;
       Display_Hanzi(X,Y,zhi);
       X+=2;
       Display_String(X,(Y+4)/8,net,18);
       nr_delay(2000);      
    }
}
/********************************************************/
void Delay(UINT m_Delay)
{
    while(m_Delay--);	
}
/********************************************************/
void LCD_Write_Command(UCHAR m_Command)   //写命令
{
    Delay(DL1);
    na_LCD_DB->np_piodirection=0xff;  //数据总线:输出
    na_LCD_CD->np_piodata=1;   //选择命令
    na_LCD_CS->np_piodata=0;   //片选拉低
    na_LCD_WR->np_piodata=0;   //写信号有效
    na_LCD_DB->np_piodata=m_Command;
    na_LCD_WR->np_piodata=1;   //写信号无效
    na_LCD_CS->np_piodata=1;   //片选无效
}
void LCD_Write_Data(UCHAR m_Data)          //写数据
{
    Delay(DL2);
    na_LCD_DB->np_piodirection=0xff;  //数据总线:输出
    na_LCD_CD->np_piodata=0;   //选择数据
    na_LCD_CS->np_piodata=0;   //片选拉低
    na_LCD_WR->np_piodata=0;   //写信号有效
    na_LCD_DB->np_piodata=m_Data;
    na_LCD_WR->np_piodata=1;   //写信号无效
    na_LCD_CS->np_piodata=1;   //片选无效
}
void LCD_Dual_Command(UCHAR Data1,UCHAR Data2,UCHAR Command)  //双字节参数操作函数
{
    LCD_Write_Data(Data1);
    LCD_Write_Data(Data2);
    LCD_Write_Command(Command);
}

void LCD_Single_Command(UCHAR Data,UCHAR Command)  //单字节参数操作函数
{
    LCD_Write_Data(Data);
    LCD_Write_Command(Command);
}

void LCD_None_Command(UCHAR Command)  //无参数字节操作函数
{
    LCD_Write_Command(Command);
}

void Clear_Screen(UINT Addr_Start,UINT Len)    //清屏函数
{
   UINT i;
   LCD_Dual_Command(Addr_Start%256,Addr_Start/256,0x24);  //将显示缓冲地址指针设置为0x0000
   LCD_None_Command(0xb0);    //数据自动写设置
   for(i=0;i<Len;i++)    
      LCD_Write_Data(0);
   LCD_None_Command(0xb2);   //自动写结束
}

void Display_Graph(UCHAR x,UCHAR y,UCHAR *Graph,UINT w,UINT h)   //显示一屏图像
{
   UINT i,j,k=0;
   UINT m_Addr;
   LCD_Dual_Command(TASAL,TASAH,0x24);  //将显示缓冲地址指针设置为0x0000
   LCD_None_Command(0xb0);              //数据自动写设置
   for(i=0;i<GASAH*256+GASAL;i++)       //清空文本区
       LCD_Write_Data(0);
   LCD_None_Command(0xb2);              //自动写结束
   for(i=0;i<h;i++)
   {
      m_Addr=GASAH*256+GASAL+(y+i)*ZIFU_NUM+x;
      LCD_Dual_Command(m_Addr&0xff,m_Addr/256,0x24);  //设置地址
      LCD_None_Command(0xb0);             //数据自动写设置
      for(j=0;j<w/8;j++)
         LCD_Write_Data(Graph[i*w/8+j]);          
      LCD_None_Command(0xb2);   //自动写结束
   }
}

void Display_Line(UCHAR y,UCHAR m_Line)   //在屏幕上显示一行黑线
{
   UINT m_Addr=GASAH*256+GASAL+y*ZIFU_NUM;
   LCD_Dual_Command(m_Addr&0xff,m_Addr/256,0x24);  //设置地址
   LCD_None_Command(0xb0);   //数据自动写设置
   for(i=0;i<ZIFU_NUM;i++)
      LCD_Write_Data(m_Line);          
   LCD_None_Command(0xb2);   //自动写结束   
}

void Display_Hanzi(UCHAR x,UCHAR y,UCHAR *m_Font)  //在(x,y)点显示汉字
{
   UINT m_Addr=GASAH*256+GASAL+y*ZIFU_NUM+x;   
   UINT i;
   for(i=0;i<32;)
   {
      LCD_Dual_Command(m_Addr&0xff,m_Addr/256,0x24);  //设置地址
      LCD_Single_Command(m_Font[i++],0xc0);   //写一个字节,地址自动累加
      LCD_Single_Command(m_Font[i++],0xc4);   //写一个字节,地址不变
      m_Addr+=ZIFU_NUM;
   }
}

void Display_Char(UCHAR x,UCHAR y,UCHAR m_Char)  //在(x,y)点显示一个字符(m_Char为ASCII值)(在文本区显示)
{
   UINT m_Addr=TASAH*256+TASAL+y*ZIFU_NUM+x;
   LCD_Dual_Command(m_Addr&0xff,m_Addr/256,0x24);  //设置地址
   LCD_Single_Command(m_Char-0x20,0xc0);   //写一字符的ASCII码
}

void Display_String(UCHAR x,UCHAR y,UCHAR *String,UCHAR Len)  //显示字符串
{
   UINT i;
   for(i=0;i<Len;i++)
      Display_Char(x+i,y,String[i]);
}

⌨️ 快捷键说明

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