这是我今天做的单片机实验,附件里面包含INT0中断计数源代码,proteus仿真工程文件
说明:每次按下计数键时触发INT0中断,中断程序累加计数, 计数值显示在3只数码管上,按下清零键时数码管清零
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- //0~9的段码
- uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
- //计数值分解后各个待显示的数位
- uchar DSY_Buffer[]={0,0,0};
- uchar Count=0;
- sbit Clear_Key=P3^6;
- void Show_Count_ON_DSY()
- {
- DSY_Buffer[2]=Count/100; //获取3个数
- DSY_Buffer[1]=Count%100/10;
- DSY_Buffer[0]=Count%10;
- if(DSY_Buffer[2]==0) //高位为0时不显示
- {
- DSY_Buffer[2]=0x0a;
- if(DSY_Buffer[1]==0) //高位为0,若第二位为0同样不显示
- DSY_Buffer[1]=0x0a;
- }
- P0=DSY_CODE[DSY_Buffer[0]];
- P1=DSY_CODE[DSY_Buffer[1]];
- P2=DSY_CODE[DSY_Buffer[2]];
- }
- //主程序
- void main()
- {
- P0=0x00;
- P1=0x00;
- P2=0x00;
- IE=0x81; //允许INT0中断
- IT0=1; //下降沿触发
- while(1)
- {
- if(Clear_Key==0) Count=0; //清0
- Show_Count_ON_DSY();
- }
- }
- //INT0中断函数
- void EX_INT0() interrupt 0
- {
- Count++; //计数值递增
- }
复制代码
全部资料51hei下载地址:
INT0中断计数.rar
(33.78 KB, 下载次数: 47)
|