本文目錄一覽:
- 1、操作系統的課程設計~進程控制系統~用C語言編寫的
- 2、基於單片機的作息時間控制系統C語言程序
- 3、關於單片機溫度控制系統C語言程序中的按鍵設置程序,請求詳細的介紹下按鍵的輸入過程。while(1) { if(KeyFl
操作系統的課程設計~進程控制系統~用C語言編寫的
補充:
這個程序當然可以在WINDOWS下編輯了.
不過編譯就必須要UNIX了.
下面的程序假設你的當前目錄有一個helloworld程序,
這個你會寫吧?
:)
#include
stdio.h
#include
unistd.h
#include
sys/wait.h
int
main()
{
int
pid;
int
status;
pid
=
fork();
if
(pid
==
0)
{
/*
child
process
*/
execve(“./helloworld”,
NULL,
NULL);
}
else
if
(pid
0)
{
/*
failed
to
fork,
error
message
*/
printf(“fork
error,
errno
=
%d\n”,
errno);
}
else
{
waitpid(pid,status,0)
}
return
0;
}
基於單片機的作息時間控制系統C語言程序
#includereg52.h
#define uchar unsigned char
#define uintunsigned int
sbit E=P3^4;
sbit RS=P3^5;
sbit key1=P2^4;
sbit key2=P2^5;
sbit key3=P2^6;
sbit key4=P2^7;
sbit mbkey=P2^2;
sbit beep=P2^3;
uchar count,shi=1,fen=59,miao=58,key1num,flag,flag1,xqnum;//flag鬧鐘
uchar key2num,jinzhi=3,naonum=1,ms,mbmiao,mbfen,mbkeynum,num; //ms秒錶進數,mbmiao.mbfen秒錶的秒.分key2num是key5的計數jinzhi進制轉換參數
uint nian=2009,yue=11,ri=19,count2;
uchar code table[]=”2012-6-06 WED”;
uchar code table1[]=”24d 01:59:58 ON “;
uchar code table2[]=”MON,TUE,WED,THU,FRI,SAT,SUN”;
uchar code table3[]=”am ,pm ,24d”;
uchar code table4[]=”ON ,OFF”;
uchar code table5[]=”00:00:00 mb “;
void delay(uint z)
{
uint x,y;
for(x=z;x0;x–)
for(y=110;y0;y–);
}
void di(uint x)//蜂鳴器發聲函數
{
beep=0;
delay(x);
beep=1;
}
void write_com(uchar com)//給寫液晶命令
{
RS=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
void write_date(uchar date)//給液晶寫數據
{
RS=1;
P0=date;
delay(5);
E=1;
delay(5);
E=0;
}
void init()//初始化函數
{
uchar num;
E=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);//清零
write_com(0x80);
for(num=0;num16;num++)
{
write_date(table[num]);
delay(20);
}
write_com(0x80+0x40);//第二行
for(num=0;num16;num++)
{
write_date(table1[num]);
delay(20);
}
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
ET1=0;
TR1=0;
}
void write_nian(uchar add , uint date)//年顯示函數
{
uchar qian,bai,shi,ge;
qian=date/1000;
bai=(date-1000*qian)/100;
shi=(date-qian*1000-bai*100)/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+qian);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_yue(uchar add , uchar date)//月顯示函數
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_ri(uchar add , uchar date)//日顯示函數
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_sfm(uchar add ,uchar date)//秒顯示函數
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_week(uchar week)//星期顯示函數
{
uchar week_num;
week_num=week;
switch(week_num)
{
case 1:write_com(0x80+13);
write_date(table2[0]);
write_date(table2[1]);
write_date(table2[2]);
write_com(0x80+13);
break;
case 2:write_com(0x80+13);
write_date(table2[4]);
write_date(table2[5]);
write_date(table2[6]);
write_com(0x80+13);
break;
case 3:write_com(0x80+13);
write_date(table2[8]);
write_date(table2[9]);
write_date(table2[10]);
write_com(0x80+13);
break;
case 4:write_com(0x80+13);
write_date(table2[12]);
write_date(table2[13]);
write_date(table2[14]);
write_com(0x80+13);
break;
case 5:write_com(0x80+13);
write_date(table2[16]);
write_date(table2[17]);
write_date(table2[18]);
write_com(0x80+13);
break;
case 6:write_com(0x80+13);
write_date(table2[20]);
write_date(table2[21]);
write_date(table2[22]);
write_com(0x80+13);
break;
case 7:write_com(0x80+13);
write_date(table2[24]);
write_date(table2[25]);
write_date(table2[26]);
write_com(0x80+13);
break;
}
}
void write_jinzhi(uchar jinzhi)//jinzhi進制顯示函數
{
uchar jznum;
jznum=jinzhi;
switch(jznum)
{
case 1:write_com(0x80+0x40+0);
write_date(table3[0]);
write_date(table3[1]);
write_date(table3[2]);
write_com(0x80+0x40+0);
break;
case 2:write_com(0x80+0x40+0);
write_date(table3[4]);
write_date(table3[5]);
write_date(table3[6]);
write_com(0x80+0x40+0);
break;
case 3:write_com(0x80+0x40+0);
write_date(table3[8]);
write_date(table3[9]);
write_date(table3[10]);
write_com(0x80+0x40+0);
break;
}
}
void write_nao(uchar nao)//鬧鐘開關顯示函數
{
uchar naonum;
naonum=nao;
switch(naonum)
{
case 1:write_com(0x80+0x40+13);
write_date(table4[0]);
write_date(table4[1]);
write_date(table4[2]);
write_com(0x80+0x40+13);
break;
case 2:write_com(0x80+0x40+13);
write_date(table4[4]);
write_date(table4[5]);
write_date(table4[6]);
write_com(0x80+0x40+13);
break;
}
}
void keyboard()//按鍵掃描函數
{
if(flag==1)
{
//鬧鐘暫停函數
if(key4==0)
{
delay(5);
if(key4==0)
{
while(!key4);
beep=1;
flag=0;
}
}
}
if(key1==0)
{
delay(5);//消斗
if(key1==0)
{
key1num++;
while(!key1);
//di(1);
if(key1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);//光標閃爍
}
if(key1num==2)
{
write_com(0x80+0x40+7);
}
if(key1num==3)
{
write_com(0x80+0x40+4);
}
if(key1num==4)
{
write_com(0x80+0x40);
}
if(key1num==5)
{
write_com(0x80+2);
}
if(key1num==6)
{
write_com(0x80+7);
}
if(key1num==7)
{
write_com(0x80+10);
}
if(key1num==8)
{
write_com(0x80+13);
}
if(key1num==9)
{
write_com(0x80+0x40+13);
}
if(key1num==10)
{
key1num=0;
write_com(0x0c);//光標停止閃爍
TR0=1;//打開定時器
}
}
}
if(key1num!=0)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);//等待鬆手
di(100);
if(key1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(key1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(key1num==3)
{
shi++;
if(jinzhi==3)
{
if(shi==24)
shi=0;
}
else
{
if(shi12)
shi=shi-12;
}
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
if(key1num==4)
{
jinzhi++;
if(jinzhi==4)
jinzhi=1;
write_jinzhi(jinzhi);
}
if(key1num==5)
{
nian++;
write_nian(2,nian);
write_com(0x80+2);
}
if(key1num==6)
{
yue++;
if(yue==13)
yue=1;
write_yue(7,yue);
write_com(0x80+7);
}
if(key1num==7)
{
ri++;
if(ri==32)
ri=1;
write_ri(10,ri);
write_com(0x80+10);
}
if(key1num==8)
{
xqnum++;
if(xqnum==8)
xqnum=1;
write_week(xqnum);
}
if(key1num==9)
{
naonum++;
if(naonum==3)
naonum=1;
write_nao(naonum);
}
if(key1num==10)
{
key1num=0;
write_com(0x0c);//光標停止閃爍
TR0=1;//打開定時器
}
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!key3);
di(100);
if(key1num==1)
{
miao–;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(key1num==2)
{
fen–;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(key1num==3)
{
shi–;
/*if(shi==-1)
shi=23;*/
if(jinzhi==3)
{
if(shi==-1)
shi=23;
}
else
{
if(shi1)
shi=shi+12;
}
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
if(key1num==4)
{
jinzhi–;
if(jinzhi==0)
jinzhi=3;
write_jinzhi(jinzhi);
}
if(key1num==5)
{
nian–;
write_nian(2,nian);
write_com(0x80+4);
}
if(key1num==6)
{
yue–;
if(yue==0)
yue=12;
write_yue(7,yue);
write_com(0x80+7);
}
if(key1num==7)
{
ri–;
if(ri==0)
ri=31;
write_ri(10,ri);
write_com(0x80+13);
/*if(key1num==8)
{
xqnum–;
if(xqnum==0)
xqnum=7;
write_week(xqnum);
write_com(0x80+10);
}
if(key1num==9)
{
naonum–;
if(naonum==0)
naonum=2;
write_nao(naonum);
write_com(0x80+0X40+13);
}
*/
}
}
}
}
}
void mbiao( )//秒錶函數
{
if(mbkey==0)
{
mbkeynum++;
while(!mbkey);
if(mbkeynum==1)//關閉時鐘定時器
{
TR0=0;
ET0=0;
write_com(0x80+0x40);
for(num=0;num16;num++)
write_date(table5[num]);
ms=0;
mbmiao=0;
mbfen=0;
TR1=0;
ET1=0;
}
if(mbkeynum==2)//打開秒錶定時器關閉時鐘定時器
{
TR1=1;
ET1=1;
TR0=0;
ET0=0;
}
if(mbkeynum==3)//關閉秒錶定時器
{
TR1=0;
ET1=0;
TR0=0;
ET0=0;
}
if(mbkeynum==4)//顯示時鐘狀態打開時鐘定時器
{
TR0=1;
ET0=1;
TR1=0;
ET1=0;
write_sfm(10,miao);
write_sfm(7,fen);
write_sfm(4,shi);
write_jinzhi(jinzhi);
write_com(0x80+0x40+13);
write_date(‘ ‘);
write_date(‘O’);
write_date(‘N’);
mbkeynum=0;
}
}
}
void main()
{
init();
while(1)
{
keyboard();
mbiao();
if(count==20)//液晶變化
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(jinzhi==3)//24進制時鐘
{
if(shi==24)
shi=0;
}
else
{
if(shi12)//12進制時鐘
{
shi=shi-12;
jinzhi++;
if(jinzhi==3)
jinzhi=1;
}
}
write_sfm(4,shi);
write_jinzhi(jinzhi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);
if(miao==0fen==0shi==0||(jinzhi==2shi==12fen==0miao==0))//日期和星期遞變
{
write_com(0x80+9);
ri++;
if(ri==32)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
write_nian(2,nian);
}
write_yue(7,yue);
}
write_ri(10,ri);
xqnum++;
write_week(xqnum);
}
if(fen==0miao=0miao=5)//整點報時
{
flag=1;
beep=~beep;
}
if(naonum==1shi==07fen==15miao=0miao=5)//鬧鐘
{
flag=1;
beep=~beep;
}
}
}
}
void timer0() interrupt 1//時鐘定時器
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
}
void timer1() interrupt 3//秒錶定時器
{
TH1=(65536100000)/256;
TL1=(65536100000)%256;
ms++;
write_sfm(10,ms);
if(ms==1*30)
{
mbmiao++;
write_sfm(7,mbmiao);
ms=0;
if(mbmiao==60)
{
mbmiao=0;
mbfen++;
write_sfm(4,mbfen);
}
}
}
關於單片機溫度控制系統C語言程序中的按鍵設置程序,請求詳細的介紹下按鍵的輸入過程。while(1) { if(KeyFl
keyflag應該是判斷某個按鍵按了幾次,不安的時候為0
if(KeyFlag == 0)
{
}
按一次時執行
else if(KeyFlag == 1)
{
if(BUTTON_add == 0 KeyLock ==0)
{
}
if(BUTTON_reduce == 0 KeyLock ==0)
{
}
按二次時執行
else if(KeyFlag == 2){
if(BUTTON_add == 0 KeyLock ==0)
{
}
if(BUTTON_reduce == 0 KeyLock ==0)
{
}
一樓正解,主要按鍵擴展標誌是用來節省資源的,用最少的按鍵實現最多的功能!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257809.html