中易网

请问这个数码管中断程序要怎么读啊?从哪里开始看?是从主程序开始吗?什么时候中断,什么时候送显示?

答案:2  悬赏:0  
解决时间 2021-02-17 15:06
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uint8 a[6];
uint16 counter = 0;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;

timer1_init()
{
TMOD |= 0x10; //或等于 位操作
TMOD &= 0xdf; //与等于 TMOD = 0x10 定时器T1
TH1 = 0xFC;
TL1 = 0x67;
TR1 = 1;
}

int_init()
{
EA = 1; //打开中断
ET1 = 1; //定时器1中断
}

display_led()
{
static uint8 j = 0;
switch(j)
{
case 0:
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 0;
j++;
P0 = number[a[0]];
break;
case 1:
ADDR0 = 1;
ADDR1 = 0;
ADDR2 = 0;
j++;
P0 = number[a[1]];
break;
case 2:
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 0;
j++;
P0 = number[a[2]];
break;
case 3:
ADDR0 = 1;
ADDR1 = 1;
ADDR2 = 0;
j++;
P0 = number[a[3]];
break;
case 4:
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 1;
j++;
P0 = number[a[4]];
break;
case 5:
ADDR0 = 1;
ADDR1 = 0;
ADDR2 = 1;
j = 0;
P0 = number[a[5]];
break;
default:
break;
}

}

main()
{
ENLED = 0;
ADDR3 = 1;
timer1_init(); //定时器1初始化
int_init(); //中断初始化
while(1); //循环

}

interrupt_timer1() interrupt 3 //定时器1 中断标志位3
{
static uint32 sec = 0;
TH1 = 0xFC;
TL1 = 0x67;
counter++;
if(counter == 1000)
{
sec++;
counter = 0;
a[0] = sec%10; //对10取余
a[1] = sec/10%10;
a[2] = sec/100%10;
a[3] = sec/1000%10;
a[4] = sec/10000%10;
a[5] = sec/100000%10;
}
display_led();
}
最佳答案
从中断的原理开始了解吧,先看主程序,这是一个定时器中断。
interrupt_timer1() interrupt 3 //定时器1 中断标志位3 这是中断程序。

中断的原理,简单来说,就是主程序执行时,中断条件满足了,就进行中断程序执行,执行完中断程序再返回主程序。
你还是看看单片机原理的书和C语言的书,再看这种程序吧。
全部回答

#include <reg52.h> #define uchar unsigned char //对函数进行声明 void delay(int n);  void time_display();   //定义用到的变量

 uchar count1=0,min=0,sec=0;    sbit cs_1=p2^0; //led位选  sbit cs_2=p2^1;  sbit cs_3=p2^2;  sbit cs_4=p2^3;

  uchar  number[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,     0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//4*4键盘的输入码   void  main(void) { //uchar shouci;  p3=0xff;p2=0xef;p1=0xff;p0=0xff;  tmod=0x11;    //初始化定时器  th0=(65536-5000)/256;  tl0=(65536-5000)%256;  tl1=-50000%256;  th1=-50000/256;  ea=1; //开中断  et0=1;  et1=1;  tr0=1;  tr1=1;    while(1)    //进入主循环     {     time_diaplay();     }

}

void  delay(int n)   //10ms {  unsigned char i,j,k;     while(--n)   {    for(i=5;i>0;i--)

    for(j=4;j>0;j--)

    for(k=248;k>0;k--);

  }   }

   void dingshi() interrupt 3 using 1 {tl1=-50000%256;  th1=-50000/256;  if(count1==20)   //计数20次为1秒    {count1=0;     if(sec==59)     {sec=0;     if(min==59)     min=0;     else min++;     }     else sec++;    }    else count1++;  }

    void time_diaplay()

{    {    cs_4=1;     p0=number[sec%10] ;     delay(2);     cs_4=0;;     cs_3=1;     p0=number[sec/10];     delay(2);     cs_3=0;     cs_2=1;     p0=number[min%10];     delay(2);     cs_2=0;     cs_1=1;     p0=number[min/10];     delay(2);     cs_1=0;

  // }  }

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
同和堂大药店NO.100在哪里啊,我有事要去这个
在手机通信领域,频段越低越好还是越高越好?
我想请问下,从洛阳火车站到孙旗屯二中怎么走
穆罕默德有几个妻子,出身怎样?
夜色烧烤这个地址在什么地方,我要处理点事
赤水市卓越轮胎总汇地址有知道的么?有点事想
我是高中生 想减肥. 晚饭不吃 想晚上再做点运
猜一猜 据说这张图里 有9⃣首儿歌 你能找到几
完美结束沙巴之旅的英文怎么翻译
阻垢剂人喝了会中毒吗
广汽传祺gs42014款1,8t二手车价格
南店冲地址有知道的么?有点事想过去
我的q币还有13.5个 为什么买一个1Q币的道具
中国电信官亭营业厅地址有知道的么?有点事想
虽然不能在家里过春节,但是能和朋友们一起吃
推荐资讯
我们最值得自豪的不在于从不跌倒,而在于每次
相机上的L00K是什么意思
篮球 怎么防守靠打?
我寝室的同学惹到学姐了,我该怎么办呢?
阳光恒生药房东升店地址在什么地方,想过去办
为什么我的淘宝只能用支付宝支付
求一本篮球小说,女主洁西卡
手机QQ管家防盗功能锁住SM卡怎么办?
飘柔洗发水男士用好吗?
卑孽的意思是什么?卑孽的释义是什么啊?
自制力是什么
欧普led灯珠与三雄哪个好
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?