MCS51单片机简易直流数字电压表.docx
- 文档编号:7922712
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:11
- 大小:47.52KB
MCS51单片机简易直流数字电压表.docx
《MCS51单片机简易直流数字电压表.docx》由会员分享,可在线阅读,更多相关《MCS51单片机简易直流数字电压表.docx(11页珍藏版)》请在冰豆网上搜索。
MCS51单片机简易直流数字电压表
MCS-51单片机简易直流数字电压表
第一部分课程设计任务书
一、课程设计题目
MCS-51单片机简易直流数字电压表
二、课程设计时间
一周
三、课程设计提交方式
提交打印课程设计报告以及发送电子版
四、设计要求
本实验要使用单片机设计一个简易直流数字电压表。
第二部分课程设计报告
一、单片机发展概况
单片机的出现是近代计算机技术发展史上的一个重要里程碑。
单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入计算机系统两大分支。
单片机作为最典型的嵌入式系统,它的成功应用推动了嵌入式系统的发展。
它的产生与发展主要分为三个阶段。
第一阶段1974—1978初级单片机阶段
典型的产品有Intel公司的MCS—48系列。
这个系列的单片机在片内集成了8位CPU、并行I/O端口、8位定时/计数器、64B或128B的RAM、1KB或2KB的ROM等,无串行接口,寻址范围4K。
第二阶段1978—1983高性能单片机阶段
这个阶段以MCS—51为代表,这个阶段的单片机均带有串行I/O口,具有多处中断处理系统,定时/计数器为16位,片内RAM和ROM容量相对增大,且寻址范围可达64K.
这类单片机的应用领域极其广泛,由于其优良的性价比,在我国得到广泛的使用。
第三阶段1983年至今8位单片机巩固完善及16位发展阶段
16位单片机工艺先进,集成度高,内部功能强,运算速度快,而且允许用户采用面向工业控制的专用语言。
片内包括了16位的CPU,8KB的ROM、256B的RAM、具有串并行接口、4个16位的定时器/计数器、8个中断原、还有看门狗、还增加了D/A和A/D转换电路,片外寻址范围可达64KB。
二、MCS-51单片机系统简介
单片微型计算机,简称单片机,就是将微处理器,存储ROM和RAM、定时器/计数器、中断系统输入输出接口、总线和其他多功能器件集成在一片芯片上的微型计算机。
又成为嵌入式微处理器。
主要特点如下。
(1)可靠性高
(2)便于扩展
(3)控制功能强
(4)低电压、低功耗
(5)片内存储容量较小
MCS—51单片机是世界上用量最大的单片机之一。
目前,MCS—51单片机主要由Philips、三星。
华邦等公司生产。
这些公司都在保持与MCS—51单片机兼容的基础上改善了许多特性,提高了速度,降低了时钟频率,放宽了电源电压的动态范围,降低了产品价格。
MCS—51系列单片机目前仍是应用的主流之一,主要包括8031、8051、8751、89C51和89S51等通用产品。
三、设计思想
数字电压表简称DVM,它是采用数字化模拟技术。
把连续的模拟量转换成不连续的、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,精度高、抗干扰能力强,集成方便,还可以与PC进行实时通信。
模拟电压经过A/D转换器进行A/D转换,然后送到单片机中进行处理。
处理后送到LCD中进行显示。
四、硬件电路设计
五、软件设计框图
六、程序源代码
主程序:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitOE=P3^0;
sbitSTART=P3^2;
sbitA0=P3^3;
sbitC0=P3^4;
sbitB0=P3^5;
sbitEOC=P3^1;
sbittest=P2^4;
chardat[7];
ucharda[7];
ucharda2;
ucharname[]="voltage";
uchardata1='0';
floatdata2=0.0;
voiddelay1(uintus)
{
while(us--);
}
voidmain()
{
LCD_Init();
delay1(300);
C0=0;//选择第0通道
B0=0;
A0=0;
delay1(300);
OE=1;//输出允许信号
START=0;
START=1;
START=0;
while
(1)//转换完毕
{
if(EOC==1)
{
da2=P1;
DisplayListChar(0,0,name);
data2=5.0/256.0*da2;//转化为浮点型数据
da[0]='';//不显示
da[1]=0x30+((int)data2%10);//个位
da[2]=0x2e;//小数点
data2=data2*10;
da[3]=0x30+(int)data2%10;//小数部分第一位
da[4]='V';
da[5]='\0';
DisplayListChar(0,10,da);
delay1(30000);delay1(30000);
delay1(30000);delay1(30000);
START=0;
START=1;
START=0;
}
}
}
子程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLCD_RS=P2^0;//数据/命令选择端,1数据0指令
sbitLCD_RW=P2^1;//读写选择端,1读0写
sbitLCD_EN=P2^2;//使能信号,高电平有效
#defineLCD_DataP0//数据接口定义
voiddelay(uintus);
ucharLCD_Readdata(void);
bitLCD_Checkbusy(void);
voidLCD_WriteData(uchardat);
voidLCD_WriteCmd(ucharcmd);
voidLCD_Init(void);
voidDisplayOneChar(ucharX,ucharY,uchardat);
voidDisplayListChar(ucharX,ucharY,uchar*DData);
voidLCD_Display(bitON);
voidLCD_Clear(void);
voiddelay(uintus)
{
while(us--);
}
ucharLCD_Readdata(void)
{
LCD_RS=1;//选择数据操作
LCD_RW=1;//读选择
LCD_EN=0;
LCD_EN=1;//使能信号给高脉冲
LCD_EN=0;
return(LCD_Data);//返回读取的数据
}
bitLCD_Checkbusy(void)
{
bitbusy;
LCD_Data=0x00;
LCD_RS=0;//选择数据操作
LCD_RW=1;//读选择
LCD_EN=0;
delay(15);
LCD_EN=1;//使能信号给高脉冲
busy=(bit)(P0&0x80);
LCD_EN=0;
returnbusy;
}
voidLCD_WriteData(uchardat)
{
while(LCD_Checkbusy());//检测忙信号
LCD_Data=dat;//送入要写的数据
LCD_RS=1;//选择数据操作
LCD_RW=0;//写选择
LCD_EN=0;
delay(100);//如果显示不正常,可适当调整延时
LCD_EN=1;//使能信号给高脉冲
LCD_EN=0;
}
voidLCD_WriteCmd(ucharcmd)
{
while(LCD_Checkbusy());//检测忙信号
LCD_Data=cmd;//送入要写的命令
LCD_RS=0;//选择命令操作
LCD_RW=0;//写选择
LCD_EN=0;
delay(15);
LCD_EN=1;//使能信号给高脉冲
LCD_EN=0;
}
voidLCD_Init(void)
{
delay(3000);//启动等待,等LCM讲入工作状态
LCD_Data=0;
LCD_WriteCmd(0x38);//显示模式设置,16*2显示,5*7点阵,8位数据,不检测忙信号
delay(6000);
LCD_WriteCmd(0x38);
delay(6000);
LCD_WriteCmd(0x38);
delay(6000);
LCD_WriteCmd(0x06);//显示光标移动设置
LCD_WriteCmd(0x0C);//显示开及光标设置
LCD_WriteCmd(0x01);//显示清屏
}
voidDisplayOneChar(ucharX,ucharY,uchardat)
{
X&=0x1;//限制X不能大于1
Y&=0xF;//限制Y不能大于15
if(X)
{
Y|=0x40;//当要显示第二行时地址码+0x40;
}
Y|=0x80;//算出指令码
LCD_WriteCmd(Y);
LCD_WriteData(dat);
}
voidDisplayListChar(ucharX,ucharY,uchar*DData)
{
ucharListLength;
ListLength=0;
X&=0x1;//限制X不能大于1
Y&=0xF;//限制Y不能大于15
while(DData[ListLength]!
='\0')//若到达字串尾则退出
{
if(Y<=0xF)//X坐标应小于0xF
{
DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符
ListLength++;
Y++;
}
else
{
break;
}
}
}
voidLCD_Display(bitON)
{
if(ON)
{
LCD_WriteCmd(0x0C);
}
else
{
LCD_WriteCmd(0x08);
}
}
voidLCD_Clear(void)
{
LCD_WriteCmd(0x06);//显示光标移动设置
LCD_WriteCmd(0x0C);//显示开及光标设置
LCD_WriteCmd(0x01);//显示清屏
}
七、结束语
本次课程设计对显示电路认真的学习和对单片机技术有了进一步的熟悉,实际操作和课本上的知识有很大的区别,但又高于课本,一个看着简单的电路动手设计就比较困难了。
在以后的学习中我们要注意将课本上的知识与实际相结合,通过这次课程不仅巩固了课本的知识,还将课本上知识很好的利用并且与实际结合,增强了学习的综合能力。
这次设计不仅锻炼了我们的团队合作精神,而且提高了创新能力。
在这次课程设计中,我们也遇到了一些问题,在与老师和同学交流的过程中,互动学习,将知识融会贯通,解决问题,并学会了很多的学习方法。
在以后面对社会上的各种挑战,只有不断学习、实践、再学习、再实践。
无论如何,这都是一种锻炼,一种知识的完全积累,只有把这些当作基础并掌握,才可以更进一步,取得更好的成绩。
八、参考文献
[1]张鑫.单片机原理及应用(第二版)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS51 单片机 简易 直流 数字 电压表