根据单片机100案例所做,适合初学者进一步学习单片机的案例.
单片机案例11
结合proteus和keil
11 INT0中断计数器
原理图

程序
#include<reg51.h>
#include<intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
code INT8U CA_Table[]=
{
0xC0,0xF9,
0xA4,0xB0,
0x99,0x92,
0x82,0xF8,
0x80,0x90,
0xFF
};
INT8U show_buffer[]={
0,0,0};
INT16U count=0;
sbit clear_key=P3^6;
void delay_ms(INT16U x)
{
INT8U t;
while(x--)
{
for(t=0;t<120;t++);
}
}
void refresh_show()
{
show_buffer[0]=count/100;
show_buffer[1]=count%100/10;
show_buffer[2]=count%10;
if(show_buffer[0]==0)
{
show_buffer[0]=10;
if(show_buffer[1]==0)
show_buffer[1]=10;
}
P0=CA_Table[show_buffer[0]];
P1=CA_Table[show_buffer[1]];
P2=CA_Table[show_buffer[2]];
}
void main()
{
P0=0xFF;
P1=0xFF;
P2=0xFF;
IE=0x81;
IT0=1;
while(1)
{
if(clear_key==0)
count=0;
refresh_show();
}
}
void ex_int0() interrupt 0
{
EA=0;
delay_ms(10);
count++;
EA=1;
}
单片机案例12
结合proteus和keil
12 INT0与INT1中断计数
原理图

程序
#include<reg51.h>
#include<intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
sbit K3=P3^4;
sbit K4=P3^5;
code INT8U CA_Table[]=
{
0xC0,0xF9,
0xA4,0xB0,
0x99,0x92,
0x82,0xF8,
0x80,0x90,
0xFF
};
code INT8U scan_bits[]=
{
0x20,0x10,
0x08,0x04,
0x02,0x01
};
INT8U show_buffer[]=
{
0,0,0,
0,0,0
};
INT16U count_a=0;
INT16U count_b=0;
void delay_ms(INT16U x)
{
INT8U t;
while(x--)
{
for(t=0;t<120;t++);
}
}
void refresh_show()
{
INT8U i;
show_buffer[5]=count_a/100;
show_buffer[4]=count_a%100/10;
show_buffer[3]=count_a%10;
if(show_buffer[5]==0)
{
show_buffer[5]=10;
if(show_buffer[4]==0)
show_buffer[4]=10;
}
show_buffer[2]=count_b/100;
show_buffer[1]=count_b%100/10;
show_buffer[0]=count_b%10;
if(show_buffer[2]==0)
{
show_buffer[2]=10;
if(show_buffer[1]==0)
show_buffer[1]=10;
}
for(i=<