资源简介
直流电机PWM调速系统的要求
(1)可输入0~1范围的占空比,占空比可用电位器输入、拨码开关输入或键盘输入。
(2)设计电机驱动电路,根据输入的占空比控制电机转速。
(3)检测电机转速,并用LED或LCD显示。
(4)在PROTUES下仿真。
全套包论文
代码片段和文件信息
#include
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define LCD_DB P0
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E =P2^2;
void delayms(unsigned char ms);
void LCD_init(void);//初始化函数
void LCD_write_command(uchar command);//写指令函数
void LCD_write_data(uchar dat);//写数据函数
void LCD_disp_char(uchar xuchar yuchar dat);
void delay_n40us(uint n);//延时函数
unsigned char code self_table1[]={
0x080x0f0x120x0f0x0a0x1f0x020x02//年
0x0f0x090x0f0x090x0f0x090x110x00//月
0x0f0x090x090x0f0x090x090x0f0x00//日
0x010x0c0x170x140x170x0c0x010x00//闹钟标志
0x100x180x1c0x1e0x1f0x1c0x180x10 };//三角形符号
//================================LCD子函数 ==============================
//*******初始化函数***************
void LCD_init(void)
{
delayms(400);
LCD_write_command(0x38);//设置8位格式,2行,5x7
delayms(10);
LCD_write_command(0x38);
delayms(10);
LCD_write_command(0x38);
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位
LCD_write_command(0x01);//清除屏幕显示
delay_n40us(100);//实践证明,我的LCD1602上,用for循环200次就能可靠完成清屏指令。
}
//********************************
//********写指令函数************
void LCD_write_command(uchar dat)
{
LCD_DB=dat;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;
delay_n40us(1);//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
}
//*******************************
//********写数据函数*************
void LCD_write_data(uchar dat)
{
LCD_DB=dat;
LCD_RS=1;//数据
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;
delay_n40us(1);
}
//******************************
//********光标闪烁*************
void cursor_flash(uchar auchar b)
{
// LCD_write_command(0x80+a*0x40+b);
// LCD_write_command(0x14);
LCD_write_command(0x0f);
LCD_write_command(0x80+a*0x40+b);
}
//********************************
//*******显示一个字符函数*********
void LCD_disp_char(uchar xuchar yuchar dat)
{
uchar address;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
LCD_write_data(dat);
}
/********************************************************
函数名称:按指定位置显示一个字符串
功能描述:按指定位置显示一个字符串
全局变量:无
参数说明:X行 Y列 S显示字符串
返回说明:无
说 明:
********************************************************/
void DisplayChar(uchar xuchar yuchar *s)
{
uchar addressilengh;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
lengh=strlen(s);
for(i=0;i {
LCD_write_data(*s);
s++;
}
}
/********************************
/*******检查忙函数*************
void LCD_check_busy() //实践证明,在我的LCD1602上,检查忙指令通过率极低,以
{ //至于不能正常使用LCD。因此我没有再用检查忙函数。而使
do //用了延时的方法,延时还是非常好用的。我试了一下,用
{ LCD_E=0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 16282 2011-12-19 11:52 PWM调试程序
文件 4685 2011-12-19 11:52 PWM调试程序.hex
文件 48 2011-12-19 11:52 PWM调试程序.lnp
文件 19566 2011-12-19 11:52 PWM调试程序.M51
文件 986 2011-12-19 11:52 PWM调试程序.Opt
文件 220 2011-12-19 11:52 PWM调试程序.plg
文件 2149 2011-12-19 11:52 PWM调试程序.Uv2
文件 984 2011-12-19 11:52 PWM调试程序_Opt.Bak
文件 2149 2011-12-19 11:52 PWM调试程序_Uv2.Bak
文件 7600 2011-12-19 11:52 Text1.c
文件 14285 2011-12-19 11:52 Text1.LST
文件 18489 2011-12-19 11:52 Text1.OBJ
文件 148369 2011-12-19 11:52 直流电机PWM调速系统.DSN
文件 792 2011-12-19 12:26 直流电机PWM调速系统.PWI
----------- --------- ---------- ----- ----
236604 14
- 上一篇:翻纸牌匹配游戏
- 下一篇:Webrequests模拟登录
评论
共有 条评论