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

📄 wang.c

📁 产生方波
💻 C
字号:
#include"bit.h"
#include"lcd1.h"
#include"SPCE061A.h"
#include"sp.h"
//#define Fosc_CLK_RATE     C_Fosc_24M      //select Fosc 
//#define CPU_CLK_RATE      C_Fosc_Div_2     //select CPUClk 
/*------------------检查忙位-----------------------------*/
/*void chk_busy()
{
	*P_IOA_Dir = 0xFFFF;                 
    *P_IOA_Attrib = 0xFFFF; 
    *P_IOA_Data = 0x0000;    
    RS=0;
    RW=1;
    E=1;
    P0_Lowbyte=0xff;
    E=0;
    *P_IOA_Dir = 0x0000;                 
    *P_IOA_Attrib = 0x0000; 
    *P_IOA_Data = 0x0000;  
   while((P0_Lowbyte&0x80)==0x80)
   {
   *P_Watchdog_Clear=0x0001;
   }
}*/
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{  
   unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
      {
      	*P_Watchdog_Clear=0x0001;
      }
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
	/*chk_busy();
	*P_IOA_Dir = 0xFFFF;                 
    *P_IOA_Attrib = 0xFFFF; 
    *P_IOA_Data = 0x0000; */
	RS=0;
	RW=0;
	E=1;
	P0_Lowbyte=cmdcode;
	delay(5);         //在数据写入的时候加入适当的延时
	E=0;
	delay(5);
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
    /*chk_busy();
	*P_IOA_Dir = 0xFFFF;                 
    *P_IOA_Attrib = 0xFFFF; 
    *P_IOA_Data = 0x0000; */
	RS=1;
	RW=0;
	E=1;
	P0_Lowbyte=Dispdata;
	delay(5);            //在数据写入的时候加入适当的延时
	E=0;
	delay(5);
}
/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{  
   delay(2000);
   write_com(0x30);       //选择基本指令集,选择8bit数据流
   delay(10);  
   write_com(0x0c);       //开显示(无游标、不反白)
   delay(10);
   write_com(0x01);       //清除显示,并且设定地址指针为00H
   delay(500);
   write_com(0x02);       /*DDRAM地址归位*/ 
   delay(500);
   write_com(0x80);       //设置DDRAM地址
   delay(10); 
   write_com(0x10);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
   delay(0);
}
/*------------------自定义一个字符代码(ball)--------------------------*/
void CGRAM()
{    
     int i;
     write_com(0x30);  
     write_com(0x40);    //设定CGRAM地址
     for(i=0;i<16;i++)
     {
         write_data(ball[i*2]);
         write_data(ball[i*2+1]);
         *P_Watchdog_Clear=0x0001;
     }
} 
/*------------------显示字符串--------------------------*/
void hzkdis(const unsigned char *s)
{  
   while(*s>0)
   {  write_data(*s);
      s++;
      delay(50);
      *P_Watchdog_Clear=0x0001;
   }
}
/*------------------首屏显示--------------------------*/
void ceshi()
{
 write_com(0x01);//清除显示,并且设定地址指针为00H
 delay(5);
 write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
 hzkdis("单工无线呼叫系统"); 

 write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
 hzkdis("YM12864R点阵液晶");
 
 write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
 hzkdis("作者");
 write_com(0x8a);
 write_data(0x3a);
 write_com(0x8b);
 hzkdis("王晓娣");
 write_com(0x9A);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
 hzkdis("陈国良");
 write_com(0x9e);
 hzkdis("张健");
}
/*------------------显示图片------------------------*/
void Disp_Img(const unsigned char *img)
{  
   unsigned int j=0;
   unsigned char x,y,i;
       for(i=0;i<9;i+=8)
       for(y=0;y<32;y++) /*上下两个半屏对接显示*/
        for(x=0;x<8;x++)
         {  
            write_com(0x36);//功能设置---8BIT控制界面,扩充指令集
            write_com(y+0x80);        //行地址
            write_com(x+0x80+i);     //列地址
            write_com(0x30);
            write_data(img[j++]);
            write_data(img[j++]);
            *P_Watchdog_Clear=0x0001;
         }            
}
/*------------------显示图片------------------------*/
void Disp_Img1(const unsigned char *img1)
{  
   unsigned int j1=0;
   unsigned char x1,y1,i1;
       for(i1=0;i1<9;i1+=8)
       for(y1=0;y1<32;y1++)  /*上下两个半屏对接显示*/
        for(x1=0;x1<4;x1++)
         {  
		    write_com(0x36);//功能设置---8BIT控制界面,扩充指令集
            write_com(y1+0x80);        //行地址
            write_com(x1+0x80+i1);     //列地址
            write_com(0x30);
            write_data(img1[j1++]);
            write_data(img1[j1++]);
            *P_Watchdog_Clear=0x0001;
         }        
}
/*------------------清整个GDRAM空间----------------------------*/
void clrgdram()
{
        unsigned char x,y;
        for(y=0;y<64;y++)
         for(x=0;x<16;x++)
         {  
            write_com(0x34);
            write_com(y+0x80);     //行地址
            write_com(x+0x80);     //列地址
            write_com(0x30);
            write_data(0x00);
            write_data(0x00);
            *P_Watchdog_Clear=0x0001;
         }
}
/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/
void lcdfill(const unsigned char disdata)
{ 
        unsigned char x,y;
        for(y=0;y<32;y++)
         for(x=0;x<16;x++)
         {  write_com(0x36);
            write_com(y+0x80);     //行地址
            write_com(x+0x80);     //列地址
            write_com(0x30);
            write_data(disdata);
            write_data(disdata);
            *P_Watchdog_Clear=0x0001;
         }
        write_com(0x34);                            
        write_com(0x36);
}
/*------------------清屏命令--------------------------*/  
void clrscreen()
{ 
   write_com(0x01);
   delay(10);
}  
/*------------------诗--------------------------*/
void gushi_display()
{  
   write_com(0x30);
   clrscreen();  
   write_com(0x80+FIRST_ADDR);
   hzkdis("1 2 3 4 5 ,");
   write_com(0x90+FIRST_ADDR);
   hzkdis("上山打老虎。");
   write_com(0x88+FIRST_ADDR);
   hzkdis("老虎没打着,");
   write_com(0x98+FIRST_ADDR);
   hzkdis("打着小松鼠。");
   write_com(0xb2+FIRST_ADDR);
   hzkdis("蓝水天下");
   write_com(0xa9+FIRST_ADDR);
   hzkdis("我的自由空间");
} 
int main()
{
   unsigned char i,j; 
   /*unsigned int Fosc_CLK,CPU_CLK;  
    Fosc_CLK = Fosc_CLK_RATE; 
    CPU_CLK = CPU_CLK_RATE; 
    *P_SystemClock = Fosc_CLK|CPU_CLK; */
    *P_IOA_Dir = 0xFFFF;                 
    *P_IOA_Attrib = 0xFFFF; 
    *P_IOA_Data = 0x0000; 
    PSB=1; 
   RES=0;
   delay(100);
   RES=1;
   while(1)
   { 
   	  *P_Watchdog_Clear=0x0001;
      RW=0;
      lcdreset();                   //初始化LCD屏  
      CGRAM();       
      ceshi();                      //显示测试字样
      delay(10000);
      
    
      clrgdram();
      clrscreen();                  //清屏
      Disp_Img(phone);              //调入一幅图画
      for(i=0;i<5;i++)
      {
         write_com(0x92);
         hzkdis("))))");
         delay(1700);
         write_com(0x92);
         hzkdis("    ");
         delay(90);
         *P_Watchdog_Clear=0x0001;
      }
      Disp_Img(phonejian);          //调入一幅图画
      write_com(0x82);
      hzkdis("已接通");
      delay(10000); 
      write_com(0x82);
	  hzkdis("      ");  
                       
      lcdfill(0xff);               //显示全开
      delay(20000);           
    
      
      gushi_display();             //显示诗
      clrgdram();

      clrscreen();                  //清屏     
      write_com(0x87);          //调用自定义的CGRAM的代码
      write_data(0x00);
      write_data(0x00);
	  delay(20000);

      clrscreen();
	  write_com(0x96);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
	  
	  write_com(0x8d);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
     
      write_com(0x9c);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
      
	  write_com(0x8b);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
      
      write_com(0x92);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
     
	  write_com(0x81);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
      
	  write_com(0x90);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
    
	  write_com(0x89);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
    
	  write_com(0x9a);
      write_data(0x00);
      write_data(0x00);
      delay(5000);
	  clrscreen();                  //清屏     
      
	  write_com(0x8b);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
     
	  write_com(0x94);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
    
	  write_com(0x85);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
    
	  write_com(0x96);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
    
	  write_com(0x8f);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
  
	  write_com(0x9e);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
     
	  write_com(0x8d);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
    
	  write_com(0x94);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
  
	  write_com(0x83);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
	  clrscreen();                  //清屏     
  
	  write_com(0x92);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
   
	  write_com(0x89);
      write_data(0x00);
      write_data(0x00);
	  delay(20000);
	  clrscreen();                  //清屏     
    
	  write_com(0x98);
      write_data(0x00);
      write_data(0x00);
	  delay(5000);
           
             
      gushi_display(); 
      delay(6000);
      for(j=0;j<8;j++)            //字符循环左移
      {
        write_com(0x18);  
        delay(20000);
        *P_Watchdog_Clear=0x0001;
      } 
      clrgdram();
      clrscreen();                  //清屏
      Disp_Img1(pig);              //调入一幅图画
	  delay(20000);
	   clrgdram();
       clrscreen();                  //清屏   
       gushi_display(); 
       delay(6000);   
       write_com(0x36);        
       write_com(0x04);          //第一行反白显示
       delay(20000);
       write_com(0x04);          //第一行恢复正常
       delay(20000);
       write_com(0x05);          //第二行反白显示
       delay(20000);
       write_com(0x05);          //第二行恢复正常
       delay(20000);
          
       write_com(0x03);         //垂直滚动屏幕的内容
       write_com(0x60);
       delay(20000);  
       *P_Watchdog_Clear=0x0001; 
   }
   return(0);
}

⌨️ 快捷键说明

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