熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2020-5-30 19:12
正文摘要:大家好,我最近自學(xué)51單片機(jī),新手小白一個(gè)。我想用89C52實(shí)現(xiàn)下面功能:利用單89C52兩個(gè)外部中斷測(cè)輸入的兩個(gè)先后產(chǎn)生的單脈沖發(fā)生產(chǎn)間隔,也就是圖中CH1輸入脈沖到CH2輸入脈沖的間隔時(shí)間,利用數(shù)碼管顯示出來(lái),兩個(gè) ... |
|
1、采用的共陽(yáng)極數(shù)碼管,P1是段碼,P2是位選。 2、檢測(cè)INT0,INT1的下降沿間隔。輸出數(shù)字,100us輸出100,使用定時(shí)器0檢測(cè)間隔時(shí)間。最大檢測(cè)65535us |
|
#include<reg52.h> #define uint unsigned int #define uchar unsigned char // 0 1 2 3 4 5 6 7 8 9 uchar code Duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //??0-9 uchar code wei[]={1,2,4,8}; // uchar Data_buffer[4]; uchar disp_num=0; uint time=0; uint time_count=0; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void disp_change(uint data_change) { Data_buffer[0]=data_change/1000; Data_buffer[1]=data_change/100%10; Data_buffer[2]=data_change/10%10; Data_buffer[3]=data_change%10; } void display() { if(disp_num==0)disp_change(time); P1=0; P2=wei[disp_num]; P1=Duan[Data_buffer[disp_num]]; if(disp_num==3)disp_num=0; else disp_num++; } void main() { EX0=0; EX1=0; EA=1; IT0=1; // IT1=1; TMOD=0x01; // TH0=0x0; //100us??? TL0=0x0; TR0=0; time=1234; EX0=1; ET0=1; while(1) { display(); delay(100); } } void zhongduan1()interrupt 0 { TR0=1; time_count=0; EX0=0; EX1=1; } void zhongduan2()interrupt 2 { TR0=0; time=TH0*256+TL0-15; TH0=0; TL0=1; EX0=1; EX1=0; } |
Powered by 單片機(jī)教程網(wǎng)