找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 598|回复: 4
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
我想实现的功能是按下INT0口的按键实现学号的显示,按下INT1口的按键实现数码管第一个位置的数从0到f的循环。但是我编号代码后,只能实现第一个功能即按下INT0口的按键实现学号的显示,再按先INT1的按键没有反应。代码与Proteous的仿真图见附件。代码用了定时器中断。求助大佬,怎么回事。十分感谢。

屏幕截图 2023-05-30 235741.png (47.25 KB, 下载次数: 18)

屏幕截图 2023-05-30 235741.png

代码.rar

24.83 KB, 下载次数: 10

仿真图.rar

50.78 KB, 下载次数: 4

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2023-5-31 08:15 | 只看该作者
1、学号是个什么鬼 ?
2、拉电阻不是串电阻。
回复

使用道具 举报

板凳
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:1080935 发表于 2023-5-31 08:59 | 只看该作者
不要在中断中设置死循环,根据中断优先级,最高优先级里的死循环是不会被打断,也就是其他中断无效。
解决方法:
1、中断中程序要少;
2、设置标志,在中断中只修改标志;
3、在主程序中根据标志判断执行的程序段。
回复

使用道具 举报

5#
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. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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