|

下圖led2波形密集處即開始進行鬧鐘的地方。
4個按鍵進行調(diào)整,+,—,定時或者定鬧鐘用;
寫了一下午寫好了,但還需要完善。
時鐘精度很高,一小時0.1s - 鬧鐘源程序
- /******************************************************************************/
- /* */
- /* RTX_EX2.C: A RTX-51 Application */
- /* */
- /******************************************************************************/
-
- #include <rtx51tny.h> /* RTX-51 tiny functions & defines */
- #include"reg51.h"
- #include"display.h"
-
-
-
- /******************************************************************************/
- /* Task 2 'job2': RTX-51 tiny starts this task with os_create_task (2) */
- /******************************************************************************/
- job0 () _task_ 0 {
-
- inint();
- os_create_task (1); /* start task 1 */
- os_create_task (2); /* start task 2 */
- os_create_task (3); /* start task 3 */
- while (1) { /* endless loop */
- led2=0;
- readkey();
- locktime();
- }
-
- }
-
- /******************************************************************************/
- /* Task 0 'job0': RTX-51 tiny starts execution with task 0 */
- /******************************************************************************/
- job1 () _task_ 1 {
-
-
- while (1) { /* endless loop */
- led0=~led0;
- os_wait (K_TMO, 100, 0); /* wait for timeout: 5 ticks */
- isr_send_signal(2);
-
- }
- }
-
- /******************************************************************************/
- /* Task 1 'job1': RTX-51 tiny starts this task with os_create_task (1) */
- /******************************************************************************/
- job2 () _task_ 2 {
- char event;
- while (1) { /* endless loop */
- event = os_wait (K_SIG | K_TMO, 1, 0);
- switch (event)
- {
- default: /* this never happens */
- break;
-
- case TMO_EVENT: /* time-out; 50 tick time-out */
- break;
-
- case SIG_EVENT: /* signal received */
- led1=~led1;
- timechange();
- display1();
- break;
- }
-
- lights();
- }
- }
-
-
-
- /******************************************************************************/
- /* Task 3 'job3': RTX-51 tiny starts this task with os_create_task (3) */
- /******************************************************************************/
- job3 () _task_ 3 {
-
- while (1) { /* endless loop */
- led3=~led3;
- os_wait (K_TMO, 17, 0);
-
- }
- }
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
-
- #define LED8 P3
-
-
- //4????????P10~P13
- #define KeyPort P0 //??????P10~P13
-
- //???????,?BRCLK=CPU_F???????????,?????????????
- #define baud 9600 //????????
- #define baud_setting (uint)((ulong)CPU_F/((ulong)baud)) //???????
- #define baud_h (uchar)(baud_setting>>8) //????
- #define baud_l (uchar)(baud_setting) //??
-
- //RS485????,CTR????RS485????????
- #define RS485_CTR1 P1|= BIT2; //?????,RS485????
- #define RS485_CTR0 P1&= ~BIT2; //?????,RS485????
-
- //2.8?TFT????????????
- #define RS_CLR P1 &= ~0x20 //RS??
- #define RS_SET P1|= 0x20 //RS??
-
- #define RW_CLR P1 &= ~0x40 //RW??
- #define RW_SET P1 |= 0x40 //RW??
-
- #define RD_CLR P1 &= ~0x80 //E??
- #define RD_SET P1 |= 0x80 //E??
-
- #define CS_CLR P1 &= ~BIT0 //CS??
- #define CS_SET P1 |= BIT0 //CS??
-
- #define RST_CLR P1 &= ~BIT3 //RST??
- #define RST_SET P1|= BIT3 //RST??
-
- #define LE_CLR P1 &= ~BIT1 //LE??
- #define LE_SET P1|= BIT1 //LE??
-
- //2.8?TFT?????????????
- #define PEN_CLR P2 &= ~BIT0 //PEN??,??????,Penirq????????????????
- #define PEN_SET P2|= BIT0 //PEN??
- #define PEN (P2 & 0x01) //P2.0????
-
- #define TPDO_CLR P2 &= ~BIT1 //TPDO??
- #define TPDO_SET P2 |= BIT1 //TPDO??
- #define TPDOUT ((P2IN>>1)&0x01) //P2.1????
-
- #define BUSY_CLR P2 &= ~BIT3 //BUSY??
- #define BUSY_SET P2 |= BIT3 //BUSY??
-
- #define TPDI_CLR P2 &= ~BIT4 //TPDI??
- #define TPDI_SET P2 |= BIT4 //TPDI??
-
- #define TPCS_CLR P2 &= ~BIT5 //TPCS??
- #define TPCS_SET P2 |= BIT5 //TPCS??
-
- #define TPCLK_CLR P2 &= ~BIT6 //TPCLK??
- #define TPCLK_SET P2 |= BIT6 //TPCLK??
-
- //??/12864??/1602??????,?????
- #define DataPort P0 //P4?????
-
- //12864/1602??????
- //#define RS_CLR P2 &= ~BIT5 //RS??
- //#define RS_SET P2 |= BIT5 //RS??
-
- //#define RW_CLR P2 &= ~BIT6 //RW??
- //#define RW_SET P2 |= BIT6 //RW??
-
- #define EN_CLR P2 &= ~0x80 //E??
- #define EN_SET P2 |= 0x80 //E??
-
- #define PSB_CLR P2 &= ~BIT0 //PSB??,????
- #define PSB_SET P2 |= BIT0 //PSB??,????
-
- //#define RST_CLR P5OUT &= ~BIT1 //RST??
- //#define RST_SET P5OUT |= BIT1 //RST??
-
- //12864?????
- #define CLEAR_SCREEN 0x01 //????:???AC??00H
- #define AC_INIT 0x02 //?AC???00H??????????
- #define CURSE_ADD 0x06 //?????????????????(??????,??????)
- #define FUN_MODE 0x30 //????:8??????
- #define DISPLAY_ON 0x0c //???,????,???????
- #define DISPLAY_OFF 0x08 //???
- #define CURSE_DIR 0x14 //??????:AC=AC+1
- #define SET_CG_AC 0x40 //??AC,???:00H~3FH
- #define SET_DD_AC 0x80 //??DDRAM AC
- #define FUN_MODEK 0x36 //????:8??????
-
- //????,TFT???
- #define White 0xFFFF //??????
- #define Black 0x0000
- #define Blue 0x001F
- #define Blue2 0x051F
- #define Red 0xF800
- #define Magenta 0xF81F
- #define Green 0x07E0
- #define Cyan 0x7FFF
- #define Yellow 0xFFE0
-
- //NRF2401?????
- #define RF24L01_CE_0 P1 &=~BIT5 //CE?P15
- #define RF24L01_CE_1 P1 |= BIT5
-
- #define RF24L01_CSN_0 P2 &=~BIT7 //CS?P27
- #define RF24L01_CSN_1 P2 |= BIT7
-
- #define RF24L01_SCK_0 P3 &=~BIT3 //SCK?P33
- #define RF24L01_SCK_1 P3 |= BIT3
-
- #define RF24L01_MISO_0 P3 &=~BIT2 //MISO?P32
- #define RF24L01_MISO_1 P3 |= BIT2
-
- #define RF24L01_MOSI_0 P3 &=~BIT1 //MOSI?P31
- #define RF24L01_MOSI_1 P3 |= BIT1
-
- #define RF24L01_IRQ_0 P1 &=~BIT4 //IRQ?P14
- #define RF24L01_IRQ_1 P1 |= BIT4
-
-
-
- //?????H1838???,????
-
- #define RED_L P1 &= ~BIT6 //????
- #define RED_H P1 |= BIT6 //????
-
-
- void delay_ms(uint x)
- {
- uchar i;
- for(i=10;i--;i>0);
- x--;
- }
-
- //***********************************************************************
- // ?????????
- //***********************************************************************
- void LCD_write_com(unsigned char com)
- {
- RS_CLR;
- RW_CLR;
- EN_SET;
- DataPort = com; //??????
- delay_ms(5);
- EN_CLR;
- }
-
- //***********************************************************************
- // ?????????
- //***********************************************************************
- void LCD_write_data(unsigned char date )
- {
- RS_SET;
- RW_CLR;
- EN_SET;
- DataPort = date; //??????
- delay_ms(5);
- EN_CLR;
- }
-
- //***********************************************************************
- // ???????
- //***********************************************************************
- void LCD_clear(void)
- {
- LCD_write_com(0x01); //?????
- delay_ms(5);
- }
-
- //***********************************************************************
- // ??????????
- //***********************************************************************
- void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
- {
-
- if (y == 0)
- {
- LCD_write_com(0x80 + x); //?????
- }
- else
- {
- LCD_write_com(0xC0 + x); //?????
- }
-
- while (*s)
- {
- LCD_write_data( *s);
- s ++;
- }
- }
-
- //***********************************************************************
- // ??????????
- //***********************************************************************
- void LCD_write_char(unsigned char x,unsigned char y,unsigned char date)
- {
-
- if (y == 0)
- {
- LCD_write_com(0x80 + x); //?????
- }
- else
- {
- LCD_write_com(0xC0 + x); //?????
- }
-
- LCD_write_data( date);
- }
-
- //***********************************************************************
- // ????????
- //***********************************************************************
- void LCD_init(void)
- {
- LCD_write_com(0x38); //??????
- delay_ms(5);
- LCD_write_com(0x08); //????
- delay_ms(5);
- LCD_write_com(0x01); //????
- delay_ms(5);
- LCD_write_com(0x06); //????????
- delay_ms(5);
- LCD_write_com(0x0C); //????????
- delay_ms(5);
- }
-
- //***********************************************************************
- // ?????????
- //***********************************************************************
- void LCD_Desk(void)
- {
- LCD_clear();
- LCD_write_str(0,0,"A:");
- LCD_write_str(0,1,"B:");
- delay_ms(25);
- }
-
- #include"config.h"
- #include"1602.h"
- #include"time.h"
- extern void LCD_init(); //?????????
- extern void LCD_clear(); //??
- extern void LCD_Desk();
- extern void delay_ms(uint x);
- extern void LCD_write_com(unsigned char com);
- extern void LCD_write_data(unsigned char date );
- extern void LCD_clear(void);
- extern void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s);
- extern void LCD_write_char(unsigned char x,unsigned char y,unsigned char date);
- extern void timechange();
- extern void setadd();
- extern void timeadd();
- extern void timedel();
- extern void lights(void);
- extern void readkey(void);
- extern void display1(void);
- void inint()
- { void LCD_init(); //?????????
- void LCD_clear(); //??
- void LCD_Desk();
- }
-
- uchar fre=0;
- bit flag=0,flag1=0;
- uint nian=2015;
- char time[6]={0,0,0,1,1,0},set=0;
- uchar yue[12]={31,28,31,30,31,30,31,31,30,30,31};
- uint locknian=2015;
- char lock[6]={0,10,0,1,1,0},lockset=0;
- sbit led0 =P0^0;
- sbit led1 =P0^1;
- sbit led2 =P0^2;
- sbit led3 =P0^3;
- void timechange(void)
- {
- if(++time[0]==60)
- {time[0]=0;
- if(++time[1]==60)
- {time[1]=0;
- if(++time[2]==24)
- {time[2]=0;
- if(++time[3]==yue[time[4]-1]+1)
- {time[3]=1;
- if(++time[4]==13)
- {time[4]=1;
- nian++;
-
- }
- }
- {//½øDDÄêÔÂèÕÅD¶Ï
- if(nian%4 !=0) time[5]=0;
- else if(nian%400==0) time[5]=0;
- else if(nian%4==0) time[5]=1;
- if(time[5]==1)yue[1]=29;
- if(time[5]==0)yue[1]=28;}
-
- }
- }
- }
-
- }
-
-
- void setadd(void)
- { if(flag=1)
- if(P1&0X0F==0X0F)
- {
- {if(++set==7)
- set=1;
- flag=0;
- }
- }
- }
- void timeadd(void)
- {
- if(flag=1)
- {if(flag1==0)
- {switch(set-1)
- {
- default:break;
- case 0|1:if(++time[set-1]==60) time[set-1]=0;break;
- case 2: if(++time[2]==24) time[2]=0;break;
- case 3: if(++time[3]==yue[time[4]-1]+1) time[3]=1;break;
- case 4: if(++time[4]==13)time[4]=1;break;
- case 5: ++nian; break;
- }
- }
- if(flag1==1)
- {switch(set-1)
- {
- default:break;
- case 0|1:if(++lock[set-1]==60) lock[set-1]=0;break;
- case 2: if(++lock[2]==24) lock[2]=0;break;
- case 3: if(++lock[3]==yue[lock[4]-1]+1) lock[3]=1;break;
- case 4: if(++lock[4]==13)lock[4]=1;break;
- case 5: ++locknian; break;
- }
- }
- flag=0;
- }
- }
-
- void timedel(void)
- {
- if(flag=1)
- {if(flag1==0)
- {switch(set-1)
- {
- default:break;
- case 0|1:if(--time[set-1]==-1) time[set-1]=59;break;
- case 2: if(--time[2]==-1) time[2]=23;break;
- case 3: if(--time[3]==0) time[3]=yue[time[4]-1];break;
- case 4: if(--time[4]==0) time[4]=12;break;
- case 5: --nian; break;
- }
- }
- if(flag1==1)
- {switch(set-1)
- {
- default:break;
- case 0|1:if(--lock[set-1]==-1) lock[set-1]=59;break;
- case 2: if(--lock[2]==-1) lock[2]=23;break;
- case 3: if(--lock[3]==0) lock[3]=yue[lock[4]-1];break;
- case 4: if(--lock[4]==0)lock[4]=12;break;
- case 5: --locknian; break;
- }
- }
- flag=0;
- }
- }
-
- void lights(void)
- { if(flag==1)
- {void display();
- switch(set-1)
- {
- case 5:
- LCD_write_char(0x02,0,' ');
- LCD_write_char(0x03,0,' ');
- LCD_write_char(0x04,0,' ');
- LCD_write_char(0x05,0,' ');break;
-
- case 4:
- LCD_write_char(0x07,0,' ');
- LCD_write_char(0x08,0,' ');break;
-
- case 3:
- LCD_write_char(0x0A,0,' ');
- LCD_write_char(0x0B,0,' ');break;
-
- case 2:
- LCD_write_char(0x02,1,' ');
- LCD_write_char(0x03,1,' ');break;
-
- case 1:
- LCD_write_char(0x05,1,' ');
- LCD_write_char(0x06,1,' ');break;
-
- case 0:
- LCD_write_char(0x08,1,' ');
- LCD_write_char(0x09,1,' ');break;
-
- default:break;
- }
- os_wait (K_TMO, 20, 0);
- if(++fre==25)
- { set=0;
- fre=0;
- flag=0;
- }
- }
- }
- void readkey(void)
- {uchar keycode;
- P1=0XbF;
- keycode=P1&0X0F;
- if(keycode!=0x0f)
- {
- os_wait (K_TMO, 1, 0);
- keycode=P1&0X0F;
- if(keycode!=0x0f)
- {
- os_wait (K_TMO, 200, 0);
- os_wait (K_TMO, 200, 0);
- os_wait (K_TMO, 200, 0);
- os_wait (K_TMO, 200, 0);
-
- if(P1&0X0F==0X0F)
- { fre=0;
- flag=1;
- switch(keycode)
- {
- default:break;
- case ~0xf1:setadd();break;
- case ~0xf2:timeadd();break;
- case ~0xf4: timedel();break;
- case ~0xf8: flag1=~flag1;break;
- }
-
- }
- }
- }
- }
-
- void beep(uchar x)
- { led2=0;
- os_wait (K_TMO, 10, 0);
- led2=1;
- os_wait (K_TMO, x, 0);
- led2=0;
- }
-
- void locktime()
- { led2=0;
- if(nian==locknian)
- {
- if(time[4]==lock[4])
- {
- if(time[3]==lock[3])
- {
- if(time[2]==lock[2])
- {
- if(time[1]==lock[1])
- beep(30);
- }
-
- }
- }
- }
-
- }
-
- void display1(void)
- {
- LCD_write_char(0x00,0,0x30+time[5]);
- LCD_write_char(0x02,0,0x30+nian/1000);
- LCD_write_char(0x03,0,0x30+nian/100%10);
- LCD_write_char(0x04,0,0x30+nian%100/10);
- LCD_write_char(0x05,0,0X30+nian%10);
-
- LCD_write_char(0x07,0,0x30+time[4]/10);
- LCD_write_char(0x08,0,0x30+time[4]%10);
- LCD_write_char(0x09,0,':');
- LCD_write_char(0x0A,0,0X30+time[3]/10);
- LCD_write_char(0x0B,0,0x30+time[3]%10);
-
- LCD_write_char(0x02,1,0x30+time[2]/10);
- LCD_write_char(0x03,1,0x30+time[2]%10);
- LCD_write_char(0x04,1,':');
- LCD_write_char(0x05,1,0X30+time[1]/10);
- LCD_write_char(0x06,1,0x30+time[1]%10);
- LCD_write_char(0x07,1,':');
- LCD_write_char(0x08,1,0x30+time[0]/10);
- LCD_write_char(0x09,1,0x30+time[0]%10);
-
-
- }
復(fù)制代碼
|
|