|
- //按鍵key1 設(shè)置紅燈時(shí)間
- 按鍵key2 設(shè)置綠燈時(shí)間
- 按鍵key3設(shè)置黃燈時(shí)間
- #include
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "stdlib.h"
- static int G=0,R=0,Y=0; //設(shè)置綠,紅,黃燈時(shí)間變量
- #include "lcd.h"
- #include "key.h"
- #include "time.h"
- //----------- 按鍵函數(shù)----------
- void scan_key1()
- {
- static u8 i,j;
- if(key1==0)
- {
- if(i==0)
- {
- j++;
- if(j>3)
- {
- i=1;j=0;
- R++;
- if(R>20)R=0;
- printf("key1 is inputed ");
- }
- }
- }
- else
- {
- i=j=0;
- }
- }
- void scan_key2()
- {
- static u8 i,j;
- if(key2==0)
- {
- if(i==0)
- {
- j++;
- if(j>3)
- {
- i=1;j=0;
- G++;
- if(G>20)G=0;
- printf("key2 is inputed. ");
- }
- }
- }
- else
- {
- i=j=0;
- }
- }
- void scan_key3()
- {
- static u8 i,j;
- if(key3==1)
- {
- if(i==0)
- {
- j++;
- if(j>3)
- {
- i=1;j=0;
- Y++;
- if(Y>20)Y=0;
- printf("key3 is inputed. ");
- }
- }
- }
- else
- {
- i=j=0;
- }
- }
- //各指示燈顯示秒數(shù)函數(shù)
- void LED_RED(u8 k)
- {
- LCD_ShowNum(120,55,k,2,16);
- }
- void LED_YELLOW(u8 k)
- {
- LCD_ShowNum(120,145,k,2,16);
- }
- void LED_GREEN(u8 k)
- {
- LCD_ShowNum(120,235,k,2,16);
- }
- //-----定時(shí)設(shè)置函數(shù)-------
- void LED_SET_GREEN(u8 k)
- {
- LCD_ShowNum(160,235,k,2,16);
- }
- void LED_SET_YELLOW(u8 k)
- {
- LCD_ShowNum(160,145,k,2,16);
- }
- void LED_SET_RED(u8 k)
- {
- LCD_ShowNum(160,55,k,2,16);
- }
- //-----定時(shí)器中斷函數(shù)---掃描按鍵和顯示設(shè)定值用----
- void TIM3_IRQHandler(void)
- {
- if(TIM3->SR&0x0001)
- {
- scan_key1();
- scan_key2();
- scan_key3();
- LED_SET_RED(R);
- LED_SET_GREEN(G);
- LED_SET_YELLOW(Y);
- }
- TIM3->SR=~(1<<0);
- }
- //------主函數(shù)-----------
- int main(void)
- {
- u16 code; //TFT驅(qū)動芯片代號
- int i;
- Stm32_Clock_Init(9);
- delay_init(72);
- uart_init(72,9600);
- printf("uart is ok. ");
- Timer_init(300,7199); //定時(shí)器初始化 設(shè)定溢出時(shí)間是 30ms
- printf("time_init is ok. ");
- LCD_Init(); //TFT-LCD初始化
- printf("lcd_init is ok.");
- key_init(); //按鍵I/O口設(shè)置初始化
- printf("key_init is ok.");
- JTAG_Set(JTAG_SWD_DISABLE); //關(guān)閉JTAG調(diào)試器
- code=LCD_ReadReg(0x0000);
- delay_ms(500);
- printf("deiver code is %ld",code); //讀取驅(qū)動芯片型號是發(fā)送到串口
- LCD_Fill(30,200,100,270,BLACK);
- LCD_Fill(30,110,100,180,BLACK);
- LCD_Fill(30,20,100,90,BLACK);
- LCD_ShowString(110,15,"Show");
- LCD_ShowString(110,30,"Time");
- LCD_ShowString(160,15,"Set ");
- LCD_ShowString(160,30,"Time");
- LED_GREEN(0);
- LED_YELLOW(0);
- LED_RED(0);
- while(1)
- {
- for(i=G;i>=0;i--) //綠燈控制
- {
- LED_GREEN(i);
- LCD_Fill(30,200,100,270,GREEN);
- delay_ms(1000);
- LCD_Fill(30,200,100,270,BLACK);
- delay_ms(1000);
- }
- for(i=Y;i>=0;i--) //黃燈控制
- {
- LED_YELLOW(i);
- LCD_Fill(30,110,100,180,YELLOW);
- delay_ms(1000);
- LCD_Fill(30,110,100,180,BLACK);
- delay_ms(1000);
- }
- for(i=R;i>=0;i--) //紅燈控制
- {
- LED_RED(i);
- LCD_Fill(30,20,100,90,RED);
- delay_ms(1000);
- LCD_Fill(30,20,100,90,BLACK);
- delay_ms(1000);
- }
- }
- }
- //-------各類庫函數(shù)省略---------
復(fù)制代碼
stm32簡易紅綠燈設(shè)計(jì)
|
|