|
發布時間: 2018-5-31 21:34
正文摘要:程序接線如圖輸入2個模擬信號,要求對比2個信號的大小。如果信號大小一致,則不顯示。若信號大小不一致,則開始計時,并送入八段數碼管顯示小時和分鐘,同時LED燈亮。八段數碼管共陰極,要求用c語言匯編。(主要是自 ... |
hk0506 發表于 2018-6-1 09:32 主要邏輯是判斷輸入2個信號的大小是否相同,判斷大小不相同時,計時器開始計時并送到八段數碼管顯示計時時間。 |
| 占樓,表示你這個有點邏輯混亂啊,看不懂,你能不能把邏輯理順了 |
|
#include<reg51.h> #include<absacc.h> #define uchar unsigned char #define uint unsigned int #define IN0 XBYTE[0x7ff8] sbit ad_busy=P3^3; sbit led=P2^4;//LED端口定義 sbit Axs=P2^0; sbit Bxs=P2^1; sbit Cxs=P2^2;sbit Dxs=P2^3;//數碼管位選端口 char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數碼管顯示編碼 unsigned int h,m,s,t,n,a; void change(uchar idata*x) { uchar i; uchar xdata*ad_adr; ad_adr=&IN0; for(i=0;i<2;i++) { *ad_adr=0; i=i; i=i; while(ad_busy!=0); x[i]=*ad_adr; ad_adr++; } } void YS(char hs)//延時函數 { char hk;for(;hs>0;hs--) {for(hk=200;hk>0;hk--);} } void DS(int xh,int xm) //顯示子函數 { char d1,d2,d3,d4; d1=(xh/1)%10; d2=(xh/10)%10;//分離小時 d3=(xm/1)%10; d4=(xm/10)%10;//分離分鐘 P1=table[d1];Cxs=0;YS(10);Cxs=1;//小時個位 P1=table[d2];Dxs=0;YS(10);Dxs=1;//小時十位 P1=table[d3];Axs=0;YS(10);Axs=1;//分鐘個位 P1=table[d4];Bxs=0;YS(10);Bxs=1;//分鐘十位 P1=0x80; P2=0x01; YS(10); P2=0x00;//小數點 } void main(void) {static uchar idata ad[10]; change(ad); TH0=(65536-100)/256; TL0=(65536-100)%256; TMOD=0x01; EA=1; ET0=1; TR0=1;//定時器初始化 a=ad[1]-ad[0]; while(1) { if(a==0){YS(10);if(a==0){h++;if(h>23){h=0;}}while(!a){DS(h,m);}} if(a==0){YS(10);if(a==0){m++;if(m>59){m=0;}}while(!a){DS(h,m);}} DS(h,m);//調用數碼管顯示函數 led=~led; } } void int1() interrupt 1 //定時器中斷 { TH0=(65536-100)/256; TL0=(65536-100)%256; n++; if(n>1000){n=0;s++;}//如果達到一秒,秒加一 if(s>59){s=0;m++;}//如果達到一分,分加一 if(m>59){m=0;h++;}//如果達到一小時,小時加一 if(h>23){h=0;}//如果達到24小時,小時清零 這是我再網上半抄半寫的,A/D轉換采用的是查詢方式,數碼管同的是動態顯示 |
| 把你的程序放上面看看 |