|
楼主 |
发表于 2015-1-27 20:44:18
|
显示全部楼层
- #include <SN8P2711B.h>
- //5024端口定义
- #define MBI5024_OE FP54
- #define MBI5024_LE FP01
- #define MBI5024_CLK FP00
- #define MBI5024_SDI FP40
- //宏定义
- #define key_light 0x10
- #define key_mode 0x08
- #define u8 unsigned char
- #define u16 unsigned long
- #define u32 unsigned long long
- //变量声明
- u8 tmp8;
- u8 mode1Timer;
- u16 AutoTime;
- u8 autoMode ;
- u8 modeSelect;
- u8 lightMode; //亮度.3级
- u8 Trg; //按键定义的两个变量
- u8 Cont;
- u8 ReadData;
- //函数声明
- void IO_Setting(void);
- void Timer_Setting(void);
- void lighAjd(void);
- void init_screen(void);
- #define bit_test(var,bit) ((var)&(1<<(bit)))
- #define bit_set(var,bit) ((var)|=(1<<(bit)))
- #define bit_clear(var,bit) ((var)&=~(1<<(bit)))
- u8 mode1times;
- u8 mode2flag;
- u8 mode3flag;
- u8 mode3value;
- u8 keyflag;
- __asm
- {
- .data
- acc_buf ds 1
- pflag_buf ds 1
- }
- //主函数
- void main(void)
- {
- IO_Setting();
- Timer_Setting();
- FGIE = 1;
- //开机模式为1. 亮度最大.
- modeSelect = 1;
- MBI5024_OE = 0;
- lightMode = 0;
-
- lighAjd(); //调节亮度
-
- init_screen();
- mode1times =0;
-
- while(1)
- {
- next:
-
- WDTR = 0x5A;
-
- //按键读取
- if(keyflag >=1)
- {
- keyflag = 0;
- ReadData = P4^0xff; // 1
- Trg = ReadData & (ReadData ^ Cont); // 2
- Cont = ReadData; // 3
- }
-
-
- //模式1,流水灯
- if( mode1Timer >= 1 && modeSelect == 1)
- {
- mode1Timer = 0;
-
- MBI5024_CLK = 1; MBI5024_CLK = 0;
- MBI5024_LE = 1; MBI5024_LE = 0;
- mode1times++;
- if(mode1times >=128)
- {
- MBI5024_SDI ^=1;
- mode1times = 0;
- }
- }
-
- //模式按键
- if( key_mode & Trg )
- {
- bit_clear(Trg,3);
- autoMode = 0;
- modeSelect++;
-
- init_screen();
- mode2flag = 20;
- mode1Timer = 0;
-
- lighAjd();
- }
-
- //亮度按键
- if( key_light & Trg)
- {
- bit_clear(Trg,4);
- if( modeSelect ==3 ) goto next; //模式3的时候,是无效的
-
- lightMode++;
- if( lightMode==3) lightMode = 0;
-
- lighAjd();
- }
-
- //模式2, 暴闪
- if( modeSelect == 2 )
- {
-
- MBI5024_CLK = 1; MBI5024_CLK = 0;
-
- if( mode1Timer >= mode2flag) //开始是100,
- {
- MBI5024_SDI ^=1;
- mode2flag --;
- if( mode2flag ==0) mode2flag = 20;
- mode1Timer = 0;
-
- MBI5024_LE = 1; MBI5024_LE = 0;
- }
- }
-
- //模式3,呼吸灯
- if( modeSelect == 3)
- {
- MBI5024_CLK = 1; MBI5024_CLK = 0;
- MBI5024_LE = 1; MBI5024_LE = 0;
-
- if( mode1Timer>1)
- {
- mode1Timer = 0;
- if( mode3flag == 0)
- {
- mode3value--;
- if( mode3value<=30) mode3flag=1;
- }
- else
- {
- mode3value++;
- if( mode3value >= 254) mode3flag = 0;
- }
-
- FPWM0OUT = 1;
- TC0R = mode3value;
- }
-
- }
-
- //模式4,常亮
- if( modeSelect == 4)
- {
- MBI5024_CLK = 1; MBI5024_CLK = 0;
- MBI5024_LE = 1; MBI5024_LE = 0;
- }
-
- //模式5. 自动模式
- if( modeSelect == 5)
- {
- autoMode = 1;
- AutoTime = 0;
- modeSelect = 1;
- init_screen();
- }
-
- //模式6
- if( modeSelect == 6)
- {
- modeSelect = 1;
- }
-
- //模式7
-
-
- //开启了自动模式
- if( autoMode == 1)
- {
- if( AutoTime > 1000)
- {
- AutoTime = 0;
- modeSelect++;
- lighAjd();
- init_screen();
- }
- }
- }
- }
- //初始化第一次显示.
- void init_screen(void)
- {
- //1. 清除显示
- MBI5024_SDI = 0;
- for(tmp8=0;tmp8<128;tmp8++)
- {
- MBI5024_CLK = 1;
- MBI5024_CLK = 0;
- }
-
- MBI5024_LE = 1;
- MBI5024_LE = 0;
-
- //2.发送一个 1.
- MBI5024_SDI = 1;
- for( tmp8 =0;tmp8<modeSelect;tmp8++)
- {
- MBI5024_CLK = 1;
- MBI5024_CLK = 0;
- }
- MBI5024_LE = 1;
- MBI5024_LE = 0;
-
- //3.延时
- mode1Timer = 0;
- while( mode1Timer<100);
- }
- //调节亮度
- void lighAjd(void)
- {
- if( lightMode == 0)
- {
- FPWM0OUT = 0; //关闭PWM ,直接开启OE
- MBI5024_OE = 0;
- }
- else if( lightMode == 1)
- {
- FPWM0OUT = 1;
- TC0R = 128;
- }
- else if( lightMode == 2)
- {
- FPWM0OUT = 1;
- TC0R = 192;
- }
- }
-
-
- __interrupt ISR(void)
- {
-
- __asm
- {
- mov acc_buf,a // Push ACC to buffer
- mov a,pflag
- b0mov pflag_buf,a // Push PFLAG to buffer
- }
-
-
-
- //Timer1 10ms
- if(FTC1IRQ)
- {
- FTC1IRQ=0;
-
- mode1Timer++;
- AutoTime++;
- keyflag++;
- }
-
-
- __asm
- {
- mov a,pflag_buf
- b0mov pflag,a // Pop pflag_buf to pflag
- mov a,acc_buf // Pop acc_buf to acc
- }
- }
-
- //端口设置
- void IO_Setting(void)
- {
- P0M = 0x0F; //P0 Input-Output value
- P0UR = 0x03; //P0 pull up value
- P0 = 0X00; //P0 register value
- P4M = 0x07; //P4 Input-Output value
- P4UR = 0x19; //P4 pull up value
- P4CON = 0x00; //P4 Analog-Digital value
- P4 = 0X00; //P4 register value
- P5M = 0x18; //P5 Input-Output value
- P5UR = 0x18; //P5 pull up value
- P5 = 0X00; //P5 register value
- }
- //定时器设置
- //Timer0 PWM
- //Timer1 10ms
- void Timer_Setting(void)
- {
- TC0M = 0x71; //TC0M register value, Fcpu: 1.000000MHZ
- FTC0X8 = 0; //CLK source: Fcpu
- TC0C = 0x00; //TC0C register value, time: 200.000000us(5000.000000HZ)
- TC0R = 0x80; //TC0R register value
- FALOAD0 = 0;
- FTC0OUT = 0;
- FTC0CKS = 0;
- FPWM0OUT = 1; //PWM out enable
- FTC0ENB = 1; //TC0 enable
-
-
- TC1M = 0x04; //TC1M register value, Fcpu: 1.000000MHZ
- FTC1X8 = 0; //CLK source: Fcpu
- TC1C = 0xD9; //TC1C register value, time: 10.000000ms(100.000000HZ)
- TC1R = 0xD9; //TC1R register value
- FTC1IRQ = 0;
- FTC1IEN = 1; //TC1 Interrupt enable
- FTC1CKS = 0;
- FTC1ENB = 1; //TC1 enable
- }
复制代码 |
|