123、仿真-基于51单片机的电流控制仿真系统设计(Proteus仿真+程序+原理图+参考论文+配套资料等)

方案选择
单片机的选择

方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节的闪存程序存储器,也就是说代码量可以写到128k字节,本次设计足够,内部高达20K字节的SRAM。
 

方案二:51单片机STC89C52系列的指令系统和AT89C52系列的完全兼容,但实际操作起来却存在很多问题:

(1)AT89C52不带ISP下载,要用下载器才行,STC89C52可以用你的USB转串口下载,下载软件可以到STC厂家网上去下。

(2)STC单片机执行指令的速度很快,大约是AT的3-30倍,尽管快是好事,但这样一来,你在AT上好使的程序在STC上不一定好用,最典型的例子就是那些对时序有严格要求的模块,用STC时注意得加长延时,大约是AT的10—30倍就差不多,这一点自己调试就知道了。

(3)STC单片机对工作环境的要求比较低,电压低于5伏时仍然正常工作,甚至3伏到4伏之间都还可以工作,然而这样的环境下AT肯定不行了,所以当一个系统用STC单片机好用,但用AT的单片机不工作时,直接查最小系统,看单片机的供电是否正常。

比较这两种方案,由于在学校期间学过数字电路、单片机原理、C语言程序设计,综合考虑单片机的各部分资源和作为学生能够获得的资源,还有STM32价钱比较贵方面。经过对比此次设计要求,我选择用51单片机中的STC系列芯片完成。而且学校也提供了相应的硬件操作平台,实际操作起来比较方便,故STC为更合理的选择。本系统选择STC89C52单片机作为主控芯片。足够本设计运行,且价格便宜,下载程序方便。


显示器选择方案

方案一:采用12864液晶显示屏。液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。

方案二:采用LCD1602液晶显示屏。LCD1602A 是一种工业字符型液晶,能够同时显示16x02 即32个字符。(16列2行)。1602只能显示字母、数字和符号能显示16*2个字符,但寄存器不止32个,有一些显示效果,如字符一个个显示、字符从左到右或从右到左显示等等,显示效果简单。

总结:在编程使用方面,两者难度差不多,原理差不多,都是写指令、写地址、写数据等等。当然12864液晶屏显示更全面、字符更多。相比于1602液晶屏、12864能更形象具体的实现显示功能。不过1602液晶屏也能实现设计的要求。网上买比较廉价,最低的六块钱左右。而12864液晶显示屏最便宜的也要四十块钱。从造价方面考虑,当然是价格低廉的优先。而LCD1602A就是最好的选择。

一、设计功能

本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)。

1、51单片机可以通过电路设计来获取的电流,电流的大小并在LCD1602显示屏上显示。

2、用户可以通过滑动变阻器来改变电流的大小,并在LCD1602显示屏上显示。

二、Proteus仿真图

 

 

单片机模块设计

单片微型计算机是随着微型计算机的发展而产生和发展的。自从1975 年美国德克萨斯仪器公司的第一台单片微型计算机( 简称单片机)TMS-1000 问世以来,迄今为止,单片机技术已成为计算机技术的一个独特分支,单片机的应用领域也越来越广泛,特别是在工业控制中经常遇到对某些物理量进行定时采样与控制的问题,在仪器仪表智能化中也扮演着极其重要的角色。

如果将8位单片机的推出作为起点,那么单片机的发展历史大致可以分为以下几个阶段:

第一阶段(1976—1978):单片机的探索阶段。以Intel公司的MCS-48为代表。MCS-48的推出是在工控领域的探索,参与这一探索的公司还有Motorola、Zilog等。都取得了满意的效果。这就是SCM的诞生年代,“单片机”一词即由此而来。

第二阶段(1978—1982):单片机的完善阶段。Intel公司在MCS-48基础上推出了完善的、典型的单片机系列MCS-51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。

(1)完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有多机通信功能的串行通信接口。

