找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机LED灯中断程序错误求助

[复制链接]
跳转到指定楼层
楼主
实验要求:
实验三 LED灯控制器
实验目的:加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。
实验内容:利用C8051F310单片机设计一个LED灯控制器
主要功能和技术指标要求:
1. LED灯外接于P0.0端。
2. LED灯分别按2Hz,1Hz和0.3Hz三种不同频率闪动,各持续10秒。
3. 在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次,时长0.5秒。
4. 利用单片机内部定时器定时,要求采用中断方式。
5. 单片机复位后开始执行上述程序。
提高要求:
1. 使用按键(KINT)控制LED灯闪烁模式的切换。
2. 在LED数码管上显示当前模式,显示字符为
工作模式 数码管显示字符
2Hz 2
1Hz 1
0.3Hz 0.3
3.其它个性化设计(选做)


程序如上,每次想利用KINT(P3.1)调用切换模式的中断,就出现以下情况,求求各位大佬应该怎么办

L8A${B181S}5)N8IY0W`IYU.png (26.75 KB, 下载次数: 72)

L8A${B181S}5)N8IY0W`IYU.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

板凳
ID:715652 发表于 2020-6-6 14:47 | 只看该作者
本帖最后由 渣渣馬 于 2020-6-6 21:44 编辑

#include<reg51.h>
#include<intrins.h>
sbit D1=P0^0;  //LED闪烁
sbit KINT=P3^1;  //开关
sbit LS=P3^7;    //无源蜂鸣器
char code DATA[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40};  //CA段码
char code a[][2]={{2,10},{1,10},{11,3}};  //数码显示的几种模式
int t=0,temp=5;  //t用于变数码管,temp用于时间变换
void DelayMs(int x)  //延时
{
        int i;
        while(x--)        for(i=0;i<120;i++);
}
void LED2()  //数码显示
{
        int i,m;
        m=0x01;
        for(i=0;i<2;i++)        P2=0xff,P1=_crol_(m,i),P2=DATA[a[t]],DelayMs(1);
}
void BUZZ()  //蜂鸣器响0.5s
{
        int i;
        for(i=0;i<500;i++)        LS=!LS,DelayMs(2);
}
void init()  //初始化
{
        IE=0x8a;  //¿aT0
        TR0=1;
        TR1=1;
        TMOD=0x22;
        TH0=(256-200)%256;  
        LS=1;
        D1=1;
}
void main()   
{
        init();
        while(1)
        {
                if(!KINT)  开关检测
                {
                        while(!KINT);   //等待开关释放
                        t=++t%3;  //0~2
                        switch(t)
                        {
                                case 0:temp=5;break;  //2Hz
                                case 1:temp=10;break; //1Hz
                                case 2:temp=3;break;  //0.3Hz
                                default:break;
                        }        
                }
        }
}
void time0() interrupt 1   //定时用
{
        static int t0=0,t1=0;
        t0++;
        if(t0==500)  //100ms
        {
                t1++;
                t0=0;
                if(t1==temp)   //¸÷ÖÖê±¼äμÄÇD»»
                {
                        D1=!D1;
                        BUZZ();
                        t1=0;
                }
        }
}

void time1() interrupt 3  //LED2数码显示
{
         LED2();
}
/*代码有点多,我是自己敲得,对你希望有用!把代码放在Keil中显示注释*/


回复

使用道具 举报

沙发
ID:715652 发表于 2020-6-5 11:51 | 只看该作者
兄弟,你这H5写的就不到位了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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