![]() |
發布時間: 2019-4-12 13:15
正文摘要:5)計數器方式,原理圖如下(1)用內部定時器/計數器1的計數功能,工作在方式2,實現計數10次產生中斷使P1.7所接發光二極管點亮(計數用數碼管顯示,需加數碼管)。(2)用內部定時器/計數器1的計數功能,工作在方式1 ... |
#include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit js=P3^5; sbit LED1=P2^0; sbit key1=P3^3; uchar code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uint read() { uchar t1; uint val; while(1) { t1=TL1; //讀取寄存器值 break; } val=t1-246; //10次的時候就中斷 return val; } void delay(uint k) { uint x,y; for(x=k;x>0;x--) for(y=110;y>0;y--); } void Time0Init() { TMOD=0x60; TH1=0xF6; TL1=0xF6; ET1=1; EA=1; TR1=1; } void display(uint n)//****************************************************時鐘顯示 { uint z; for(z=0;z<2;z++) { if(z==0) { LSA=1;LSB=0;LSC=0; P0=smg[n/10]; delay(10); //延時函數,沒有延時將不能顯示 P0=0x00; } if(z==1) { LSA=0;LSB=0;LSC=0; P0=smg[n%10]; delay(10); P0=0x00; } } } void main() //*********************主函數 { uint num; Time0Init(); while(1) { if(key1==0) { LED1=1; delay(20); if(key1==0) { js=1; delay(10); js=0; //給它低電平,讓它計數 delay(10); num=read(); //將寄存器的值放入num }while(!key1); } display(num); } } void Time0() interrupt 3 { LED1=0; } 這個是可以實現功能的一個代碼,但是使用了獨立按鍵判斷,我老師說那個P35接口可以直接給低電平計數,但是我不知道怎么改 |