仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- /*
- P1口三個led燈代表模式:
- 模式1:開始記錄
- 模式2:查看記錄 按s3下一條 s4下一條
- 模式3:時間矯正 按s2選擇矯正位 按s3加一 按s4減一 led
- 注:p33口低電平觸發記錄; 調整實踐時時鐘停止 可存儲十條記錄,自動清除最舊記錄
- */
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit du=P2^6;
- sbit we=P2^7;
- sbit s2=P3^0;
- sbit s3=P3^1;
- sbit s4=P3^2;
- sbit led1=P1^7;
- sbit led2=P1^6;
- sbit led3=P1^5; //模式狀態燈
- uchar temp0;//P1口狀態存儲
- uint temp;//秒調整
- uchar ii,ii2; //中斷存儲循環用
- uchar Mode=1;//模式選擇
- uchar num=1; //記錄調出值
- uchar time[10][4]; //雞蛋時間記錄儲存
- double timeh,timem,times; //系統時間
- uchar code ld[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
- void display(uchar i,uchar j,uchar k,uchar l);
- void delay(uint z);
- void inti()
- {
- EA=1;//總開關
- EX1=1;//int1中斷 p33口
- IT1=0;//觸發方式:低電平
- ET0=1;//定時器0中斷允許
- TMOD=0x01;//模式選擇;//定時器0,1,16位定時器
- TH0=0x4b;
- TL0=0xfe;//50ms
- TR0=1;
- }
- void main()
- {
- inti(); //初始化配置
- while(1)
- {
- if(s2==0)
- {
- Mode++;
- if(Mode==6)Mode=1;
- if(!(Mode==1||Mode==2))ET0=0;
- if(Mode==1||Mode==2)ET0=1;
- while(!s2);
- delay(100);
- } //模式選擇
- if(Mode==1)//模式1 工作模式顯示時間
- {
- display(100,timeh,timem,times);
- led1=0;led2=1;led3=1;
- }
- if(Mode==2)//模式2 查詢
- {
- led1=1;led2=0;led3=1;
- if(s3==0)
- {
- num++;
- if(num==11)num=10;//防止查詢溢出
- while(!s3);
- delay(100);
- }
- if(s4==0)
- {
- num--;
- if(num==0)num=1;//防止查詢溢出
- while(!s4);
- delay(100);
- }
- display(num,time[num-1][0],time[num-1][1],time[num-1][2]);
- }
- if(Mode==3)//模式3 時間矯正 時
- {
- led1=1;led2=1;led3=0;
- if(s3==0)
- {
- timeh++;
- if(timeh==24)timeh=0;
- if(timeh<0)timeh=23;
- while(!s3);
- delay(100);
- }
- if(s4==0)
- {
- timeh--;
- if(timeh==24)timeh=0;
- if(timeh<0)timeh=23;
- while(!s4);
- delay(100);
- }
- display(100,timeh,100,100);
- }
- if(Mode==4)//模式3 時間矯正 分
- {
- led1=1;led2=1;led3=0;
- if(s3==0)
- {
- timem++;
- if(timem==60)timem=0;
- if(timem<0)timem=59;
- while(!s3);
- delay(100);
- }
- if(s4==0)
- {
- timem--;
- if(timem==60)timem=0;
- if(timem<0)timem=59;
- while(!s4);
- delay(100);
- }
- display(100,100,timem,100);
- }
- if(Mode==5)//模式3 時間矯正 秒
- {
- led1=1;led2=1;led3=0;
- if(s3==0)
- {
- times++;
- if(times==60)times=0;
- if(times<0)times=59;
- while(!s3);
- delay(100);
- }
- if(s4==0)
- {
- times--;
- if(times==60)times=0;
- if(times<0)times=59;
- while(!s4);
- delay(100);
- }
- display(100,100,100,times);
- }
- }
- }
- void timer0() interrupt 1
- {
- temp++;
- TH0=0x4b;
- TL0=0xfe; //50ms進入一次
- if(temp==20)
- {
- times++;
- temp=0;
- }
- if(times==60)
- {
- timem++;
- times=0;
- }
- if(timem==60)
- {
- timeh++;
- timem=0;
- }
- if(timeh==24)
- {
- timeh=0;
- } //時間計算
- }
- void int1() interrupt 2 //p33口
- {
- for(ii=0;ii<10;ii++)
- {
- for(ii2=0;ii2<3;ii2++)
- {
- time[9-ii][ii2]=time[8-ii][ii2];
- }
- }
- time[0][0]=timeh;
- time[0][1]=timem;
- time[0][2]=times;//存儲數據
- temp0=P1;
- P1=0;//中斷響應
- delay(1000);
- P1=temp0;
- }
- void display(uchar i,uchar j,uchar k,uchar l)
- {
-
- uchar shi1,ge1,shi2,ge2,shi3,ge3,shi4,ge4;
- if(i<100)
- {
- shi1=i/10;
- ge1=i%10;
- }
- else
- {
- shi1=ge1=10;
- }
- if(j<100)
- {
- shi2=j/10;
- ge2=j%10;
- }
- else
- {
- shi2=ge2=10;
- }
- if(k<100)
- {
- shi3=k/10;
- ge3=k%10;
- }
- else
- {
- shi3=ge3=10;
- }
- if(l<100)
- {
- shi4=l/10;
- ge4=l%10;
- }
- else
- {
- shi4=ge4=10;
- }
- P0=0xff; //清除段碼
- we=1;
- P0=0xfe;//1111 1110
- we=0;//第一次位選
-
- du=1;
- P0=ld[shi1];
- du=0;
- delay(1);//第一次段選
- P0=0xff; //清除段碼
- we=1;
- P0=0xfd;//1111 1101
- we=0;//第二次位選
- du=1;
- P0=ld[ge1];
- du=0;
- delay(1);//第二次段選
- P0=0xff; //清除段碼
- we=1;
- P0=0xfb;//1111 1011
- we=0;//第一次位選
-
- du=1;
- P0=ld[shi2];
- du=0;
- delay(1);//第一次段選
- P0=0xff; //清除段碼
- we=1;
- P0=0xf7;//1111 0111
- we=0;//第二次位選
- du=1;
- P0=ld[ge2];
- du=0;
- delay(1);//第二次段選
- P0=0xff; //清除段碼
- we=1;
- P0=0xef;//1110 1111
- we=0;//第一次位選
-
- du=1;
- P0=ld[shi3];
- du=0;
- delay(1);//第一次段選
- P0=0xff; //清除段碼
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
proteus仿真51開發板.zip
(35.92 KB, 下載次數: 25)
2019-4-19 21:55 上傳
點擊文件名下載附件
程序.zip
(33.62 KB, 下載次數: 37)
2019-4-19 21:54 上傳
點擊文件名下載附件
程序
|