技术文档

单片机if( k1) 正反转可控的直流电机(单片机)

小编 2025-07-26 技术文档 23 0

正反转可控的直流电机(单片机)

单片机应用技术课程报告

实验名称

正反转可控的直流电机

实验时间

2021年12月2 日

学生姓名

实验地点

钉钉群线上

同组人员

专业班级

1、实验目的

1、能够在PROTEUS软件中掌握直流电机的驱动电路绘制方法;

2、掌握直流电动机的程序控制方法;

2、任务设计要求

设计采用单片机控制直流电机的正反转,按下K1按键正转,按下K2按键反转,

按下K3按键停止,执行相应的操作时,对应的LED被点亮。

3、总体设计方案

根据实验任务要求,通过功能分析,设计的系统总体方案如图所示。

并行接口

AT89C51单片机

电源

时钟电路

复位电路

实现转向灯的控制

4、硬件电路设计

5、软件程序设计

(1)、程序设计思路(流程图绘制)

其设计思路如图所示

结束

结束

结束

(2)程序清单

#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigne dintsbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^2;sbit LED1=P0^0;sbit LED2=P0^1;sbit LED3=P0^2;sbit MA=P1^0;sbit MB=P1^1;void main (void){ LED1=1;LED2=1;LED3=0;while(1){if(K1==0){ while( K1==0); LED1=0;LED2=1;LED3=1; MA=0;MB=1;}if(K2==0){ while(K2==0); LED1=1;LED2=0;LED3=1; MA=1;MB=0; } if(K3==0){ while(K3==0); LED1=1;LED2=1;LED3=0; MA=0;MB=0; } }}

性能指标测试及结果分析 项目总结

在此实验设计过程中我们遇到了很多问题也发现了很多的缺陷,但通过我们的不断探索与钻研、向导师询问不懂知识、努力找寻解决方法,问题被一个个解决。我们也从这次设计过程中学到了很多的知识,领悟到了一些道理

8、项目设计报告成绩

指导教师签字:

年 月 日

单片机常用程序有哪些?高级工考核反复使用的三个程序

今天给大家分享高级工考核经常使用的三个单片机程序

1、按键扫描

#include<reg52.h>

#include<stdio.h>

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit K1=P0^0;

sbit L1=P1^0;

void delay_ms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void main(void)

{

while(1)

{

if(K1==0) //开关、按钮是否接通

{

delay_ms(10); //延时去抖动

{

if(K1==0) L1=0;// 开关接通,有输出

else

L1=1;//断开,没有输出

}

}

}

}

2、定时与中断

void init_interrupt()//The Init of interrupt

{TH0=88;

TL0=0;

TMOD=0x01;

ET0=0;

IT0=0;

EX0=0;

TR0=0;

EA=0;

}

void timer_0(void) interrupt 1 //中断服务函数

{

;

}

void int_0(void) interrupt 0 //中断服务函数

{

;

}

3、数码显示相关

#include <at89x51.h> //头文件

#define uchar unsigned char //宏定义

#define uint unsigned int

#define ulint unsigned long int

sbit Data=P3^7; //定义595数据管脚 14管脚

sbit sck=P3^6; //上升沿时数据寄存器的数据移位 11脚

sbit rck=P3^5; //上升沿时数据进入数据存储区12脚

//共阴数码光字形表,0 1 2 3 4 5 6 7 8 9

