C模块编程范例.doc_第1页
C模块编程范例.doc_第2页
C模块编程范例.doc_第3页
C模块编程范例.doc_第4页
C模块编程范例.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*/*课题:直流电机的转速控制(闭环调节)*/*/ #include main.h /*/*声明使用的变量*/*/int set_value;int now_speed;int count;int N_C;/*/*主函数*/*/void main()lcd_init();/LED初始化TL1 = 0x06; /设定方波周期为0.25msTH1 = 0x06;TMOD = 0X25; /设置定时器1工作方式1,计数器0的工作方式1(参考书本104页)TL0 = 0x00; /计数器的初值为0TH0 = 0x00; ET1 = 1; /打开定时器1中断TR1 = 1; /打开定时器1 TR0 = 1; /打开定时器0EA =1;/打开全局中断while(1) keys(); /扫描设定转速 write_first(8,set_value); /1602第一行显示设定值write_second(8,now_speed); /1602第二行显示实际值N_C= (set_value-now_speed)/100.0; /调整/*/*中断函数:检测实际转速*/*/void timer1() interrupt 3 /定时器1中断,定时 count+;if(count60) /60个250uS计数器一直计数count = 0;now_speed=(TH0*256+TL0)*17; /计算转速TL0=0x00; /计数器初值清0TH0=0x00; TF0=0; /清楚中断标志位if(count = (set_value/10+N_C) Pwm_out = 0; /调整PWM的输出,控制电机/*主函数编程结束*/*/*主函数的头文件定义*/*/#ifndef _main_h_#define _main_h_/*/*调用使用到的模块头文件*/*/#include common.h#include intrins.h#include lcd1602.h#include keyscan.h /*/*主函数的端口定义*/*/sbit Pwm_out = P31; /PWM的输出/*/*声明可以外部调用的函数和变量*/*/extern int set_value;/*/#endif/*/*功能:定义一些各个模块都能用到的公共函数*/*/#include common.h/*/*死延时程序*/*/void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=100;y0;y-);/*子模块编程结束*/*/*公共的头文件定义*/*/#ifndef _common_h_#define _common_h_/*/*调用使用到的公共头文件*/*/#include reg52.h/*/*公共宏定义*/*/#define uchar unsigned char #define uint unsigned int/*/*声明可以外部调用的函数和变量*/*/extern void delay(uint z);/*/#endif/*/*功能:按键输入设定的电机转速*/*/#include keyscan.h/*/*键盘扫描程序*/*/void keys() /键盘控制if(s1=0) /控制设定转速加10转/分delay(5);if(s1=0)while(!s1);set_value = set_value+10;if(set_value 600)set_value = 0;if(s2=0) /控制设定转速减10转/分delay(5);if(s2=0)while(!s2);set_value = set_value-10;if(set_value 600)set_value = 0;if(s4=0) /控制设定转速减100转/分delay(5);if(s4=0)while(!s4);set_value = set_value-100;if(set_value =0)set_value = 0;/*子模块编程结束*/*/*按键的头文件定义*/*/#ifndef _keyscan_h_#define _keyscan_h_/*/*调用使用到的模块头文件*/*/#include common.h#include main.h /调用main.h中的set_value变量/*/*定义按键的4个输入端*/*/sbit s1 = P10;sbit s2 = P11;sbit s3 = P12;sbit s4 = P13;/*/*声明可以外部调用的函数和变量*/*/extern void keys();/*/#endif/*/*功能:LCD模块的程序,显示设定值和实际值*/*/#include lcd1602.h /*/*定义两个数组*/*/uchar code table = SET_N: 000 n/M ;/LCD的初始显示数据uchar code table1 = NOW_N: 000 n/M ; /*/*写指令函数(00)*/*/void write_com(uchar com) /写(0)指令(0)函数wr = 0;/写rd = 0;/指令P0 = com;/P0口输出指令delay(5);lcde = 1;delay(5);/一个高脉冲把指令取走lcde = 0;/*/*写数据函数(01)*/*/void write_date(uchar date) /写(0)数据(1)函数 wr = 0; /写 rd = 1; /数据 P0 = date; /P0口输出数据 delay(5); lcde = 1; delay(5); lcde = 0;/*/*初始化函数*/*/void lcd_init()uchar num;/wr = 1; /一直为0,表示只写,不读lcde = 0; /开始时为0,后可以产生高脉冲write_com(0x38); /显示模式设置write_com(0x0c); /开显示、光标不闪烁write_com(0x06); /输入方式设置,数据读写操作后,AC自动加1write_com(0x01); /清屏write_com(0x80); /第一行的开始地址for(num=0;num16;num+)write_date(tablenum);delay(3);write_com(0x80+0x40); /第二行的开始地址for(num=0;num16;num+)write_date(table1num);delay(3);/*/*液晶第一行显示(设定值)*/*/void write_first(uchar add,uint date) uchar bai,shi,ge; /分离设定值,分别显示bai = date/100;shi = date/10%10;ge = date%10;write_com(0x80+add); /操作显示的地址write_date(0x30+bai); /显示百位,依次write_date(0x30+shi);write_date(0x30+ge);/*/*液晶第二行显示(实时值)*/*/void write_second(uchar add,uint date) uchar aa,bb,cc; /分离设定值,分别显示aa = date/100;bb = date/10%10;cc = date%10;write_com(0x80+0x40+add); /操作显示的地址write_date(0x30+aa); /显示百位,依次write_date(0x30+bb); write_date(0x30+cc);/*子模块编程结束*/*/*LCD1602的头文件定义*/*/#ifndef _lcd1602_h_#define _lcd1602_h_/*/*调用使用到的模块头文件*/*/#include common.h/*/*定义LCD的三个控制位*/*/sbit rd = P26;sbi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论