/******************************************************************************** * PIC18F14K50トレーニング基板使用 * Aitendo_7桁7SEG液晶の実験その1: PCB0112-1A0の表示テスト * * コントロールIC:HT1621 * * <制御ポート> * RA4 LCD_CS * RA5 LCD_WR * RC3 LCD_DAT * (READは使わない) * * 内蔵発振器:16MHz使用 * Tcy= 1/(16M/4)= 250nS * * オリジナル・ソース作成:サイト名:「じじいの電子実験室」(PSOC1-CY8C29666使用) * コメント追加+ソース変更:N.Ishii 2020/12/2 * 更新:2020/12/3 **********************************************************************************/ #include #include "LCD_PCB0112.h" #pragma config FOSC = IRC, PLLEN = ON, FCMEN = OFF #pragma config IESO = OFF, USBDIV = OFF, CPUDIV = NOCLKDIV #pragma config PWRTEN = OFF, BOREN = OFF, WDTEN = OFF #pragma config HFOFST = OFF, MCLRE = ON #pragma config STVREN = ON, BBSIZ = OFF, LVP = OFF #pragma config XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CPB = OFF #pragma config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF //******************* プロトタイプ *********************************** void delay_ms (int ms); void main(void){ int n,p,q; OSCCON = 0b11111111; // 16MHz internal clock UCONbits.USBEN = 0 ; // USBは使用しない /// アナログ入力と併用の、RB4/AN10((SWx),RB5/AN11(SW3)に該当する(今回は未使用) /// ANSELxビットを'0'にリセット、デジタルピンとして使用する ANSELHbits.ANS10 = 0; // RB4 digital input ANSELHbits.ANS11 = 0; // RB5 digital input TRISA= 0b00001111; // RA4(CS),RA5(WR) is Output TRISB= 0b10110000; // RB4,5,7 is Input RB6(SCKとして使用) is Output TRISC= 0; // RC is Output(RC3= DATA) /// 内部プルアップ設定 INTCON2bits.RABPU = 0; // プルアップ許可(これが無いとプルアップされない) WPUB = 0b10110000; // RB4,5,7 is Pull-Up LATCbits.LATC2= 0; // LED 消灯 LCD_WR_Hi; // write pin initial LCD_CS_Hi; // cs pin initial lcd_initial(); //disp on lcd_clr(); //display ram clear ///////// 表示テスト開始 //////////////////////////// /// 全セグメント+アイコン点灯 lcd_all_disp(); delay_ms(2000); lcd_clr(); /// 7セグ表示テスト for(p=0; p<=15 ;p++) { //0-f表示 for (n=0;n<=9;n++) { q= p+n; q= q & 0x0f; lcd_putnum(n,q); } delay_ms(1000); } delay_ms(2000); lcd_clr(); /// アイコン表示テスト 201203 lcd_low_bat_on(); delay_ms(1000); lcd_low_bat_off(); lcd_key_on(); delay_ms(1000); lcd_key_off(); lcd_tel_on(); delay_ms(1000); lcd_tel_off(); /// 「成功」文字表示 lcd_seikou_on(); LATCbits.LATC2= 1; // LED 点灯 while(1); } /***************************************************** * mS 単位の遅延 * XC8の場合、Fosc=16M時、__delay()の引数の限界は、49 * それを超える遅延が必要な場合に使用。 ******************************************************/ void delay_ms (int ms){ while(ms-- > 0)__delay_ms(1); }