pic的第一個(gè)測(cè)試程序
昨天拿到板子,焊接完畢。用i/o控制繼電器,發(fā)現(xiàn)不好用,馬上查三極管,果然畫(huà)圖的時(shí)候把封裝搞錯(cuò)了,幸運(yùn)的是直接顛倒焊接就行,剛畢業(yè)的時(shí)候犯過(guò)這樣的錯(cuò)誤,沒(méi)想到現(xiàn)在還犯。問(wèn)題1解決。
調(diào)試12864液晶,采用st7920的12864,串行方式。從51移植過(guò)來(lái)的,但死活不顯示,檢查硬件連接沒(méi)有問(wèn)題,程序上調(diào)整時(shí)序也不行,下午的時(shí)候看看網(wǎng)上的例子,發(fā)現(xiàn)一個(gè)寄存器ADCON1,仔細(xì)18f2550手冊(cè),才知道i/o需要設(shè)置成數(shù)字i/o,因?yàn)槲矣玫膇/o第二功能正好是ad的輸入
設(shè)置成0x0f之后,顯示ok,上個(gè)測(cè)試程序
#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的讀/寫(xiě)控制口
#defineSCLKRA2//定義LCD的使能口
#defineSIDRA1//定義通信方式控制口
#defineCSRA0//定義復(fù)位口
#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口設(shè)置函數(shù)
voidIO_init()
{
TRISA=0X00;//設(shè)置A口為輸出
TRISB=0X00;//設(shè)置A口為輸出
//TRISD=0X00;//設(shè)置D口為輸出
ADCON1=0X0f;//設(shè)置A口為普通I/O口
TRISC=0X00;
}
/******************************************************************************************
*函數(shù)名稱:Lcd_init
*功能描述:初始化LCD
*參數(shù):參數(shù)名稱:輸入/輸出?類型描述
*
*返回值:
*作者:
*創(chuàng)建日期:2008-12-19
*全局變量:
*全局靜態(tài)變量:
*局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
*當(dāng)前版本:修改人:修改日期:
*修改說(shuō)明:
******************************************************************************************/
voidLcd_Init(void)
{
Delaynms(200);//啟動(dòng)等待,等LCM講入工作狀態(tài)
CS=1;
Write_Char(0,0x30);//8位介面,基本指令集
Write_Char(0,0x0c);//顯示打開(kāi),光標(biāo)關(guān),反白關(guān)
Write_Char(0,0x01);//清屏,將DDRAM的地址計(jì)數(shù)器歸零
LED1=0;
}
/******************************************************************************************
*函數(shù)名稱:Write_char
*功能描述:寫(xiě)指令或數(shù)據(jù)
*參數(shù):參數(shù)名稱:輸入/輸出?類型描述
*
*返回值:
*作者:
*創(chuàng)建日期:2006-12-19
*全局變量:
*全局靜態(tài)變量:
*局部靜態(tài)變量:
*----------------------------------------修改歷史------------------------------------------
*當(dāng)前版本:修改人:修改日期:
*修改說(shuō)明:
******************************************************************************************/
voidWrite_Char(unsignedcharstart,unsignedcharddata)
{
unsignedcharstart_data,Hdata,Ldata;
if(start==0)
start_data=0xf8;//寫(xiě)指令
else
start_data=0xfa;//寫(xiě)數(shù)據(jù)
Hdata=ddata&0xf0;//取高四位
Ldata=(ddata<<4)&0xf0;//取低四位
Send_Byte(start_data);//發(fā)送起始信號(hào)
Delaynms(8);//延時(shí)是必須的
Send_Byte(Hdata);//發(fā)送高四位
Delaynms(3);//延時(shí)是必須的
Send_Byte(Ldata); //發(fā)送低四位