#include
#define uchar unsigned char
#define uint unsigned int
sbit db=P2^7;
char i,sec,min,h,date,month,year,flag;
uchar j,k,m,n,o,p;
sbit la=P2^0;
sbit wela1=P2^1;
sbit wela2=P2^2;
sbit key_ch=P3^5;
sbit key_add=P3^6;
sbit key_minus=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();
void delay(uint);
void second_display();
void minute_display();
void hour_display();
void date_display();
void month_display();
void year_display();
void control();
void time();
void main()
{
init();
while(1)
{
second_display();
minute_display();
hour_display();
date_display();
month_display();
year_display();
control();
}
}
void init()
{
db=0;
i=0;
sec=0;
min=0;
h=0;
date=1;
month=1;
year=1;
flag=0;
wela1=0;
wela2=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void second_display()
{
int sec_shi,sec_ge;
sec_shi=sec/10;
sec_ge=sec%10;
if(flag==1&&j!=1)
j++;
else
{
j=0;
la=1;
P0=~table[sec_ge];
la=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x20;
wela2=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[sec_shi];
la=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x10;
wela2=0;
delay(1);
la=1;
P0=0xff;
la=0;
}
}
void minute_display()
{
int min_shi,min_ge;
min_shi=min/10;
min_ge=min%10;
if(flag==2&&k!=1)
k++;
else
{
k=0;
la=1;
P0=~table[min_ge];
la=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x08;
wela2=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[min_shi];
la=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x04;
wela2=0;
delay(1);
la=1;
P0=0xff;
la=0;
}
}
void hour_display()
{
int h_shi,h_ge;
h_shi=h/10;
h_ge=h%10;
if(flag==3&&m!=1)
m++;
else
{
m=0;
la=1;
P0=~table[h_ge];
la=0;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x02;
wela2=0;
delay(1);
la=1;
P0=0xff;
la=0;
delay(1);
la=1;
P0=~table[h_shi];
la=0;
wela1=1;
P1=0x00;
wela1=1;
P1=0x00;
wela1=0;
wela2=1;
P1=0x01;
wela2=0;
delay(1);
la=1;
P0=0xff;
la=0;
wela2=0;
delay(1);
}
}
void date_display()
{
int date_shi,date_ge;
date_shi=date/10;
date_ge=date%10;
if(flag==4&&n!=1)
n++;
else
{
n=0;
la=1;
P0=~table[date_ge];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x80;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[date_shi];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x40;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
}
}
void month_display()
{
int month_shi,month_ge;
month_shi=month/10;
month_ge=month%10;
if(flag==5&&o!=1)
o++;
else
{
o=0;
la=1;
P0=~table[month_ge];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x20;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[month_shi];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x10;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
}
}
void year_display()
{
int year_qian,year_,year_shi,year_ge;
year_qian=year/1000;
year_=year%1000/100;
year_shi=year%1000%100/10;
year_ge=year%10;
if(flag==6&&p!=1)
p++;
else
{
p=0;
la=1;
P0=~table[year_ge];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x08;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[year_shi];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x04;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[year_];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x02;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
la=1;
P0=~table[2];
la=0;
wela2=1;
P1=0x00;
wela2=0;
wela1=1;
P1=0x01;
wela1=0;
delay(1);
la=1;
P0=0xff;
la=0;
wela1=0;
}
}
void control()
{
if(!key_ch)
{
delay(5);
if(!key_ch)
{
flag++;
if(flag==7)
flag=0;
}
}
while(!key_ch);
if(flag==1&&key_add==0)
{
while(!key_add);
sec++;
if(sec==60)
sec=0;
}
if(flag==1&&key_minus==0)
{
while(!key_minus);
sec--;
if(sec==-1)
sec=59;
}
if(flag==2&&key_add==0)
{
while(!key_add);
min++;
if(min==60)
min=0;
}
if(flag==2&&key_minus==0)
{
while(!key_minus);
min--;
if(min==-1)
min=59;
}
if(flag==3&&key_add==0)
{
while(!key_add);
h++;
if(h==24)
h=0;
}
if(flag==3&&key_minus==0)
{
while(!key_minus);
h--;
if(h==-1)
h=23;
}
if(flag==4&&key_add==0)
{
while(!key_add);
date++;
if(date==29)
if((year%4!=0)&&(month==2))
date=1;
if(date==30)
if((year%4==0)&&(month==2))
date=1;
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
date=1;
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
date=1;
}
if(flag==5&&key_add==0)
{
while(!key_add);
month++;
if(month==13)
month=1;
}
if(flag==5&&key_minus==0)
{
while(!key_minus);
month--;
if(month==0)
month=12;
}
if(flag==6&&key_add==0)
{
while(!key_add);
year++;
if(year==99)
year=1;
}
if(flag==6&&key_minus==0)
{
while(!key_minus);
year--;
if(year==0)
year=99;
}
}
void T0_rpt() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
time();
}
void time()
{
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
min=0;
sec=0;
date++;
if(date==29)
if((year%4!=0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==30)
if((year%4==0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}
}
}
}
}
❷ 51單片機C語言if判斷語句及邏輯或能寫在一起嗎
只能這樣寫:if(a==0x45 || a==0x14);
(a==0x45||0x14),將是先計算 0x45||0x14 的結果,再與 a 比較,顯然不正確;
❸ 51單片機C語言IF語句除了嵌套,怎麼寫同時滿足3個條件才執行循環體的語句
程序代碼:
void main()
{
while(1)
{
if(P0_0==1) //如果P0.0為高電平
{
LED=0; //點亮一個LED燈
delayms(5000); //如果在這個延時的5秒內,P0.0轉為了低電平,程序則不會繼續執行後面的語句,我需要繼續執行,該如何處理?
if(P0_0==0)
break;
}
}
}
延時之後做個P0_0的判斷就可以了吧,break跳出循環。
❹ C語言中if語句的一些疑問,if語句不是為真的時候就執行嗎為什麼這個語句不是呢
它的意思是按鍵沒有按下的時候key的值就是1,所以此時會執行大括弧里的語句
❺ 用c語言寫51單片機
#include<reg51.h>
#defineucharunsignedchar
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitled1=P1^4;
sbitled2=P1^5;
main()
{
if(key1==0)
{
while(key1==0);
led1=0;
led2=1;
}
if(key2==0)
{
while(key2==0);
led1=1;
led2=0;
}
if(key3==0)
{
while(key3==0);
led1=0;
led2=0;
}
if(key4==0)
{
while(key4==0);
led1=1;
led2=1;
}
}
❻ if(){}是無限循環嗎 51單片機c語言編程
這個肯定不是死循環,畢竟這是if語句,若是while語句可能由於括弧裡面內容一直為1 導致死循環!這個語句先判斷括弧內容若為真就執行,不為真就不執行大括弧的內容
❼ 單片機if語句。
你應該先判斷單獨的感測器能否實現功能,以排除硬體的錯誤,實際上你這個應該是
/*左轉*/ if(P3&0XF0)
{
delay(1);
P1_0=1;
P1_1=1;
P1_2=1;
P1_3=0;
delay(1);
}
也就是,只要P3的高位中有一個是1,就轉,你改成如上語句試試!
❽ 51單片機if語句最多能嵌套幾級,做了一套程序用的STC 89C52的,if嵌套了7級程序仍然可以正常工作
取決於所用的C語言版本。設計得好的C編譯程序,都是不限制嵌套層次數的。
也就是說,不管嵌套多少層,只要編譯出的程序內存能裝的下,就可以。
❾ 在51單片機c語言中if(1)代表什麼意思
永遠為真的判斷條件。也就是說只要運行到這個if,一定執行else前的內容而不是else後的內容。