|
- /*-----------------------------------------------------
- ----D---
- | |
- G| |C
- | |
- ----F---
- | |
- E| |B
- | |
- ----A--- 、H
- //-----------------------------------------------------*/
- #include <N76E616.h>
- #include "Typedef.h"
- #include "Define.h"
- #include "Common.h"
- #include "Delay.h"
- #include "SFR_Macro.h"
- #define uchar unsigned char
- #define COM0 0x01
- #define COM1 0x02
- #define COM2 0x04
- #define COM3 0x08
- uchar num0,num1;
- bit BIT_TMP;
- /**************************************段码表**********************************************************
- * MCU Pin: COM0 COM1 COM2 COM3 SEG0 SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 SEG8 SEG9 SEG10 SEG11 SEG12
- * MCU Pin: P10 P11 P12 P13 P40 P41 P42 P43 P44 P45 P46 P14 P15 P16 P17 P20 P21
- * LCD Pin: 4 3 2 1 17 16 15 14 13 12 11 10 9 8 7 6 5
- * -----------------------------------------------------------------------------------------------------
- * COM0 COM0 1E 1A 2E 2A 3E 3A 4E 4A 5E 5A OFF : LOCK
- * COM1 COM1 1F 1B 2F 2B 3F 3B 4F 4B 5F 5B ON FRI PAUSE
- * COM2 COM2 1G 1C 2G 2C 3G 3C 4G 4C 5G 5C EVENT THU SCENT
- * COM3 COM3 MON 1D TUE 2D SAT 3D SUN 4D 5H 5D WED WORK
- *******************************************************************************************************/
- void Show_Pattern_In_LCD(uchar DISwei,uchar DISduan)
- {
- uchar segABCD=0,segEFGH=0;
- LCDSEG0 = SET_BIT0 | SET_BIT1 | SET_BIT2 | SET_BIT3 | SET_BIT4 | SET_BIT5 | SET_BIT6 | SET_BIT7;//使能SEG0EN-SEG7EN
- LCDSEG1 = SET_BIT0 | SET_BIT1 | SET_BIT2 | SET_BIT3 | SET_BIT4 ;//使能SEG8EN-SEG12EN
- switch(DISwei)//数码管位显示设置
- {
- case 1:
- segABCD = 1;
- segEFGH = 0;
- break;
- case 2:
- segABCD = 3;
- segEFGH = 2;
- break;
- case 3:
- segABCD = 5;
- segEFGH = 4;
- break;
- case 4:
- segABCD = 7;
- segEFGH = 6;
- break;
- case 5:
- segABCD = 9;
- segEFGH = 8;
- break;
- case 6:
- segABCD = 11;
- segEFGH = 10;
- break;
- case 7:
- segABCD = 12;
- segEFGH = 12;
- break;
- default:
- break;
- }
- LCDPTR = segABCD; //先设置将被点亮的ABCD地址赋值给LCD数据指针
- switch(DISduan) //设置将被点亮的ABCD数据像素COM0-COM3
- {
- case 0:
- LCDDAT = COM0 | COM1 | COM2 | COM3;
- break;
- case 1:
- LCDDAT = COM1 | COM2;
- break;
- case 2:
- LCDDAT = COM0 | COM2 | COM3;
- break;
- case 3:
- LCDDAT = COM0 | COM1 | COM2 | COM3;
- break;
- case 4:
- LCDDAT = COM1 | COM2;
- break;
- case 5:
- LCDDAT = COM0 | COM1 | COM3;
- break;
- case 6:
- LCDDAT = COM0 | COM1 | COM3;
- break;
- case 7:
- LCDDAT = COM1 | COM2 | COM3;
- break;
- case 8:
- LCDDAT = COM0 | COM1 | COM2 | COM3;
- break;
- case 9:
- LCDDAT = COM0 | COM1 | COM2 | COM3;
- break;
- default:
- break;
- }
- LCDPTR = segEFGH; //先设置将被点亮的EFGH地址赋值给LCD数据指针
- switch(DISduan) //设置将被点亮的EFGH数据像素COM0-COM3
- {
- case 0:
- LCDDAT = COM0 | COM2;
- break;
- case 1:
- LCDDAT = 0;
- break;
- case 2:
- LCDDAT = COM0 | COM1;
- break;
- case 3:
- LCDDAT = COM1;
- break;
- case 4:
- LCDDAT = COM1 | COM2;
- break;
- case 5:
- LCDDAT = COM1 | COM2;
- break;
- case 6:
- LCDDAT = COM0 | COM1 | COM2;
- break;
- case 7:
- LCDDAT = 0;
- break;
- case 8:
- LCDDAT = COM0 | COM1 | COM2;
- break;
- case 9:
- LCDDAT = COM1 | COM2;
- break;
- default:
- break;
- }
- }
- //-----------------------------------------------------------------------------------
- void LCD_Initial(void) //LCD及IO初始化
- {
- P1_Input_Mode(PIN_0);//P10 Input-Only
- P1_Input_Mode(PIN_1);//P11 Input-Only
- P1_Input_Mode(PIN_2);//P12 Input-Only
- P1_Input_Mode(PIN_3);//P13 Input-Only
- P1_Input_Mode(PIN_4);//P14 Input-Only
- P1_Input_Mode(PIN_5);//P15 Input-Only
- P1_Input_Mode(PIN_6);//P16 Input-Only
- P1_Input_Mode(PIN_7);//P17 Input-Only
- P2_Input_Mode(PIN_0);//P20 Input-Only
- P2_Input_Mode(PIN_1);//P21 Input-Only
- P4_Input_Mode(PIN_0);//P40 Input-Only
- P4_Input_Mode(PIN_1);//P41 Input-Only
- P4_Input_Mode(PIN_2);//P42 Input-Only
- P4_Input_Mode(PIN_3);//P43 Input-Only
- P4_Input_Mode(PIN_4);//P44 Input-Only
- P4_Input_Mode(PIN_5);//P45 Input-Only
- P4_Input_Mode(PIN_6);//P46 Input-Only
- LCDCON = 0x02; //VLCD=1VDD,1/4占空比,1/3偏压,150kΩ偏压电阻梯的总阻值越小驱动能力越强。
- LCDCLK = 0x13; //选择LXT作为液晶时钟源/或0x22
- LCDCON |= SET_BIT7; //LCDEN=1,打开LCD驱动
-
- LCDSEG0 = 0x00; //清屏
- LCDSEG1 = 0x00;
- LCDSEG2 = 0x00;
- LCDSEG3 = 0x00;
- TMOD=0x00;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void main (void)
- {
- Set_All_GPIO_Quasi_Mode0;//全局准双向
- LCD_Initial();
- System_Clock_Select(E_LXTEN); //外部 32.768KHZ, LXT时钟
- //System_Clock_Select(E_LIRCEN);//内部 10KHZ
- while(1)
- {
- Show_Pattern_In_LCD(1,5);
- Show_Pattern_In_LCD(2,6);
- Show_Pattern_In_LCD(3,5);
- Show_Pattern_In_LCD(4,num0);
- Show_Pattern_In_LCD(5,num0);
- //Show_Pattern_In_LCD(6,3);
- //Show_Pattern_In_LCD(7,6);
- }
- }
- void timer0() interrupt 1
- {
- TH0 = (8192-5000)/32;
- TL0 = (8192-5000)%32;
- num0++;
- if(num0>9)
- {
- num0=0;
- num1++;
- if(num1>=9)
- {
- num1=0;
- }
- }
- }
复制代码 经过网上大神分享和新唐官方BSP,与自己手上实际的LCD做修改,亲测稳定可用;感兴趣的留下邮箱,分享源文件,欢迎交流!!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|