(2)CPU外围功能单元的集中管理模式。

(3)体现工控特性的地址空间及位操作方式。

(4)指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。

第三阶段(1982—1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS-96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。

第四阶段(1990—):微控制器的全面发展阶段。随着单片机在各个领域全面、深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。

单片机是在集成电路芯片上集成了各种元件的微型计算机,这些元件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口电路。由于单片机具有体积小、价格低、可靠性高、开发应用方便等特点,因此在现代电子技术和工业领域应用较为广泛,在智能仪表中单片机是应用最多、最活跃的领域之一。在控制领域中,现如今人们更注意计算机的底成本、小体积、运行的可靠性和控制的灵活性。在各类仪器、仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,提高计算机的运算速度,简化仪器仪表的硬件结构,提高其性能价格比。

三、原理图

在本设计做的过程中,硬件和软件方面都遇到了许多问题,但是相比于软件,在硬件方面还是比较快解决的方面,因为硬件是比较容易检查出来错误的,软件比较晦涩难懂,还是有一定难度。
在硬件调试问题上,首先焊接好了元器件实物板后,先用万用表测量这个工业板子的电源方面,电源方面是最重要的问题,应该是特别需要检查的地方,以防止电源的短路和正负极的错误。然后在仔细检查电路的连接是否有问题,或者有没有虚焊或者没有焊接到的地方,然后核对一下元器件的安装是否有问题,安装上去是否符合规定,由于已经是大学四年都是做过了很多实训过来了,对于这些还是游刃有余的,但是在上机调试后还是发现了很多的问题。

 

四、程序源码

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

 

资料包括:

 

需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
proteus软件仿真 部分文件原创~~ 资料很全~~学习中各个过程的难题都有例子 文件头—————————————————————————————————————————必要 #include #define uint unsigned int #define uchar unsigned char 移位函数——————————————————————————————————————————走马灯 #include temp=_cror_(temp,1); 数码管数字代码———————————————————————————————————————从0到15 正 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 反 uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; 延时函数——————————————————————————————————————————z毫秒 #define uint unsigned int #define uchar unsigned char void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 定时器0使用——————————————————————————————————————工作方式1 TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; } 定时器1使用———————————————————————————————————————工作方式1 TMOD=0x11; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1; void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; } 外部中断0使用————————————————————————————————————————检测下降沿 EA=1; EX0=1; IT0=1; TCON=0x01; 数码管显示数字函数——————————————————————————————————————只显示百十个,可以扩展 void display(uchar bai,uchar shi,uchar ge) { P0=0xff; wela=1; P0=0xfe; wela=0; dula=1; P0=table[bai]; dula=0; delay(1); P0=0xff; wela=1; P0=0xfd; wela=0; dula=1; P0=table[shi]; dula=0; delay(1); P0=0xff; wela=1; P0=0xfb; wela=0; dula=1; P0=table[ge]; dula=0; delay(1); } 控制液晶—————————————————————————————————限16*2小液晶 sbit rs=P3^5; sbit e= P3^4 ; sbit wela=P2^7; sbit dula=P2^6; uchar love1[]={"i say love."}; uchar love2[]={"i love you."}; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } int write_com(uchar com) { P0=com; rs=0; e=1; delay(5); e=0; } int write_date(uchar date) { P0=date; rs=1; e=1; delay(5); e=0; } init() { wela=0; dula=0; e=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80); } 串口通信——————————————————————————————————————————波特率 9600 TMOD=0x20; TH1=0xfd; //9600 TL1=0xfd; PCON=0x00; SCON=0x50;//方式1 EA=1; ES=1; TR1=1; ES=0; SBUF=**; while(!TI); TI=0; ES=1; void ser() interrupt 4 { **=SBUF; RI=0; } IIC总线的应用————————————————————————————————————————————————EEPROM上测试 sbit sck=P2^1; sbit sda=P2^0; sbit ACC7=ACC^7; sbit ACC0=ACC^0; void delay(int z) { uchar i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void deluy() {;;} void start() { sda=1; deluy(); sck=1; deluy(); sda=0; deluy(); } void stop() { sda=0; deluy(); sck=1; deluy(); sda=1; deluy(); } respond() { uchar i; sck=1; while(sda!=0&&i<250)i++; sck=0; deluy(); } void write_byte(uchar date) { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; sck=0; deluy(); sda=CY; deluy(); sck=1; deluy(); } sck=0; deluy(); sda=1; deluy(); } uchar read_byte() { uchar i; sck=0; deluy(); sda=1; deluy(); for(i=0;i<8;i++) { ACC<<=1; sck=1; deluy(); ACC0=sda; sck=0; } return ACC; } write_date(uchar add,uchar date) { start(); write_byte(0xa0); respond(); write_byte(add); respond(); write_byte(date); respond(); stop(); } read_date(uchar add) { uchar k; start(); write_byte(0xa0); respond(); write_byte(add); respond(); start(); write_byte(0xa1); respond(); k=read_byte(); stop(); return k; } DS18b28的应用—————————————————————————————————————————————一些寄存器可以按需修改 bit DS18B20_init() { bit flag; DQ=1; for(time=0;time<2;time++); DQ=0; for(time=0;time<200;time++); DQ=1; for(time=0;time<10;time++); flag=DQ; for(time=0;time<200;time++); return (flag); } void writecom(uchar com) { uchar i; for(i=0;i<8;i++) { DQ=1; _nop_(); DQ=0; DQ=com&0x01; for(time=0;time<10;time++); DQ=1; for(time=0;time>=1; } for(time=0;time<4;time++); } uchar readdat() { uchar i,dat; dat=0; for(i=0;i>=1; _nop_(); DQ=1; for(time=0;time<2;time++); if(DQ==1) dat|=0x80; else dat|=0x00; for(time=0;time<8;time++); } return(dat); } void get_temp() { DS18B20_init(); writecom(0xCC); writecom(0x44); for(time=0;time<100;time++); DS18B20_init(); writecom(0xCC); writecom(0xBE); } void main() { uchar i,tl,th; uchar zhen,xiao; while(1) { get_temp(); tl=readdat(); th=readdat(); zhen=(th*256+tl)/16; xiao=(tl%16)*10/16; } } AD转换——————————————————————————————————————————————ADC0804,其他不适用,temp 0~255之间 关键是接口 sbit wr=P3^6; sbit rd=P3^7; sbit cs=P3^2; void init() { cs=0; } void start() { wr=1; wr=0; wr=1; } void huoqu () { uchar temp; temp=0; start(); rd=0; temp=P1; rd=1; retrn temp; } DA转换—————————————————————————————————————————————关键是接口 sbit wr=P3^6; sbit da=P3^2; init() { da=0; } start() { wr=1; wr=0; wr=1; } 键盘的使用—————————————————————————————————————————4X4 含消抖效果 uchar key; void scan(void) { uchar scode,rcode; P3=0xf0; if((P3&0xf0)!=0xf0) { delay(5); if((P3&0xf0)!=0xf0) { scode=0xfe; while((scode&0x10)!=0) { P3=scode; if((P3&0xf0)!=0xf0) { rcode=(P3&0xf0)|0x0f; key=(~scode)+(~rcode); switch(key) { case 0x11:key=0;break; case 0x21:key=1;break; case 0x41:key=2;break; case 0x81:key=3;break; case 0x12:key=4;break; case 0x22:key=5;break; case 0x42:key=6;break; case 0x82:key=7;break; case 0x14:key=8;break; case 0x24:key=9;break; case 0x44:key=10;break; case 0x84:key=11;break; case 0x18:key=12;break; case 0x28:key=13;break; case 0x48:key=14;break; case 0x88:key=15;break; default : key=16;break; } } else scode=(scode<<1)|0x01; } } } else key=16; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ENGLISH_HHZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值