找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

在52单片机中利用中断与定时器完成数码管显示功能

查看数: 1652 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-5-31 00:08

正文摘要:

我想实现的功能是按下INT0口的按键实现学号的显示,按下INT1口的按键实现数码管第一个位置的数从0到f的循环。但是我编号代码后,只能实现第一个功能即按下INT0口的按键实现学号的显示,再按先INT1的按键没有反应。代 ...

回复

ID:213173 发表于 2023-5-31 12:14


  1. #include <reg51.H>

  2. unsigned char XUEHAO[]={2,0,2,1,3,9,1,5};
  3. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7f,0x39,0x3f,0x79,0x71};
  4. unsigned char count;

  5. void main()
  6. {
  7.         TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
  8.         TH0=(65536-918)/256; //初值高位,定时1ms
  9.         TL0=(65536-918)%256;//初值低位
  10.         TR0 = 1;                        //timer0 start running
  11.         ET0 = 1;                        //enable timer0 interrupt
  12.         EA = 1;                         //open global interrupt switch
  13.         while (1);                      //loop       
  14. }


  15. void tm0_isr() interrupt 1
  16. {
  17.         TH0=(65536-918)/256; //初值高位,定时1ms
  18.         TL0=(65536-918)%256;//初值低位
  19.         P0=0x00;
  20.         P2=~(0x01<<count);
  21.         P0=NixieTable[XUEHAO[count]];
  22.         count=++count%8;
  23. }
复制代码



ID:1080935 发表于 2023-5-31 08:59
不要在中断中设置死循环,根据中断优先级,最高优先级里的死循环是不会被打断,也就是其他中断无效。
解决方法:
1、中断中程序要少;
2、设置标志,在中断中只修改标志;
3、在主程序中根据标志判断执行的程序段。
ID:123289 发表于 2023-5-31 08:22
审题:
1、按键1,做A事件。所以你先编写一个程序CXA,完成A事件。
2、按键2,做B事件。所以你先编写一个程序CXB,完成B事件。
3、编程识别按键1、按键2。
将以上整合一下就可以了:
识别到按键1,就调用CXA;识别到按键2,就调用CXB。
ID:584814 发表于 2023-5-31 08:15
1、学号是个什么鬼 ?
2、拉电阻不是串电阻。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表