RTX 51 TINY的工程,附有proteus仿真,keil c51編寫(xiě)完成:一個(gè)應(yīng)用了RTX 51 TINY的工程,附有proteus仿真,keil c51編寫(xiě)完成,RTX51是運(yùn)行在51單片機(jī)上的微型實(shí)時(shí)操作系統(tǒng),比較簡(jiǎn)單,便于初學(xué)者學(xué)習(xí)。-
以下是部分源代碼 完整程序見(jiàn)附件
- /*------------------------------------------------------------------------
- 本實(shí)例使用12MHZ晶振,采用at89x5x系列單片機(jī),故時(shí)間片為10ms
- 另附proteus仿真工程
- 制作者:周乾偉
- 2008年3月31日編寫(xiě)完成
- email:huntstart@163.com
- -------------------------------------------------------------------------*/
- #include <rtx51tny.h>
- #include <at89x51.h>
- #include <lcd.h>
- const seven_seg[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,
- 0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共陽(yáng)0123456789,后十位帶點(diǎn)。
- unsigned char i=0,j=0,hour=0,minute=0,sec=0,t,a=0;
- unsigned int count=0;
- unsigned char key_v1[17]={'i','l','o','v','\0'};
- unsigned char key_v2[17]={'i','l','o','v','\0'};
- bit b=1,signal_p1=0;
- void job0 (void) _task_ 0
- {
- init_LCD();
- os_create_task(1);//鍵盤(pán)掃描任務(wù)
- os_create_task(2);//鍵值顯示任務(wù)
- os_create_task(3);//計(jì)時(shí)任務(wù)
- os_create_task(4);//時(shí)間顯示任務(wù)
- os_create_task(5);
- os_delete_task(0);//任務(wù)0相當(dāng)于一個(gè)父進(jìn)程,它的任務(wù)是創(chuàng)建子進(jìn)程,完成使命后就可以取消了,免得暫用cpu資源
- }
- void job1 (void) _task_ 1
- {
- while(1)
- {//每一個(gè)任務(wù)都必須是一個(gè)死循環(huán)
- if(b==1)
- os_send_signal (4);//當(dāng)無(wú)按鍵動(dòng)作時(shí),發(fā)送信號(hào)量給任務(wù)4,半秒刷時(shí),有動(dòng)作發(fā)生后,若連續(xù)10s無(wú)動(dòng)作,返回刷時(shí)狀態(tài)
- else if(a>100)
- {
- os_send_signal (4);
- a=0;
- b=1;
- }
- i=scan(key_v1);//啟動(dòng)按鍵掃描
- if(i==100) //如果返回i!=100說(shuō)明有按鍵,發(fā)送信號(hào)量給任務(wù)2
- {
- if(VS_key_V(key_v1,key_v2)==0)//如果于前次按鍵不一樣,怎顯示
- {
- StrToStr( key_v1, key_v2);
- os_send_signal (2);
- b=0;
- // os_wait(K_TMO,1,0);
- }
- else a++;
- }
- if((a==15)&&(i==100))
- {
- count++;
- a=0;
- }
- if(i!=100) a++;
- os_wait(K_TMO,10,0);//修改tick,可以改變掃描頻率
- }
- }
- void job2 (void) _task_ 2
- {
- while(1)
- {
- os_wait1(K_SIG);//等待信號(hào)量,若信號(hào)量沒(méi)到,則任務(wù)2處于掛起狀態(tài)
- clear_LCD();
- //clear_LCD();
- gotoxy(1,0);
- display_LCD_string(key_v1);
- //StrToStr( key_v1, key_v2);
- // gotoxy(1,0);
- //display_LCD_string(key_v2);
- a=0;
- count=0;
- os_clear_signal (2);//釋放信號(hào)量
- // os_wait(K_TMO,1000,0);
- }
- }
- void job3 (void) _task_ 3
- {
- while(1)
- {
- sec++;//計(jì)秒
- if(sec==60){minute++;sec=0;}
- if(minute==60){hour++;minute=0;}
- os_wait(K_IVL,100,0);//等待時(shí)間片中斷,沒(méi)100個(gè)時(shí)間片發(fā)生一次中斷,也就是1s鐘,任務(wù)3運(yùn)行一次
- }
- }
- void job4 (void) _task_ 4
- {
- while(1)
- {
- os_wait1(K_SIG);//等待信號(hào)量
- //os_wait(K_TMO+K_SIG,50,0);
- if(signal_p1!=0) os_wait(K_TMO,1,0);
- signal_p1=1;
- P2|=0x0f;
- clear_LCD();
- t=hour/10+48;
- gotoxy(1,4);
- write_LCD_data(t);
- t=hour%10+48;
- write_LCD_data(t);
- write_LCD_data(':');
- t=minute/10+48;
- write_LCD_data(t);
- t=minute%10+48;
- write_LCD_data(t);
- write_LCD_data(':');
- t=sec/10+48;
- write_LCD_data(t);
- t=sec%10+48;
- write_LCD_data(t);
- gotoxy(1,0);
- signal_p1=0;
- os_wait(K_TMO,50,0);
- os_clear_signal(4);//釋放信號(hào)量
- }
- }
- void job5 (void) _task_ 5
- {
- while(1)
- {
- //os_wait(K_TMO,5,0);
- if(signal_p1!=0) os_wait(K_TMO,1,0);
- signal_p1=1;
- P2|=0x0f;
- P1=seven_seg[count%10];
- P2&=0xfe;
- delay100us(24);
- P2|=0x0f;
- P1=seven_seg[(count/10)%10];
- P2&=0xfd;
- delay100us(24);
- P2|=0x0f;
- P1=seven_seg[(count/100)%10];
- P2&=0xfb;
- delay100us(24);
- P2|=0x0f;
- P1=seven_seg[(count/1000)%10];
- P2&=0xf7;
- delay100us(24);
- // up++;
- if(count>=10000) count=0;
- P2|=0x0f;
- signal_p1=0;
- os_wait(K_TMO,1,0);
- }
- }
復(fù)制代碼
回復(fù) 1# admin
很好,比較簡(jiǎn)單的操作系統(tǒng)。
回復(fù) 1# admin
剛剛看一下,這個(gè)系統(tǒng)的移植是很方便的。
很好的程序結(jié)構(gòu),學(xué)習(xí)啦~
很好的程序結(jié)構(gòu),學(xué)習(xí)啦~
中道找到了!!!!!!!!!!!!!!!
謝謝樓主分享!但是程序中有很多錯(cuò)誤的地方。不知樓主……
回復(fù) 7# zhiyix
抽空我會(huì)測(cè)試一下
ThanksThanksThanksThanksThanksThanksThanks
頂DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
非常好,我下了;非常好,我下了
新會(huì)員報(bào)道,謝謝發(fā)帖。
我下了,研究學(xué)習(xí);我下了,研究學(xué)習(xí)
編譯不通過(guò)???不通過(guò)啊
不錯(cuò),很實(shí)用,非常感謝
謝謝樓主。向樓主學(xué)習(xí)。。
頂DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
admin 在么 為什么我用你的程序仿真LCD屏 沒(méi)有數(shù)字顯示呢
謝謝分享!樓主辛苦了!
{:soso_e183:}{:soso_e183:}{:soso_e157:}