找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1760|回复: 17
收起左侧

有人能帮我看一看程序有哪里不对吗

  [复制链接]
回帖奖励 20 黑币 回复本帖可获得 20 黑币奖励! 每人限 1 次
ID:853422 发表于 2020-12-4 10:37 | 显示全部楼层 |阅读模式
  • #include<reg52.h>
  • #include<intrins.h>
  • #define uint unsigned int
  • #define uchar unsigned char
  • sbit SW1=P2^0;//用于调高灯的亮度
  • sbit SW2=P2^1;//用于调低灯的亮度
  • sbit CF=P2^2;//用于触发可控硅
  • sbit SW3=P2^3;//用于控制灯的亮灭
  • void kdelay();
  • void maichong();
  • delay500us(uint z);
  • void delay10us();
  • void liangmie();
  • uint x,y,z,k,i,j;
  • void main()
  • {
  • IT0=1;//设定外部中断 0 为下降沿触发方式
  • EX0=1;//开外部中断 0
  • P2=0xff;
  • z=10;
  • j=0;
  • while(1)
  • {
  • if(SW1==0)
  • {
  • kdelay(); //软件 2ms 延时防抖
  • if(SW1==0)
  • {
  • z--;
  • if(z==0){z=19;}//灯达到最亮以后继续按下 SW2,灯会变到最暗
  • }
  • while(!SW1);//等待按键弹起
  • }
  • if(SW2==0)
  • {
  • kdelay();
  • if(SW2==0)
  • {
  • z++;
  • if(z==20){z=0;}//灯达到最暗以后继续按下 SW1,灯会变到最亮
  • }
  • while(!SW2);
  • }
  • liangmie();
  • if(j==0)
  • {
  • EA=1; //开总中断
  • }
  • else
  • {
  • EA=0; //关总中断
  • }
  • }
  • }
  • /************2ms 按键防抖动延时函数**********/
  • void kdelay()
  • {
  • for(i=0;i<200;i++)
  • {
  • delay10us(); //调用 200 次 10us 约为 2ms
  • }
  • }
  • /*将半周期 0.01 秒平均分成 20 等分,每等分为 0.5 毫秒,即 500us*/
  • /************0.5ms 倍数的子函数************/
  • delay500us(uint z)
  • {
  • uchar x,y;
  • for(x=0;x<z;x++)
  • {
  • for(y=0;y<50;y++)
  • {
  • delay10us();//调用 50 次 10us 约为 502us
  • }
  • }
  • }
  • /*************脉冲函数*****************/
  • void maichong()
  • {
  • CF=0;
  • for(k=0;k<10;k++)
  • {
  • delay10us();//调用 10 次 10us 约为 102us
  • }
  • CF=1;
  • }
  • /*************10us 延时函数**************/
  • void delay10us()
  • {
  • _nop_(); _nop_();_nop_();
  • _nop_(); _nop_();_nop_();
  • }
  • /************灯的亮灭控制函数***********/
  • void liangmie()
  • {
  • if(SW3==0)
  • {
  • kdelay();
  • if(SW3==0)
  • {
  • j++;
  • if(j==2){j=0;}
  • }
  • while(!SW1);//等待按键弹起
  • }
  • }
  • /**********外部中断 0 函数**********/
  • void Int0(void) interrupt 0
  • {
  • delay500us(z);//控制角的大小由 z 决定
  • maichong();//发脉冲
  • }

回复

使用道具 举报

ID:853422 发表于 2020-12-4 10:38 | 显示全部楼层
用的51的开发板 没有反应啊
回复

使用道具 举报

ID:277550 发表于 2020-12-4 12:22 | 显示全部楼层

大哥  至少说说程序是干嘛的、什么环境(软硬件环境)的,遇到怎样的问题
回复

使用道具 举报

ID:756334 发表于 2020-12-4 13:28 | 显示全部楼层
有仿真图吗?
回复

使用道具 举报

ID:853422 发表于 2020-12-4 13:46 | 显示全部楼层
是一个调灯亮度的台灯,用的MOC3020  和BTA 16的,51单片机的
回复

使用道具 举报

ID:466505 发表于 2020-12-4 13:59 | 显示全部楼层
程序干嘛的不知道,电路不知道,全靠猜,谁能看懂
回复

使用道具 举报

ID:711539 发表于 2020-12-4 14:22 | 显示全部楼层
外部中断0的P3.2脚,硬件连接是怎么样的?
回复

使用道具 举报

ID:574482 发表于 2020-12-4 15:00 | 显示全部楼层
106行的SW1应改为SW3.
看你的程序也是相当的头痛!
回复

使用道具 举报

ID:853422 发表于 2020-12-4 15:13 | 显示全部楼层
这是图片 谢谢大哥们了
172417a224l44gj22kyjii.png
回复

使用道具 举报

ID:466505 发表于 2020-12-5 09:48 | 显示全部楼层
31脚要接高电平吧
回复

使用道具 举报

ID:852300 发表于 2020-12-5 11:31 | 显示全部楼层
除了106行的SW3,光耦的工作电流不够,不能触发中断也是有可能的!
回复

使用道具 举报

ID:790408 发表于 2020-12-5 12:29 | 显示全部楼层
先检查一下接线是否正确,还有程序不要写在main函数中,自己可以试着自己写个封装库
回复

使用道具 举报

ID:342954 发表于 2020-12-5 15:01 | 显示全部楼层
你要实现什么东西说出来呀,才能说那里有没有反应吧,如果是STC的单片机先把要PM20 寄存器初始化一下

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:687694 发表于 2020-12-5 16:23 | 显示全部楼层
硬件检测TB是否有输出。检测CF是否有输出。
软件,程序流程相当混乱,自己画个程序流程框图不费事,这是好习惯。触发式调光对时间控制严格要求,你在中断中调用函数就不对,按键检测采用delay也不对,改状态机读取按键。
小技巧,定义一个led,任意脚,让它作为程序调试指示器,例如判断是否中断,在中断函数中加一条IO反转。或者赋值。判断中断是否执行完毕,就在最后面加一句反转就能知道程序工作的位置,是否完成等。
调试完毕解除掉它就行了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:855007 发表于 2020-12-5 17:13 | 显示全部楼层
PM20 寄存器初始化一下,31脚要接高电平
回复

使用道具 举报

ID:783844 发表于 2020-12-5 20:52 | 显示全部楼层
我觉得31脚=0才是对的
回复

使用道具 举报

ID:855592 发表于 2020-12-6 20:37 | 显示全部楼层
106行的SW1应改为SW3
回复

使用道具 举报

ID:761759 发表于 2020-12-6 21:25 | 显示全部楼层
sbit SW1=P2^0;//用于调高灯的亮度 sbit SW2=P2^1;//用于调低灯的亮度 sbit CF=P2^2;//用于触发可控硅 sbit SW3=P2^3;//用于控制灯的亮灭

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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