/* *INT0ÖжϼÆÊý* */ #include <reg51.h> typedef unsigned char uint8; typedef unsigned int uint16; sbit K2 = P3^5; void delay(uint16 x) { uint16 i,j; for(i = x; i > 0; i --) for(j = 114; j > 0; j --); } code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; uint8 Buffer_Counts[]={0,0,0}; uint16 Count=0; void Show_Counts() { uint8 i; Buffer_Counts[2] = Count / 100; Buffer_Counts[1] = Count % 100 /10; Buffer_Counts[0] = Count % 10; if(Buffer_Counts[2] == 0) { Buffer_Counts[2] = 10; if(Buffer_Counts[1] == 0) Buffer_Counts[1] = 10; } for(i = 0;i < 3;i ++) { P0 = 0xFF; P2 = 0x80 >> i; P0 = LED_CODE[Buffer_Counts[i]]; delay(2); } } void main() { IP = 0x01; IT0 = 1; IE = 0x81; while(1) { if(K2 == 0) Count = 0; Show_Counts(); } } void ISR0() interrupt 0 { Count++; }可以解释一下这段代码吗
时间: 2024-04-02 17:31:51 浏览: 102
安防系统通用图形符号.zipÊÄɼCADÍ¿dwg¸ÊÏÔ
这段代码是经典的基于单片机的计数器应用,主要实现了以下功能:
1.通过按下K2键清零计数器Count;
2.使用LED码盘显示计数器Count的数值。
下面是代码的具体分析:
1.首先定义了三个无符号字符型变量,用于存放数码管显示的位数,分别为百、十、个位;
2.定义了一个计数器变量Count,用于存储计数器的数值;
3.定义了一个LED码盘显示的数组LED_CODE,用于将数值转换为LED码盘对应的码值;
4.定义了一个函数Show_Counts,用于将计数器的数值显示在数码管上;
5.在主函数中,设置了外部中断0的触发方式为下降沿触发,并开启了外部中断0的中断源;
6.在主函数中,通过轮询的方式,不断调用Show_Counts函数,将计数器的数值显示在数码管上;
7.在外部中断0的中断服务函数中,将计数器Count的值加1;
8.其中IP、IT0和IE是单片机中的寄存器,用于设置中断优先级、外部中断0的触发方式和开启中断源等。
阅读全文