单片机C语言实验指导书 18课时 .doc_第1页
单片机C语言实验指导书 18课时 .doc_第2页
单片机C语言实验指导书 18课时 .doc_第3页
单片机C语言实验指导书 18课时 .doc_第4页
单片机C语言实验指导书 18课时 .doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

单片机及应用实验指导书(C语言篇)封面扬州环境资源职业技术学院应用电子教研室2011-02-18目 录实验一单片机系统开发软件的使用1实验二LED广告灯的设计10实验三数码管显示原理及应用实现14实验四按键识别的设计18实验五简易频率计的设计30实验六数字式电压表的设计34实验七 简易波形发生器的设计41实验八 点阵LED显示设计44实验九 液晶显示器显示电路设计46实验一单片机系统开发软件的使用一、实验目的1. 会利用keil C51软件对单片机C程序进行编译; 2. 会利用protues软件绘制电路原理图并实现仿真;3. 会用keil C51软件对源程序进行编译调试及与Protues软件联调,实现电路仿真二、原理说明Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,该软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。编译后生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势,C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进和扩充。 Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路.该软件的特点是: 实现了单片机仿真和SPICE电路仿真相结合。支持主流单片机系统的仿真。提供软件调试功能。 具有强大的原理图绘制功能。三、实验设备计算机及其相关的设备四、实验内容1、用keil C51软件编辑编译一段C程序,实现打印的Keil C51 欢迎界面:“Hello I am KEIL,I will be your friend.”程序清单:# include reg51.h / 包含头文件# include stdio.hvoid main (void) / 主函数 SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1; / PRINTF函数所必须 printf (“Hello I am KEIL.n ”); printf (“I will be your friend.n ”); while(1); 软件操作:、运行keil C51编辑软件,软件界面如图所示、 建立一个新的工程项目单击Project菜单,在弹出的下拉菜单中选中New Project选项、保存工程项目a、选择要保存的文件路径,输入工程项目文件的名称,如保存的路径为C51文件夹,工程项目的名称为C51,如图所示,单击保存b、为工程项目选择单片机型号在弹出的对话框中选择需要的单片机型号,如图所示,这里选择51核单片机中使用较多的89S51,选定型号后,单击确定,出现如图所示的开发平台界面、 新建源程序文件在下图中单击“File”菜单,选择下拉菜单中的New选项,新建文件后得到如图的界面: 程序录入区域、 保存源程序文件 单击“File”菜单,选择下拉菜单中的Save选项,在弹出的对话框中选择保存的路径及源程序的名称,如图所示。此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时必须键入正确的.扩展名。注意,如果用语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮注意扩展名、为工程项目添加源程序文件在编辑界面中,单击“Target”前面的“+”,再在“Source Group”上单击右键,得到如图所示的对话框,选择“Add File to Group Source Group 1”,弹出如图所示的对话框,选中要添加的源程序文件,单击“Add”,得到如图所示的界面,同时,在“Source Group 1”文件夹中多了一个添加的“Text1.c”文件。、 输入源程序源程序输入完成后保存,得到如图所示的界面。程序中的关键字以不同的颜色提示用户加以注意,这就是事先保存待编辑的文件的好处,即Keil c51会自动识别关键字、 编译调试源程序在上图中,单击Project菜单,在弹出的下拉菜单中选中Built Target选项,再单击Debug菜单,在弹出的下拉菜单中选中Start/Stop Debug Session选项, 编译成功后,再单击Debug菜单,在弹出的下拉菜单中选中Go选项,进行源程序调试。如图所示。、查看分析结果单击Debug菜单,在弹出的下拉菜单中选中Stop Running选项, 单击View菜单,在弹出的下拉菜单中选中Serial Windows #1 选项,可以看到程序运行的结果,如图所示:、生成Hex代码文件必须选中将编译调试成功的源程序生成可供单片机加载的Hex代码文件,单击Project菜单,在弹出的下拉菜单中选中Options for Target Target 1选项,在弹出的对话框中单击Output选项,选中其中的“Create HEX File”项。其他选项可以不考虑,如图所示:到此,一个完整的工程项目就在Keil C51软件上就编译完成把生成的.HEX代码烧写到8051芯片中,完成软件程序到代码的转换。2、用Proteus仿真软件,实现单片机最小系统的简单应用。要求:P1口控制8个发光二极管LED循环点亮。电路原理图如图所示单片机中常用的元件在下表中查找系 列元 件Miscellaneous晶振、电池、保险等Microprocessor ICs各类单片机及其他芯片Optoelectronics各类光电显示元件Analog ICs各类模拟电子元件Capacitors各类电容元件Resistors各类电阻元件Switches&Relays各类开关及按钮五、实验注意事项1、Keil C51软件在使用调试中会出现由于录入出现的各种错误和程序本身语法错误,要学会自己排除错误。2、在进行Keil C51软件编译时,要注意软件参数设置。3、在进行Proteus软件仿真时,要注意与Keil C51软件之间互调设置。六、思考题如何编写程序七、实验报告1画出单片机最小系统电路图4. 心得体会及其他。实验二LED广告灯的设计一、实验目的1、能根据设计任务要求编制程序流程图,理解程序对发光二极管的控制原理;2、会利用protue绘制流水广告灯电路原理图;3、会用keil C51软件对源程序进行编译调试及与protues软件联调,实现电路仿真二、原理说明流水广告灯就是使依次排列的各个LED发光。用8051的I/O口做输出口,接入发光二极管,通过控制I/O电平的变化,实现需要的显示效果。任务要求:编写程序,使发光二级管循环点亮,时间间隔为0.2s。即刚开始时D1点亮,延时0.2s后,接着是D2点亮,接着依次点亮D3、D4、D5、D6、D7、D8,然后再点亮D7、D6、D5、D4、D3、D2、D1,重复循环。硬件电路分析:该电路采用的是共阳接法,要使LED点亮,则P1口的对应端子输出低电平,即P1.00时,D1亮。一般情况下,驱动LED的电流约10mA左右,而LED本身的压降为2V。当P1.0输出为低电平时,输出为0V,则流经D1的电流为,为了在仿真实验中让LED更亮一些,在这里取限流电阻为100。相反,当P1.0输出为高电平时,输出电压为5V,则流经D1的电流为0mA,D1不亮(熄灭),即P1.01时,D1不亮(熄灭)。发光二极管LED介绍:通常红色(贴片)二极管LED:电压1.6V2.4V,电流220mA,在25mA亮度有所变化,5mA以上亮度基本无变化,可以求出电阻阻值大概在150-1.5K之间变化三、实验设备同实验一。四、实验内容1、点亮第一个LED 2、从左到右的流水灯 3、左右来回循环的流水灯4、花样流水灯程序: 点亮第一个D1发光二极管#include /52系列单片机头文件sbit led1=P10; /声明单片机P1口的第一位void main() /主函数led1=0; /*点亮第一个发光二极管*/while(1); 点亮第1、3、5、7发光二极管#include /52系列单片机头文件void main()/主函数P1=0xaa; While(1);让D1二极管以亮1S、灭1S的方式进行闪烁的程序(亮灭时间相同)#include /52系列单片机头文件#define uint unsigned int /宏定义sbit led1=P10; /声明单片机P1口的第一位uint i,j;void main() /主函数while(1) /大循环led1=0; /*点亮第一个发光二极管*/for (i=1;i0;i-) /延时for (j=110;j0;j-);led1=1; /*关闭第一个发光二极管*/for (i=1000;i0;i-)/延时for (j=110;j0;j-); 让D1二极管以亮200ms、灭800ms的方式进行闪烁的程序(亮灭时间不相同)#include /52系列单片机头文件#define uint unsigned int /宏定义sbit led1=P10; /声明单片机P1口的第一位void delayms(uint);/声明子函数void main() /主函数while(1) /大循环led1=0;/*点亮第一个发光二极管*/delayms(200);/延时200毫秒led1=1;/*关闭第一个发光二极管*/delayms(800);/延时800毫秒void delayms (uint xms)uint i,j;for (i=xms;i0;i-) /即延时约xms毫秒for (j=110;j0;j-);任意变化广告灯的设计#include reg52.h /包含头文件#define uchar unsigned char / 设置变量类型uchar discode8=0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff; /*定义显示花样数据的数组*/void delay02s (void) / 延时时间unsigned char i,j,k;for(i=2;i0;i-)for(j=200;j0;j-)for(k=250;k0;k-);void main(void) / 主函数uchar i; / 定义变量while(1)for(i=0;i8;i+) / 循环8次P1=discodei; /将数组discode中的第i个数据取出来,赋给P1口输出delay05s(); 利用C51自带的库函数_crol_,以间隔500ms,实现所有LED以流水灯的方式显示。#include /52系列单片机头文件#include #define uint unsigned int /宏定义#define uchar unsigned charvoid delayms (uint); /声明子函数uchar aa;void main() /主函数aa=0xfe; /赋初值11111110 while(1) /大循环P1=aa;delayms(500); /延时500毫秒 aa=_crol_(aa,1); /将aa循环左移1位后再赋给aa void delayms (uint xms)uint i, j;for (i=xms;i0;i-) /i=xms 即 延 时约xms毫秒for (j=110;j0;j-);五、实验注意事项1.、调试程序要注意格式,理解用C语言编写的条理性。六、思考题1. 要让八个LED模拟成雨滴(从大到小)的现实效果,程序如何编写2. 在考虑编写这些广告灯的花样还有其他的什么方法。七、实验报告心得体会及其他。实验三数码管显示原理及应用实现一、实验目的 知识目标1.了解 7段LED数码管的结构及其工作原理; 2. 掌握单片机对数码管的静态、动态显示控制方式;3. 应用单片机进行计数控制的原理。 能力目标:1. 能根据设计任务要求编制不同进制计数器的程序流程图,理解程序对数字电子时钟的控制原理; 2. 会利用电路仿真软件绘制简易数字电子时钟的电路原理图; 3. 会用keil C51软件对源程序进行编译调试及与protues软件联调,实现电路仿真。二、原理说明数码管是通过对其不同的管脚输入相对的电流使其发亮从而显示出数字,可以显示时间、日期、温度等可以用数字代替的参数。1、单个数码管2、多位数码管三、实验设备计算机及相关设备四、实验内容1、一位数码管电路图硬件(共阴数码管)要求循环显示09十个数字。程序:/单只数码管循环显示09#include#include#define uchar unsigned char#define uint unsigned intUchar code DSY_code =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;Void Delayms(uint xms) /延时uint I,j;for(i=xms,i0,i-)for(j=xms,j0,j-) ;void main() /主程序uchar i=0;P2=DSY_codei;i=(i+1)%10;Delayms(500) 2、多位数码管硬件电路图(共阳数码管)程序、8只数码管滚动显示单个数#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_code =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void Delayms(uint xms) /延时uint I,j;for(i=xms,i0,i-)for(j=xms,j0,j-) ;void main() /主程序 uchar I,k=0X80; while(1)for (i=0;i8;i+) P2=0Xff;/关闭显示 k=_crol_(k,1); P0=DSY_codei;/发送段码 P2=k;/发送数码管位码 Delayms(300); 、8只数码管动态显示多个不同字符#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_code =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void Delayms(uint xms) /延时uint I,j;for(i=xms,i0,i-)for(j=xms,j0,j-) ;void main() /主程序 uchar k,m=0X80; P0=0XFF;P2=0X00;while(1)for (K=0;K8;K+) P2=m;/位码 m=_crol_(k,1); P0=DSY_codek+1;/发段码 delayms(2); 五、实验注意事项调试程序时候注意出现的语法错误六、思考题1、从0-59的加一计数显示(动态)设计2、任意进制计数器的设计七、实验报告1、 心得体会及其他。实验四按键识别的设计一、实验目的 知识目标:1、 掌握单片机的键盘的组成硬件电路;2、 掌握单片机最小系统的组成及相关电路的工作原理;3、 掌握单片机键盘扫描原理。 能力目标:1. 掌握键盘的去抖的原理及处理的方法。二、实验原理 单片机应用系统中,键盘主要用于向计算机输入数据、传送命令等,是人工干预计算机的主要手段。键盘要通过接口与单片机相连,分为编码键盘和非编码键盘两类。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,使用最广泛的是非编码键盘。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。1、独立式键盘2、矩阵式键盘键盘编程扫描法识别按键一般应包括以下内容:(1)判别有无键按下。(2)键盘扫描取得闭合键的行、列号。(3)用计算法或查表法得到键值。(4)判断闭合键是否释放,如没释放则继续等待。(5)将闭合键的键值保存,同时转去执行该闭合键的功能。3、消抖方法、硬件去抖,在按键的两端加电容、软件去抖,一般延时10ms左右三、实验设备与器件计算机及其相关设备四、实验内容1、用单键(即独立键盘中的按键)实现对LED进行控制,每按一次按键时,LED显示方式变化一次,用以表示按键控制的结果。独立按键电路图:程序#include / 包含头文件sbit key1=P10; / 按键定义void delay10ms (void) / 延时子函数unsigned int i,k; / 变量定义for (i=10;i0;i-) / for语句循环体 for(k=110;k0;k-);void main (void)/ 主函数 char i=0xfe; P2=i; /置P2.0引脚为低电平 While (1) if (key1= =0)/判断按键key1是否按下 delay10ms(); if (key1=0) /去抖动 if (i&0x80)=0) i=i1; else i=(i1)+1; P2=i; while (key1=0); 2、K1K4控制LED移位(独立按键)按下独立按键K1K4。可以分别上下控制连接在P0、P2端口的LED移位显示, K1K4连接在P1口的高四位,将P1口的值分别于0x10、 0x20、 0x40、 0x80进与操作,如果与其中之一相与后结果为0,则表明对应按键按下,每当有按键按下时候,都会立即导致LED移位,但是按键未释放不会形成LED连续移位显示。程序:/按下K1时,P0端口LED上移一位/按下K2时,P0端口LED下移一位/按下K3时,P2端口LED上移一位/按下K4时,P2端口LED下移一位#include#include#define uchar unsigned char#define uint unsigned intvoid Delayms(uint xms) /延时uint i,j;for(i=xms,i0,i-)for(j=110,j0,j-) ; /P1口的按键移动LEDvoid move_led( ) if (P10x10)=0) P0=_cror_(P0,1);else if (P10x20)=0) P0=_crol_(P0,1);else if (P10x40)=0) P2=_cror_(P2,1);else if (P10x80)=0)P2=_crol_(P2,1); void main( ) /主程序 uchar recent_key;/最近按键 P0=0XFE;P2=0XFE;P1=0XFF; recent_key =p1; while(1) if (recent_key !=p1) recent_key =p1; /保存最近按键 Move_led(); Delayms(10); 3、K1K4按键状态显示按下K1或K2键时LED1或LED2点亮,松开时对应的LED熄灭,当按下K3或K4后释放,LED3或LED4点亮,再次按下并释放时熄灭,如此重复,由于LED1、LED2是否导通与K1、K2是否按下完全保持一致,而LED3、LED4是在K3、K4按下并释放后切换显示,因此用K3、K4是否等于0来判断是否按下,用while(K3=0)和while(K4=0)来等待释放按键,在释放后LED3、LED4分别去反,实现切换显示。程序:#include#define uchar unsigned char#define uint unsigned intsbit led1 =P00;sbit led2 =P01;sbit led3 =P02;sbit led4 =P03;sbit k1 =P10;sbit k2 =P11;sbit k3 =P12;sbit k4 =P13;void Delayms(uint xms)/延时uint i,j;for(i=xms,i0,i-)for(j=110,j0,j-) ; void main( )P1=0Xff;P0=0xff;while(1)led1=K1;led2=K2;if (K3=0)while(K3=0);/等待释放按键led3=led3; if(K4=0)while(K4=0);/等待释放按键led4=led4;Delayms(10);4、键盘键值显示本设计采用AT89S51单片机最小系统,P3口外接矩阵式键盘接口电路,P0口外接共阴型七段数码管,如图所示。电路中共有16个按键,按44的矩阵式排列,键号依次为0F。单片机的P3.0P3.3为输出口,连接4条列线;P3.4P3.7为输入口,连接4条行线程序:#include #define uchar unsigned char#define uint unsigned intuchar key;unsigned char code disp_code=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char code key_code=0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77 ;void delayms(uint ms) uchar t; while(ms-) for(t = 0; t 120; t+); uchar keyscan() /键盘扫描程序 uchar scan1,scan2,keycode,j; P3=0xf0; scan1=P3; if(scan1&0xf0)!=0xf0) /判键是否按下 delayms(30); /延时30ms scan1=P3; if(scan1&0xf0)!=0xf0) /二次判键是否按下 P3=0x0f; scan2=P3; keycode=scan1|scan2; /组合成键编码for(j=0;j=15;j+) if(keycode= key_codej) /查表得键值 key=j; return(key); else P3=0xff; return (16); void keydown() /判断是否有键按下 P3=0x0f; if(P3&0x0f)!=0x0f) keyscan(); P0=disp_codekey; /在数码管上显示键值 main() P0 = 0xbf; /数码管显示- P3 = 0xff; while(1) keydown(); 5、采用中断控制10s的秒表设计要求定时器控制数码管在开始计时后每隔0.1S递增显示,用一个按键实现三种功能,即开始计时、停止计时、清零要求定时器控制数码管在开始计时后每隔0.1S递增显示,用一个按键实现三种功能,即开始计时、停止计时、清零程序:#include#define uchar unsigned char#define uint unsigned intsbit K1=P37;uchar i,second_counts,key_flag_idx;bit key_state;uchar DSY_code =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delayms (uint xms) /延时程序uint i,j;for (i=xms,i0,i-)for (j=110,j0,j-); void key_event_Handle( ) /处理按键事件if (key_state=0)key_flag_idx=(key_flag_idx+1)%3;switch(key_flag_idx)case 1: EA=1;ET0=1;TR0=1;break;case 2: EA=0;ET0=0;TR0=0;break;case 0: P0=0X3F;P2=0X3F;i=0;second_counts=0; void main () /主程 P0=0X3F;/首先显示00,即0.0SP2=0X3F;i=0;second_counts=0;key_flag_idx=0;/按键次数的取值key_state=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;while(1)if(key_state!=K1)delayms(10);key_state=K1;key_event_handle(); void dsy_refresh( ) interrupt 1 /T0中断 TH0=(65536-50000)/256;/50MS定时 TL0=(65536-50000)%256; if ( +i= = 2 ) /每50ms*2=0.1s刷新显示一次 i=0; +second_counts;P0=dsy_codesecond_counts/10;/分别显示高位遇低位P2=dsy_codesecond_counts%10;if (second_counts=100) second_counts=0; /满100(10S)后显示00六、实验报告1、 编写0-99以内循环计数。实验五简易频率计的设计一、实验目的 知识目标 1. 了解定时/计数器的结构及其工作原理;2. 掌握单片机的定时/计数器控制方式;3. 掌握应用单片机进行频率测试控制的原理。 能力目标:1. 能根据设计任务要求编制数显频率计数器的程序,理解程序对计数器的控制原理;2. 会利用电路仿真软件绘制数显频率计数器的电路原理图;3. 会用keil C51软件对源程序进行编译调试及与protues软件联调,实现电路仿真。二、实验原理 单片机定时/计数器的工作原理三、实验设备与器件 计算机及其相关设备四、实验内容1、以AT89S51单片机作为控制电路核心,从P1.1引脚输出周期为500Hz的方波信号。在示波器上显示相应的波形,硬件电路图#include /定义头文件sbit P1_1=P11;void timer0(void) interrupt 1 /定时器0中断服务程序 TH0=0xE0;TL0=0x18; /装入时间常数P1_1=!P1_1; /P1.1取反 void main(void)TMOD=0x00; /定时器0方式0TH0=0xE0;TL0=0x18; /装入时间常数TR0=1; /启动定时器TF0=0; EA=1; /开全局中断 ET0=1; /开定时器0中断 while(1) ; /主程序死循环,空等待 2、设计一个数显频率计数器能测量0300KHz的方波信号。 信号从P3.5引脚输入,P0、 P2口做输出口,接一个8位LED数码管,编写程序,测从P3.5引脚输入的方波信号的频率并通过数码管显示出来,用 AT89S51单片机作为控制核心,1个8位共阳数码管作为输出显示端。AT89S51的P0口接数码管的段码控制,其中P0.0P0.6分别连接数码管的AG引脚,P0.7连接DP端,低电平有效。P2口接数码管位码选通部分,P2.0口控制第1个数码管,一直到P2.7口控制第8个,高电平有效。#include #include #define uchar unsigned charuchar display_code=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff; /定义数组存放显示数据的编码uchar display_data8=0,0,0,0,0,0,0,0; /定义数组存放显示数据的各位uchar c1,b1; sbit P1_1=P11;void delay(void) /延时 uchar i; for(i=500;i0;i-);void display() /显示程序 uchar i,k; k=0x01; for(i=0;i8;i+) P2=0;P0=display_codedisplay_datai; P2=k; k=k0;i-)/此循环将计数值转换为显示数组,从高位到低位依次存放在/display_data0至display_data7display_datai=f%10; f=f/10; display_data0=f;k=1e7;/从这开始到本子程序结束的语句完成让八位LED的高位为0时不显示for(i=0;i7;i+)f2=f1/k;if(f2=0)display_datai=10; k=k/10;void timer1(void) interrupt 3 /定时器1中断服务程序 c1+; void timer0(void) interrupt 1 /定时器0中断服务程序 TH0=0xb1; /装入时间常数TL0=0xe0;P1_1=!P1_1;/P1.1取反,从P1.1引脚输出25Hz的方波信号,通过导线连接/到P3.5引脚输入,以方便调试程序。若使用其它信号源,则去掉即可。if (b1=49)convert();c1=0;/将计数值清零b1=0;TH1=0;TL1=0;else b1+;void main(void) /主函数P0_1=0;c1=0;b1=0;TH1=0;TL1=0;TMOD=0x51;TH0=0Xb1;TL0=0Xe0;IE=0x8a;TCON=0x50;while(1)display();五、实验总结1、画出波形图(注意波形间的相位关系)。2、 将理论计算结果和实测波形相比较,分析产生误差的原因。 实验六数字式电压表的设计一、实验目的 知识目标: 1. A/D转换器相关的基本知识; 2. A/D转换器与单片机的接口技术。 能力目标: 1. 能够正确使用A/D转换器; 2. 能够设计单片机与A/D转换器的接口并编程控制A/D转换器; 3. 会用Keil C51软件对源程序进行编译调试及与Protues软件联调,实现电路仿真二、实验原理模拟量在时间和数值上是连续的,而数字量在时间和数值上都是离散的,所以转换时要在时间上对模拟信号离散化(采样),还要在数值上离散化(量化),一般步骤为:利用单片机和A/D转换器设计一个测量系统,可以实现一个可变的模拟电压或者频率。 三、实验设备与器件 计算机及其相关设备四、实验内容1、用ADC0832实现模数转换和显示硬件电路:程序:#include #include #define uint unsigned int#define uchar unsigned char#define delay4us() _nop_();_nop_();_nop_();_nop_();sbit RS = P20;sbit RW = P21;sbit E = P22;sbit CS = P10;sbit CLK = P11;sbit DIO = P12;uchar Display_Buffer = 0.00V;uchar code Line1 = Current Voltage:;void DelayMS(uint ms) uchar i;while(ms-) for(i=0;i120;i+);bit LCD_Busy_Check() bit result;RS = 0;RW = 1;E = 1;delay4us();result = (bit)(P0&0x80);E = 0;return result;void LCD_Write_Command(uchar cmd) while(LCD_Busy_Check();RS = 0;RW = 0;E = 0;_nop_();_nop_();P0 = cmd;delay4us();E = 1;delay4us();E = 0;void Set_Disp_Pos(uchar pos) LCD_Write_Command(pos | 0x80);void LCD_W

温馨提示

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

评论

0/150

提交评论