分类：电脑/网络-硬件
问题：一个简单的单片机程序问题函数功能：用LED灯数码管显示计数器对T 
功能：用LED灯数码管显示计数器对T0的计数值。#include<reg52.h>  unsigned char x;unsigned char s[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit P34=P3^4;delay1ms(int i)   //1秒基准延时函数{int j;while(i--){for(j=0;j<115;j++);}}void display(unsigned char x)功能：用LED灯数码管显示计数器对T0的计数值。#include<reg52.h>  unsigned char x;unsigned char s[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit P34=P3^4;delay1ms(int i)   //1秒基准延时函数{int j;while(i--){for(j=0;j<115;j++);}}void display(unsigned char x){P2=0xef;P0=s[x/1000];delay1ms(5);P2=0xdf;P0=s[x%1000/100];delay1ms(5);P2=0xbf;P0=s[x%1000%100/10];delay1ms(5);P2=0x7f;P0=s[x%1000%100%10];delay1ms(5);}void main(void){TMOD=0x06;//TMOD=000 0110BEA=1;  //开放总中断ET0=1;  //允许定时器T0的中断EX0=1;//允许外中断INT0IT0=1;//INT0为下负脉冲触发方式（TCON的，处理外部中断）TR0=1;//启动T0（TCON的处理定时器工作的）TH0=TL0=256-1;//计数器T0高8位赋初值25566while(1){//x=TL0;display(x);      }}//INT0终端函数（中断服务函数）void clear()   interrupt 0{x=0;          }//T0 计数器中断     () void Key_counter() interrupt 1 {   if(P34==0)   {      delay1ms(20);      if(P34==0)        {           x=(x+1)%10000;  //因为是4位数码管显示 所以要把计的数控制在10000以内（000~999）        }   } }有几个小问题：1.这个程序执行的流程可以大致说一下吗？2.在主函数的while里面，为什么要把x=TL0注释掉？3.void clear() interrupt 0里面的x=0；可以理解为对x赋初值吗？谢谢！
回答：1 大致分为3 个模块,显示函数,中断,主函数,流程如下:首先进入主函数,打开计数器开关和外部中断开关,然后进入中断服务函数,开始计数.
2,在while(),只需显示就可以了,因为在中断中已经对x计数赋值了,所以不需要了
3.可以那样理解,不过最好说成清零,因为在keil c 中默认初值为0,如果你不对其进行赋值的话.
不知道是你自己写的程序不?主函数里面最好不要放中断设置,放到初始化函数中,这样就显得有条理了.我也是学单片机的,大家共同交流