zoukankan      html  css  js  c++  java
  • pic的第一个测试程序

     昨天拿到板子,焊接完毕。用i/o控制继电器,发现不好用,马上查三极管,果然画图的时候把封装搞错了,幸运的是直接颠倒焊接就行,刚毕业的时候犯过这样的错误,没想到现在还犯。问题1解决。
    调试12864液晶,采用st7920的12864,串行方式。从51移植过来的,但死活不显示,检查硬件连接没有问题,程序上调整时序也不行,下午的时候看看网上的例子,发现一个寄存器ADCON1,仔细18f2550手册,才知道i/o需要设置成数字i/o,因为我用的i/o第二功能正好是ad的输入
    设置成0x0f之后,显示ok,上个测试程序

    #include<htc.h>
    __CONFIG(1, USBPLL & IESODIS & FCMDIS & HSPLL & CPUDIV1 & PLLDIV5);
    // Config word 2
    __CONFIG(2, VREGEN & PWRTDIS & BOREN & BORV20 & WDTDIS & WDTPS32K);
    // Config word 3
    __CONFIG(3, PBDIGITAL & LPT1DIS & MCLREN);
    // Config word 4
    __CONFIG(4, XINSTDIS & STVREN & LVPDIS & ICPORTDIS & DEBUGDIS);
    // Config word 5, 6 and 7 (protection configuration)
    __CONFIG(5, UNPROTECT);
    __CONFIG(6, UNPROTECT);
    __CONFIG(7, UNPROTECT);      
    
    
    
    #define BK RA3                    //定义LCD的读/写控制口
    #define SCLK   RA2                    //定义LCD的使能口
    #define SID RA1                    //定义通信方式控制口
    #define CS RA0                    //定义复位口
    #define LED1 RC1
    #define LED2 RC0
    #define relay1 RB4
    #define relay2 RB5
    #define x1    0x80
    #define x2    0x88
    #define y     0x80
    #define comm  0
    #define dat   1
    
    unsigned char const num_lcd[]={"0123456789 :.-"};
    
    unsigned char const ready[]="ASDFGHJKJ";
    void IO_init();
    void Lcd_Init(void);
    void Write_Char(unsigned char start, unsigned char ddata);
    void Send_Byte(unsigned char bbyte);
    void Delaynms(unsigned int di);
    void Clr_Scr(void);
    void LCD_Set_XY( unsigned char X, unsigned char Y );
    void LCD_Write_String(unsigned char X,unsigned char Y,unsigned char *s);
    void LCD_Write_Number(unsigned char s);
    void Display_Img(unsigned char const *img);
    //void Wr_Lcd(unsigned char dat_comm,unsigned char content);
    //-------------------------------------------
    //主程序
    void main()
    {
       IO_init();
       LED1=1;
       LED2=1;
       BK=0;
       relay1=0;
       relay2=0;
       
       Lcd_Init();
       Delaynms(100);
       LCD_Write_String(1,1,ready);
       LCD_Set_XY(3, 0);
       LCD_Write_Number(1);
       while(1)
         {
           
         }
    }
    
    //-------------------------------------------
    //I/O口设置函数
    void IO_init()
    {
      TRISA=0X00;                       //设置A口为输出
      TRISB=0X00;                       //设置A口为输出
      //TRISD=0X00;                       //设置D口为输出
      ADCON1=0X0f;                      //设置A口为普通I/O口
      TRISC=0X00;
    }
    
    
    /******************************************************************************************
    * 函数名称    :Lcd_init
    * 功能描述    :初始化LCD 
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2008-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Lcd_Init(void)	
    {
    	Delaynms(200); //启动等待,等LCM讲入工作状态
      	CS=1;
      	Write_Char(0,0x30);  //8 位介面,基本指令集
      	Write_Char(0,0x0c);  //显示打开,光标关,反白关
      	Write_Char(0,0x01);  //清屏,将DDRAM的地址计数器归零  
        LED1 = 0;
    }
    
    /******************************************************************************************
    * 函数名称    :Write_char
    * 功能描述    :写指令或数据
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Write_Char(unsigned char start, unsigned char ddata) 
    {
    	unsigned char start_data,Hdata,Ldata;
      	if(start==0) 
    		start_data=0xf8;	 //写指令
        else    
        	start_data=0xfa;  //写数据
      
      	Hdata=ddata&0xf0;		  //取高四位
      	Ldata=(ddata<<4)&0xf0;  //取低四位
      	Send_Byte(start_data);	  //发送起始信号
     	Delaynms(8); //延时是必须的
      	Send_Byte(Hdata);	      //发送高四位
     	Delaynms(3);  //延时是必须的
      	Send_Byte(Ldata);		  //发送低四位
     	Delaynms(3);  //延时是必须的
    }
    
    /******************************************************************************************
    * 函数名称    :Send_byte
    * 功能描述    :发送一个字节
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Send_Byte(unsigned char bbyte) 
    {
    	unsigned char i,t;
     	
     	for(i=0;i<8;i++)
       	{
    		if((bbyte)&0x80)
       		    SID=1; //取出最高位
       		else
    			SID=0;
     		SCLK=1;
    //		t = 0x06; 
    //		while(t--);   //延时 lcd读取数据
       		SCLK=0;
       		bbyte <<= 1; //左移
       	}   
    }
    
    /******************************************************************************************
    * 函数名称    :Delaynms
    * 功能描述    :延时
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Delaynms(unsigned int di) 
    {
    	unsigned int da,db;
     	for(da=0;da<di;da++)
       	for(db=0;db<10;db++);
    }
    
    /******************************************************************************************
    * 函数名称    :Clr_Scr
    * 功能描述    :清屏函数
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Clr_Scr(void)//清屏函数
    {
    	Write_Char(0,0x01);
    }
    
    /******************************************************************************************
    * 函数名称    : LCD_set_xy
    * 功能描述    :设置LCD显示的起始位置,X为行,Y为列
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void LCD_Set_XY( unsigned char X, unsigned char Y )
    {	
        unsigned char address;
    	switch(X)
    	{
    		case 0: 
    			address = 0x80 + Y; 
    			break;    
        	case 1: 
        		address = 0x80 + Y; 
        		break; 
    		case 2: 
    			address = 0x90 + Y; 
    			break; 
       	 	case 3: 
       	 		address = 0x88 + Y; 
       	 		break;
    		case 4: 
    			address = 0x98 + Y; 
    			break; 
    		default:
    			address = 0x80 + Y; 
    			break;
    	}
        Write_Char(0, address);
    }
    
    /******************************************************************************************
    * 函数名称    :LCD_Write_string
    * 功能描述    :中英文字符串显示函数
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void LCD_Write_String(unsigned char X,unsigned char Y,unsigned char *s)
    {	
    	LCD_Set_XY( X, Y );
        
        while (*s) 
        {
    		Write_Char( 1, *s );
    	    s ++;
    		Delaynms(1);
    	}
    }
    
    /******************************************************************************************
    * 函数名称    :LCD_Write_number
    * 功能描述    :数字显示函数
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void LCD_Write_Number(unsigned char s)//	数字显示函数
    {	
    	Write_Char(1,num_lcd[s]);
    	Delaynms(5);
    }
    
    
    /******************************************************************************************
    * 函数名称    :img_disp
    * 功能描述    :显示图形
    * 参数        :  参数名称:	输入/输出?	类型		描述
    * 
    * 返回值      :
    * 作者        :
    * 创建日期    :2006-12-19
    * 全局变量    :
    * 全局静态变量:
    * 局部静态变量:
    *----------------------------------------修改历史------------------------------------------
    * 当前版本    : 			 修改人:                  修改日期:
    * 修改说明    :
    ******************************************************************************************/
    void Display_Img(unsigned char const *img)
    {
      	unsigned char i,j;
      	for(j=0;j<32;j++)
      	{
        	for(i=0;i<8;i++)
        	{
          	Write_Char(comm,0x34);
    		Delaynms(10);
          	Write_Char(comm,y+j);
    		Delaynms(10);
          	Write_Char(comm,x1+i);
    		Delaynms(10);
          	Write_Char(comm,0x30);
    		Delaynms(10);
          	Write_Char(dat,img[j*16+i*2]);
    		Delaynms(10);
          	Write_Char(dat,img[j*16+i*2+1]);
    		Delaynms(10);
        	}
      	}
      	for(j=32;j<64;j++)
      	{
        	for(i=0;i<8;i++)
        	{
          	Write_Char(comm,0x34);
    		Delaynms(10);
          	Write_Char(comm,y+j-32);
    		Delaynms(10);
          	Write_Char(comm,x2+i);
    		Delaynms(10);
          	Write_Char(comm,0x30);
    		Delaynms(10);
          	Write_Char(dat,img[j*16+i*2]);
    		Delaynms(10);
          	Write_Char(dat,img[j*16+i*2+1]);
    		Delaynms(10);
        	}
      	}
    	Delaynms(10);
      	Write_Char(comm,0x36);
    }


     

  • 相关阅读:
    css 讲浮动,haslayout,BFC的文章
    css 给inline和inline-block元素设置margin和padding
    css inline元素和inline-block元素之间缝隙产生原因和解决办法
    js 匿名函数立即执行问题
    css 解决图片下小空隙问题
    css BFC布局及用处
    css 单行/多行文字垂直居中问题
    js柯里化
    js 回调函数理解与应用
    js 四种调用模式和this的关系总结
  • 原文地址:https://www.cnblogs.com/pulan/p/2921607.html
Copyright © 2011-2022 走看看