pic的第一个测试程序

2019-04-15 13:34发布

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