簡易計分器,兩個外部中斷,每次加一。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (20.59 KB, 下載次數: 64)
下載附件
2018-1-8 00:53 上傳
0.png (14.14 KB, 下載次數: 69)
下載附件
2018-1-8 00:53 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define dat P0
- code uchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uint second=0,minter=0,hour=0;
- uint mge,mshi,hshi,hge;
- static char court=0;
- sbit q1=P2^0;
- sbit q2=P2^1;
- sbit q3=P2^2;
- sbit q4=P2^3;
- sbit q5=P2^4;
- sbit q6=P2^5;
- sbit q7=P2^6;
- sbit q8=P2^7;
- sbit key1=P3^2;
- sbit key2=P3^3;
- void delay(uint number)
- {
- uchar i,j;
- for(i=0;i<number;i++)
- for(j=0;j<200;j++);
- }
- void int11() interrupt 1 using 2 //中斷服務
- {
- TH0=0x5c;
- TL0=0xb0;
- //court++;
- }
-
- void int0() interrupt 0 using 1 //外部中斷int0
- {
- minter++;
- if(minter==99)
- minter=0;
- }
- void int1() interrupt 2 using 1 //外部中斷int1
- {
- hour++;
- if(hour==99)
- hour=0;
- }
- void main()
- {
- TMOD=0X01;
- TH0=0x5c;
- TL0=0xb0;
- ET0=1; //打開定時器T0中斷
- EX0=1; //打開外部中斷0中斷
- EX1=1; //打開外部中斷1中斷
- IT0=1; //外部中斷0觸發
- IT1=1; //外部中斷1觸發
- EA=1; //開總中斷
- TR0=1; //啟動定時器0
- while(1)
- {
- mshi=minter/10;
- mge=minter%10;
- hshi=hour/10;
- hge=hour%10;
- dat=d[mge];
- q8=1;
- delay(2);
- q8=0;
- dat=d[mshi];
- q7=1;
- delay(2);
- q7=0;
-
- dat=0xbf;
- q6=1;
- delay(2);
- q6=0;
- dat=0xbf;
- q5=1;
- delay(2);
- q5=0;
- dat=0xbf;
- q4=1;
- delay(2);
- q4=0;
- dat=0xbf;
- q3=1;
- delay(2);
- q3=0;
- dat=d[hge];
- q2=1;
- delay(2);
- q2=0;
- dat=d[hshi];
- q1=1;
- delay(2);
- q1=0;
- if(court==20)
- {court=0;
- second++;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
計分器3.rar
(57.2 KB, 下載次數: 38)
2018-1-7 13:57 上傳
點擊文件名下載附件
簡易計分器 下載積分: 黑幣 -5
|