找回密码
 立即注册

QQ登录

只需一步,快速开始

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

Proteus仿真51单片机可控硅调压代码加电路图

[复制链接]
跳转到指定楼层
楼主
#include<reg51.h>
unsigned char num=10;
bit bz=0;
sbit jia=P1^0;
sbit jian=P1^1;
sbit pwmout=P1^2;

void del_ms(unsigned int n)//ms延时函数
{
        unsigned char j;
  while(n--)
  {for(j=0;j<125;j++);}
}
void Timer0_Init(void)               
{
        TMOD = 0x01;                                       
  TL0 = 0xCE;                //50微秒@12.000MHz
        TH0 = 0xFF;        
        TF0 = 0;                                
        ET0 = 1;                                
        TR0=1;
}
void Timer0_Isr(void) interrupt 1
{
        static unsigned char count=0;
        static unsigned char num_d=0;
  TL0 = 0xCE;               
        TH0 = 0xFF;        
        TF0 = 0;
        
        if(bz==1)
        {
          count++;
                num_d=160-num;
          if(count>=num_d)
          {
                  pwmout=0;               
          }
          if(count>=160)//160*50us=8ms
          {
                  count=0;
                  bz=0;
          }   
        }   
}

void exint0() interrupt 0  
{
        pwmout=1;
        bz=1;
}

void main()
{
          Timer0_Init();
    IT0 = 1;                        
    EX0 = 1;                     
    EA = 1;                        

    while (1)
                {
                        if(jia==0)
                        {
                                del_ms(20);
                                if(jia==0)
                                {
                                        while(jia==0)
                                        {
                                                num=num+10;
                                                if(num>=140)
                                                {
                                                        num=140;
                                                }
                                        }
                                }
                        }
                        if(jian==0)
                        {
                                del_ms(20);
                                if(jian==0)
                                {
                                        while(jian==0)
                                        {
                                                num=num-10;
                                                if(num<=10)
                                                {
                                                        num=10;
                                                }
                                        }
                                }
                        }
                }
}
仿真虚拟示波器显示波形宽度随按键没有同步变化,要么一下加到最大,要么一下减到最小,不知是代码有误还是proteus出错。
把D3去掉接入U2可控硅触发电路就不能仿真了,不知道是和原因。

1.jpeg (226.32 KB, 下载次数: 0)

1.jpeg

仿真.zip

46.71 KB, 下载次数: 0, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:161164 发表于 2025-1-20 10:00 | 只看该作者
按键代码逻辑错误
建议改为下面

回复

使用道具 举报

板凳
ID:1136941 发表于 2025-1-20 13:37 | 只看该作者
lkc8210 发表于 2025-1-20 10:00
按键代码逻辑错误
建议改为下面

谢谢建议,现在正常了,是我弄错了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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