芜湖信息技术职业学院毕业论文(设计)
菜单说明(如图8)
Menu3温度补偿关Menu4温度补偿开环境温度 ** 度按2按2Menu1欢迎使用51单片机电阻测量仪器请稍后ΖΖ?Menu2Temperature[0]=0x00 温度补偿关Temperature[0]=0x01 温度补偿开Rang[0]=0x02 量程200Rang[0]=0x03 量程2KRang[0]=0x04 量程20KRang[0]=0x05 量程200KRang[0]=0x06 量程2M电阻测量量程 ***欧姆测得电阻值**********欧姆Menu71电阻测量2温度补偿自动跳转3关于测量仪4关于作者按3按4按151单片机电阻测量仪带温度补偿功能王仁杰学号:20083005Menu5Menu6
图8 菜单说明
键盘定义(如图9)
图9 键盘定义(图中红色字体为键盘功能)
12
芜湖信息技术职业学院毕业论文(设计)
PROTUES仿真(如图 10)
图10 仿真图
Proteus是一种功能强大的电子设计自动化软件,提供智能原理图设计系统、SPICE模拟电路、数字电路及MCU器件混合仿真系统和PCB设计系统功能。其不仅可以仿真传统的电路分析实验、模拟电子线路实验、数字电路实验等,而且可以仿真嵌入式系统的实验,其最大的特色在于可以提供嵌入式系统(单片机应用系统、ARM应用系统)的仿真实验,这也是其它任何仿真软件无力所及的。例如,其支持单片机和周边设备,可以仿真51系列、8086、AVR、PIC、Motorola的68系列等常用的MCU,并提供周边设备的仿真,例如373、led、示波器等。Proteus提供了大量的元件库,有RAM、ROM、键盘、马达、LED、LCD、AD/DA、部分SPI器件、部分IIC器件等。在编译方面,它也支持Keil和MPLAB等多种编译器。
Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。器件建模及仿真;电路的构建及仿真;系统的组成及仿真;仪表仪器原理及制造仿真。 器件建模及仿真:可以建模及仿真的器件:模拟器件(二极管,三极管,功率管等); 数字器件(74系列,COMS系列,PLD,CPLD等); FPGA器件。
本次仿真用到单片机、步进电机、LCD等元件,故选PROTUES作为仿真软件。
13
芜湖信息技术职业学院毕业论文(设计)
软件部分
/******************************************************************** 主程序 main.c
*******************************************************************/ #include
unsigned char wang[4]={0x00,0x02,0x00,0x00};
void main() { menu1();menu2();WP=0; WrToROM(wang,4,4); key1(); }
/******************************************************************** IIC通信 IIC.h
********************************************************************/ #include
sbit Scl=P1^1; sbit Sda=P1^2;
void Start(void) {
Sda=1;_nop_();_nop_();
Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); Sda=0; _nop_();_nop_();_nop_();_nop_();_nop_(); Scl=0; }
void Stop(void) {
Sda=0; _nop_();
Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); Sda=1; _nop_();_nop_();_nop_();_nop_();_nop_();
14
芜湖信息技术职业学院毕业论文(设计)
Scl=0; }
void Ack(void) {
Sda=0;_nop_();_nop_();_nop_(); Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_(); Scl=0;_nop_();_nop_(); }
void NoAck(void) { Sda=1;_nop_();_nop_();_nop_(); Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); Scl=0;_nop_();_nop_(); }
void Send(unsigned char Data) { unsigned char BitCounter=8; unsigned char temp; do { temp=Data; Scl=0; _nop_();_nop_();_nop_();_nop_();_nop_(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; }
unsigned char Read(void) { unsigned char temp=0; unsigned char temp1=0; unsigned char BitCounter=8; Sda=1; do {
15
芜湖信息技术职业学院毕业论文(设计)
Scl=0;_nop_();_nop_();_nop_();_nop_();_nop_(); Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); }
/******************************************************************** 存储器模块 at24c02.h
********************************************************************/ #include
#define AddWr 0xae //写数据地址 0xae #define AddRd 0xaf //读数据地址 0xaf
sbit WP=P1^3; //写保护,这里不使用
void mDelay(unsigned char j) { unsigned int i; for(;j>0;j--) { for(i=0;i<125;i++) {;} } }
void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num) { unsigned char i; unsigned char *PData; PData=Data; for(i=0;i 16