pic的第一个测试程序
扫描二维码
随时随地手机看文章
昨天拿到板子,焊接完毕。用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);
//Configword2
__CONFIG(2,VREGEN&PWRTDIS&BOREN&BORV20&WDTDIS&WDTPS32K);
//Configword3
__CONFIG(3,PBDIGITAL&LPT1DIS&MCLREN);
//Configword4
__CONFIG(4,XINSTDIS&STVREN&LVPDIS&ICPORTDIS&DEBUGDIS);
//Configword5,6and7(protectionconfiguration)
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
#defineBKRA3//定义LCD的读/写控制口
#defineSCLKRA2//定义LCD的使能口
#defineSIDRA1//定义通信方式控制口
#defineCSRA0//定义复位口
#defineLED1RC1
#defineLED2RC0
#definerelay1RB4
#definerelay2RB5
#definex10x80
#definex20x88
#definey0x80
#definecomm0
#definedat1
unsignedcharconstnum_lcd[]={"0123456789:.-"};
unsignedcharconstready[]="ASDFGHJKJ";
voidIO_init();
voidLcd_Init(void);
voidWrite_Char(unsignedcharstart,unsignedcharddata);
voidSend_Byte(unsignedcharbbyte);
voidDelaynms(unsignedintdi);
voidClr_Scr(void);
voidLCD_Set_XY(unsignedcharX,unsignedcharY);
voidLCD_Write_String(unsignedcharX,unsignedcharY,unsignedchar*s);
voidLCD_Write_Number(unsignedchars);
voidDisplay_Img(unsignedcharconst*img);
//voidWr_Lcd(unsignedchardat_comm,unsignedcharcontent);
//-------------------------------------------
//主程序
voidmain()
{
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口设置函数
voidIO_init()
{
TRISA=0X00;//设置A口为输出
TRISB=0X00;//设置A口为输出
//TRISD=0X00;//设置D口为输出
ADCON1=0X0f;//设置A口为普通I/O口
TRISC=0X00;
}
/******************************************************************************************
*函数名称:Lcd_init
*功能描述:初始化LCD
*参数:参数名称:输入/输出?类型描述
*
*返回值:
*作者:
*创建日期:2008-12-19
*全局变量:
*全局静态变量:
*局部静态变量:
*----------------------------------------修改历史------------------------------------------
*当前版本:修改人:修改日期:
*修改说明:
******************************************************************************************/
voidLcd_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
*全局变量:
*全局静态变量:
*局部静态变量:
*----------------------------------------修改历史------------------------------------------
*当前版本:修改人:修改日期:
*修改说明:
******************************************************************************************/
voidWrite_Char(unsignedcharstart,unsignedcharddata)
{
unsignedcharstart_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); //发送低四位