|
大二工科直女,單片機剛?cè)肟樱@是第一個全部由自己完成的處女作啦,在圖書館調(diào)試到腰酸背痛,但還是超級開心!!
我的單片機是淘寶買的學(xué)習(xí)板,所以電路圖直接發(fā)現(xiàn)有的咯
萌新們大家一起加油鴨~~
IMG20181208170115.jpg (4.93 MB, 下載次數(shù): 65)
下載附件
2018-12-8 17:01 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit key2=P3^0;
- sbit key3=P3^1;
- sbit key4=P3^2;
- sbit key5=P3^3;
- sbit DU=P2^6;
- sbit WE=P2^7;
- uchar secs,sec, msec, usec;
- uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
- void delay(uint z)
- {
- uint x,y;
- for(x = z; x > 0; x--)
- for(y = 114; y > 0 ; y--);
- }
- void display(uchar secs,sec,msec)
- {
-
- P0 = 0XFF;
- WE = 1;
- P0 = 0XFE;
- WE = 0;
-
- DU = 1;
- P0 = tabel[secs];
- DU = 0;
- delay(5);
- P0 = 0XFF;
- WE = 1;
- P0 = 0XFD;
- WE = 0;
-
- DU = 1;
- P0 = tabel[sec];
- DU = 0;
- delay(5);
- P0 = 0XFF;
- WE = 1;
- P0 = 0XFB;
- WE = 0;
-
- DU = 1;
- P0 = tabel[msec];
- DU = 0;
- delay(5);
- }
- void dian()
- {
- P0 = 0XFF;
- WE = 1;
- P0 = 0XFD;
- WE = 0;
-
- DU = 1;
- P0 = 0x80;
- DU = 0;
- delay(5);
- }
- void count()
- {
- if(usec == 10)
- {
- usec = 0;
- msec++;
- }
- if(msec==10)
- {
- msec=0;
- sec++;
- }
- if(sec==10)
- {
- sec=0;
- secs++;
- }
- if(secs==10)
- {
- TR0=0;
- TH0=0XDC;
- TL0=0X00;
- usec=0;
- msec=0;
- sec=0;
- secs=0;
- TR0=1;
- }
- }
- void timer0() interrupt 1
- {
- TH0=0XDC;
- TL0=0X00;
- usec++;
- count();
-
- }
- void init()
- {
-
- TMOD=0X01;
- TH0=0XDC;
- TL0=0X00;
- EA=1;
- ET0=1;
- sec=0;
- msec=0;
- usec=0;
- secs=0;
- }
- void keyscan()
- {
- if(key2==0)//判斷按鍵是否按下
- {
- delay(10);//延時10ms用以消抖
- if(key2==0)//按鍵確實按下
- {
- while(key2==0)//松手檢測
- {
- display(secs,sec,msec);//還沒松手時,不斷刷新顯示函數(shù),這樣數(shù)碼管就不會不顯示
- }
- TR0=1;//打開定時器0
-
- }
- }
-
- if(key3==0)//判斷按鍵是否按下
- {
- delay(10);//延時10ms用以消抖
- if(key3==0)//按鍵確實按下
- {
- while(key3==0)//松手檢測
- {
- TR0=0;//關(guān)閉定時器0
- }
- }
- }
- if(key4==0)//判斷按鍵是否按下
- {
- delay(10);//延時10ms用以消抖
- if(key4==0)//按鍵確實按下
- {
- while(key4==0)//松手檢測
- {
- TR0=1;//關(guān)閉定時器0
- }
- }
- }
-
- if(key5==0)
- {
- delay(10);//延時10ms消抖
- if(key5==0)//zero按鍵確實按下
- {
- TR0=0;//關(guān)閉定時器0
- while(key5==0)//松手檢測
- {
- display(secs,sec,msec);//還沒松手時,不斷刷新顯示函數(shù),這樣數(shù)碼管就不會不顯示
- }
- TH0=0; //重新裝初值
- TL0=0;
- sec=0;//初始化一下變量為默認的數(shù)值(0);
- msec=0;
- usec=0;
- secs=0;
-
- }
-
- }
-
- }
- void main()
- {
-
- init();
- while(1)
- { dian();
- keyscan();
- display(secs,sec,msec);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
秒表.rar
(22.78 KB, 下載次數(shù): 29)
2018-12-8 17:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
開發(fā)板原理圖V3(1).pdf
(152.3 KB, 下載次數(shù): 27)
2018-12-8 17:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|