uchar table[10]={0x3F,0X06,0X5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar Date[6]={0,0,0,0,0,0};

ulint a; //全局变量

/*******************延时子函数*********************/

void delay_ms(uint z) //z=1,延时1毫秒

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*******************结束*****************************/

/*******************595初始化函数*********************/

void initialization_595() //595初始化

{

Data=0;

sck=0;

rck=0;

}

/*******************结束*****************************/

/****************595时序及显示函数************************/

void display(uchar *n) //显示6位数据,根据后面display(Date),则uchar *n指针指向Date数组

{

uchar i,dat; //局部变量

char j;

for(j=5;j>-1;j--) //6位数据依次循环

{

dat=table[n[j]]; //6位数据分别赋值

for(i=0;i<8;i++) //依次写入8位数据

{

if(dat&0x80) Data=1; //按位与操作,判断是1还是0

else Data=0;

dat<<=1; //左移一位等待下次判断

sck=0; //上升沿有效(上升沿时数据寄存器的数据移位)

sck=1;

}

}

rck=0; //将6位数据发出数码管(上升沿时移位寄存器的数据进入数据存储器,更新显示数据)

rck=1;

}

/*******************结束*****************************/

/*******************变量运算函数**********************/

calculate()

{

Date[0]=a/100000;

Date[1]=(a/10000)%10;

Date[2]=(a/1000)%10;

Date[3]=(a/100)%10;

Date[4]=(a/10)%10;

Date[5]= a%10;

}

/*******************结束*****************************/

/*******************主函数****************************

void main()

{ a=80310; //08级1班10号

initialization_595(); //调用595初始化子函数

while(1) //进入循环体

{

calculate(); //调用计算函 数

display(Date); //调用数码管显示函数

}

}*******************结束*****************************/

相关问答

sbit K1 =P3^2;在 单片机 这表示什么意思?

谢谢邀请,sbit是定义特殊功能寄存器的位变量在51系列的单片机,有这样的位操作,是可以直接定义对应引脚,在应用时候,可以直接进行赋值操作if(IsOK)K1=1;els...

if (! k1) x--;else if (k2)x=4;elsex=3;A:14B:4C:15D:3B_作业帮

[最佳回答]k1=1;!k1==0,if(!k1)等价于if(k1==0)k2=2;if(k2)等价于if(k2!=0)if(!k1)x--;//k1!=0,条件不成立elseif(k2)x=4;//k...

单片机 按键程序 哪里错了 为何不能运行-ZOL问答

第一条语句应该if(k1==0)吧,而不是if(k1==o),一个是字母一个是数字。AT89C52?你确定?这可能是清理插件的时候出现了问题。这个问题建议朋友你使用360急救箱...

单片机 怎么设置LED点阵亮的时间长度?

要设置LED点阵亮的时间长度,可以通过控制单片机的IO口输出信号来实现。首先,需要确定所使用的单片机型号和开发环境,然后编写相应的程序代码。在程序中,可以...

C语言的 if (!k)是什么意思?

解释:“if(a)b;”,a是真的就执行b,假的就不执行b,逻辑值为1就是真的,0就是假的,数字除了0其他的都是真的,0是假的,!就是非的意思,否定。比如0是假...解释:“...

prototypeerorrc231:'display#includesbitk0=P1^0;sbit k1 =...

[最佳回答]警告:display函数没有原型.错误:dispaly被重定义.你改display()函数的实现试试display(void){}改成display(){}警告:display函数没有原型.错...

求解C语言编写的51 单片机 用按键实现 暂停 开启-ZOL问答

再次按按键就唤醒单片机};4水位{当水位40)v++;//如果按...

如果k列的时间大于2007,则p列的备注填新聘,否则为空白,用 if ...

[最佳回答]保证K列是日期格式在P1中输入=IF(YEAR(K1)>2007,"新聘","")下拉填充即可

(数字可能不再同一列)的行列D2到 K1 00是1-80间的随机数字,...

[最佳回答]在搜索区域之外,比如在C列或者L列增加一个辅助列,在L1输入公式=COUNT(IF($D1:$K1=3,$D1:$K1,""))+COUNT(IF($D1:$K1=8,$D1:$K...

...家一下)Input每组输入数据占1行,每行数据的开始是2个整数n(0

[回答]太乱了……其实你根本不需要把数组移来移去的,这样会影响自己的思路,只要再开一个数组,里面只存0和1,来表示这个数要不要输出即可.按照你的思路,我...

猜你喜欢