?? text1.lst
字號:
C51 COMPILER V7.06 TEXT1 04/16/2008 22:21:21 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*------------------------------------------------------------------------
2 本實例使用12MHZ晶振,采用at89x5x系列單片機,故時間片為10ms
3 另附proteus仿真工程
4 制作者:周乾偉
5 2008年3月31日編寫完成
6 email:huntstart@163.com
7 -------------------------------------------------------------------------*/
8 #include <rtx51tny.h>
9 #include <at89x51.h>
10 #include <lcd.h>
11 const seven_seg[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,
12 0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共陽0123456789,后十位帶點。
13 unsigned char i=0,j=0,hour=0,minute=0,sec=0,t,a=0;
14 unsigned int count=0;
15 unsigned char key_v1[17]={'i','l','o','v','\0'};
16 unsigned char key_v2[17]={'i','l','o','v','\0'};
17
18 bit b=1,signal_p1=0;
19 void job0 (void) _task_ 0
20 {
21 1 init_LCD();
22 1 os_create_task(1);//鍵盤掃描任務
23 1 os_create_task(2);//鍵值顯示任務
24 1 os_create_task(3);//計時任務
25 1 os_create_task(4);//時間顯示任務
26 1 os_create_task(5);
27 1 os_delete_task(0);//任務0相當于一個父進程,它的任務是創建子進程,完成使命后就可以取消了,免得暫用cpu資源
28 1 }
29 void job1 (void) _task_ 1
30 {
31 1 while(1)
32 1 {//每一個任務都必須是一個死循環
33 2 if(b==1)
34 2 os_send_signal (4);//當無按鍵動作時,發送信號量給任務4,半秒刷時,有動作發生后,若連續10s無動作,返回刷
-時狀態
35 2 else if(a>100)
36 2 {
37 3 os_send_signal (4);
38 3 a=0;
39 3 b=1;
40 3 }
41 2 i=scan(key_v1);//啟動按鍵掃描
42 2
43 2 if(i==100) //如果返回i!=100說明有按鍵,發送信號量給任務2
44 2 {
45 3 if(VS_key_V(key_v1,key_v2)==0)//如果于前次按鍵不一樣,怎顯示
46 3 {
47 4 StrToStr( key_v1, key_v2);
48 4
49 4 os_send_signal (2);
50 4 b=0;
51 4
52 4
53 4 // os_wait(K_TMO,1,0);
54 4
C51 COMPILER V7.06 TEXT1 04/16/2008 22:21:21 PAGE 2
55 4 }
56 3 else a++;
57 3 }
58 2 if((a==15)&&(i==100))
59 2 {
60 3 count++;
61 3 a=0;
62 3 }
63 2 if(i!=100) a++;
64 2 os_wait(K_TMO,10,0);//修改tick,可以改變掃描頻率
65 2 }
66 1 }
67 void job2 (void) _task_ 2
68 {
69 1
70 1 while(1)
71 1 {
72 2 os_wait1(K_SIG);//等待信號量,若信號量沒到,則任務2處于掛起狀態
73 2 clear_LCD();
74 2 //clear_LCD();
75 2
76 2 gotoxy(1,0);
77 2 display_LCD_string(key_v1);
78 2 //StrToStr( key_v1, key_v2);
79 2 // gotoxy(1,0);
80 2 //display_LCD_string(key_v2);
81 2
82 2 a=0;
83 2 count=0;
84 2 os_clear_signal (2);//釋放信號量
85 2 // os_wait(K_TMO,1000,0);
86 2 }
87 1 }
88 void job3 (void) _task_ 3
89 {
90 1 while(1)
91 1 {
92 2 sec++;//計秒
93 2 if(sec==60){minute++;sec=0;}
94 2 if(minute==60){hour++;minute=0;}
95 2 os_wait(K_IVL,100,0);//等待時間片中斷,沒100個時間片發生一次中斷,也就是1s鐘,任務3運行一次
96 2 }
97 1 }
98 void job4 (void) _task_ 4
99 {
100 1
101 1 while(1)
102 1 {
103 2
104 2
105 2 os_wait1(K_SIG);//等待信號量
106 2 //os_wait(K_TMO+K_SIG,50,0);
107 2 if(signal_p1!=0) os_wait(K_TMO,1,0);
108 2 signal_p1=1;
109 2 P2|=0x0f;
110 2 clear_LCD();
111 2 t=hour/10+48;
112 2 gotoxy(1,4);
113 2 write_LCD_data(t);
114 2 t=hour%10+48;
115 2 write_LCD_data(t);
116 2 write_LCD_data(':');
C51 COMPILER V7.06 TEXT1 04/16/2008 22:21:21 PAGE 3
117 2 t=minute/10+48;
118 2 write_LCD_data(t);
119 2 t=minute%10+48;
120 2 write_LCD_data(t);
121 2 write_LCD_data(':');
122 2 t=sec/10+48;
123 2 write_LCD_data(t);
124 2 t=sec%10+48;
125 2 write_LCD_data(t);
126 2 gotoxy(1,0);
127 2 signal_p1=0;
128 2 os_wait(K_TMO,50,0);
129 2 os_clear_signal(4);//釋放信號量
130 2 }
131 1
132 1 }
133 void job5 (void) _task_ 5
134 {
135 1 while(1)
136 1 {
137 2 //os_wait(K_TMO,5,0);
138 2
139 2 if(signal_p1!=0) os_wait(K_TMO,1,0);
140 2 signal_p1=1;
141 2 P2|=0x0f;
142 2 P1=seven_seg[count%10];
143 2 P2&=0xfe;
144 2 delay100us(24);
145 2 P2|=0x0f;
146 2 P1=seven_seg[(count/10)%10];
147 2 P2&=0xfd;
148 2 delay100us(24);
149 2 P2|=0x0f;
150 2 P1=seven_seg[(count/100)%10];
151 2 P2&=0xfb;
152 2 delay100us(24);
153 2 P2|=0x0f;
154 2 P1=seven_seg[(count/1000)%10];
155 2 P2&=0xf7;
156 2 delay100us(24);
157 2 // up++;
158 2 if(count>=10000) count=0;
159 2 P2|=0x0f;
160 2 signal_p1=0;
161 2 os_wait(K_TMO,1,0);
162 2 }
163 1 }
164
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 596 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 83 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -