proteus仿真,51利用脉冲发射器和中断 实现出租车里程的计数功能

keil代码

 #include
 #define uchar unsigned char
 #define uint unsigned int
 uchar data buf[6];				        //对应里程表里的6位
 unsigned long int count=0;   		//里程的计数
 bit button; 				        	//实现里程的启动和清零
 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 void delay(uint d)
 {
 	uchar i,j;
	for(i=0;i<d;i++)
	for(j=0;j<110;j++);
 }
void num() interrupt 0	  //外部中断0,实现里程表的计数 
 {	 
 	if(button==1)
	{
 		count=count+1;
		if(count==1000000)
			count=0;
 	 }	 
 }
 void s1() interrupt 2				//外部中断1,中断实现启动和清零
 {						//按一下开关,显示目前里程数,再按一下清零并重启计里程数
 	button=~button;
	if(button==1)
		count=0;
 }
 
 void display()		   //里程表显示函数
 {
 	unsigned char i,bitcode,segcode;//bitcode 位码,segcode段码
 	buf[0]=(count/100000)%10;
	buf[1]=(count/10000)%10;
	buf[2]=(count/1000)%10;
	buf[3]=(count/100)%10;
	buf[4]=(count/10)%10;
	buf[5]=count%10;	
	bitcode=0xfe;
	for(i=0;i<6;i++)
	{
		segcode=buf[i];
		P1=table[segcode];
		P2=bitcode;
		delay(20);
		P2=0xff;
		bitcode=bitcode<<1;
		bitcode=bitcode|0x01;
	}  

 }
 void main()
 {	
	IE=0x85;  		//准许外部中断0和1	等同于EA=1;	EX1 = 1;EX0=1;
	IP=0x04;	   	//设置外部中断1大于外部中断0
	IT0=1;
	IT1=1;
	while(1)
	{ 
		display();
	}
 }

proteus仿真电路图
proteus仿真,51利用脉冲发射器和中断 实现出租车里程的计数功能_第1张图片
所需器件名:
proteus仿真,51利用脉冲发射器和中断 实现出租车里程的计数功能_第2张图片

你可能感兴趣的:(51单片机)