找回密码
 立即注册

QQ登录

只需一步,快速开始

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

做微风扇,为什么程序烧录到51单片机里,电机不运转啊

[复制链接]
跳转到指定楼层
楼主
ID:1084376 发表于 2023-6-15 20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h> //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int//对数据类型进行声明定义
bit  qtflag=1;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit DIO_595=P1^4;
sbit RCK_595=P1^5;
sbit SCLK_595=P1^6;
sbit led=P1^7;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit ENA=P0^2;
sbit IN1=P0^0;
sbit IN2=P0^1;
void pwm();

uchar msflag,sdh,sdl,sdflag=7;
uint miao,shi,fen;
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delayms(uint xms)
{
uint i,j;
for (i=xms;i>0;i--)
for (j=110;j>0;j--);
}
void delay(uint i)
{
while(i--);
}
void Hc595SendByte(uchar dat)
{
uchar a;
SCLK_595=0;
RCK_595=0;
for(a=0;a<8;a++)
{
DIO_595=dat>>7;
dat<<=1;

SCLK_595=1;
delay(1);
SCLK_595=0;
}

RCK_595=1;
delay(1);
RCK_595=0;
}
void display()
{
uchar i;
if(msflag==0)
{
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
D1=1;D2=0;D3=0;D4=0; Hc595SendByte(smgduan[fen/10]); break;//显示第1位
case(1):
D1=0;D2=1;D3=0;D4=0; Hc595SendByte(smgduan[fen%10]); break;//显示第2位
case(2):
D1=0;D2=0;D3=1;D4=0; Hc595SendByte(smgduan[miao/10]); break;//显示第3位
case(3):
D1=0;D2=0;D3=0;D4=1; Hc595SendByte(smgduan[miao%10]); break;//显示第4位
}
delay(50);//间隔一段时间扫描
Hc595SendByte(0x00);//消隐
}
}
if(msflag==1)
{
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
D1=1;D2=0;D3=0;D4=0; Hc595SendByte(0x00); break;//显示第1位
case(1):
D1=0;D2=1;D3=0;D4=0; Hc595SendByte(0x00); break;//显示第2位
case(2):
D1=0;D2=0;D3=1;D4=0; Hc595SendByte(0x00); break;//显示第3位
case(3):
D1=0;D2=0;D3=0;D4=1; Hc595SendByte(smgduan[sdflag]); break;//显示第4位
}
delay(50);//间隔一段时间扫描
Hc595SendByte(0x00);//消隐
}
}
if(msflag==2)
{
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
D1=1;D2=0;D3=0;D4=0; Hc595SendByte(0x00); break;//显示第1位
case(1):
D1=0;D2=1;D3=0;D4=0; Hc595SendByte(0x00); break;//显示第2位
case(2):
D1=0;D2=0;D3=1;D4=0; Hc595SendByte(0x00); break;//显示第3位
case(3):
D1=0;D2=0;D3=0;D4=1; Hc595SendByte(0x00); break;//显示第4位
}
delay(500);//间隔一段时间扫描
Hc595SendByte(0x00);//消隐
}
}
}
void key()
{
if(k1==0) //检测K1键是否按下
{
delay(100);//按键消抖
if(k1==0)
{
msflag++;
if(msflag==3)
msflag=0;
}
while(!k1); //检测K1键是否松开
}
if(k2==0)
{
delay(100);
if(k2==0)
{
qtflag=~qtflag;
}
while(!k2);
}
if(k3==0)
{
delay(100);
if(k3==0)
{
if(sdflag<7)
sdflag++;
}
while(!k3);
}
if(k4==0)
{
delay(100);
if(k4==0)
{
if(sdflag>1)
sdflag--;
}
while(!k4);
}
}
void pwm()
{
switch(sdflag)
{
case 7:
sdh=10;sdl=0;break;
case 6:
sdh=9;sdl=1;break;
case 5:
sdh=8;sdl=2;break;
case 4:
sdh=7;sdl=3;break;
case 3:
sdh=6;sdl=4;break;
case 2:
sdh=5;sdl=5;break;
case 1:
sdh=4;sdl=6;break;
}
}
void qd()
{
if(qtflag)
{
uchar i;
for(i=0;i<sdl;i++)
{
ENA=0;
display();
}
for(i=0;i<sdh;i++)
{
ENA=1;
display();
}
}
else
ENA=0;
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
}


void main()
{
Timer0Init();//定时器0初始化
TR0=1;
IN1=1;
IN2=0;
while(1)
{
display();
key();
pwm();
qd();
}
}


void Timer0()interrupt 1
{
static uint i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)
{
miao++;
i=0;
led=~led;
if(miao==60)
{
fen++;
miao=0;
if(fen==60)
{
shi++;
fen=0;
if(shi==24)
{
shi=0;
}
}
}
}
}

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

使用道具 举报

沙发
ID:161164 发表于 2023-6-15 22:11 | 只看该作者
电路图?
回复

使用道具 举报

板凳
ID:123289 发表于 2023-6-16 11:24 | 只看该作者
因为你不懂电机旋转的原理。补一下吧。
回复

使用道具 举报

地板
ID:883242 发表于 2023-6-20 11:05 | 只看该作者
先用万用表检查电机两端电压。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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