ImageVerifierCode 换一换
格式:DOCX , 页数:77 ,大小:635.98KB ,
资源ID:23776745      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23776745.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机简易c语言程序与仿真.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机简易c语言程序与仿真.docx

1、单片机简易c语言程序与仿真实验一 Keil与protues联合仿真实验一、实验要求1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 继续在Proteus软件中绘制电路,将P1口做输出口,接八只发光二极管3. 在Keil软件中编写程序,实现功能,间隔1S点亮一个发光二极管,顺序从P1.0到P1.7依次点亮。二、实验目的1. 学习Proteus软件的使用方法2. 学习Keil软件的使用方法3. 学习端口输出的使用方法4. 掌握延时程序的设计三、实验说明将P1口做输出口,接八只发光二极管,实现功能,间隔2S点亮一个发光二极管,顺序从P1.0到P1.6依次点亮四、硬件

2、原理图及程序设计(一)硬件原理图设计 (二)程序流程图设计21(三)程序设源代码#include sbit LED=P1;定义P1口显示LEDmain()unsigned int i;定义时间变量int j;while(1) P1=(1j+);/P1口高电平左移一位 for(i=0;i=10,则将数码管数值清零。四、硬件原理图及程序设计(一)硬件原理图设计(二)程序流程图设计(三)程序设源代码#includevoid delay (int i) /延迟子函数while(i) i=i-1; manin() unsigned char j; while(1) P1=0xc0; /显示数字1 del

3、ay(20000); /延迟2S P1=0xf9; /显示数字2 delay(20000); /延迟2S P1=0xa4; /显示数字3 delay(20000); /延迟2S P1=0xb0; /显示数字4 delay(20000); /延迟2S P1=0x99; /显示数字5 delay(20000); /延迟2S P1=0x92; /显示数字6 delay(20000); /延迟2S P1=0x83; /显示数字7 delay(20000); /延迟2S P1=0xf8; /显示数字8 delay(20000); /延迟2S P1=0x80; /显示数字9 delay(20000); /

4、延迟2S P1=0x98; /显示数字0 delay(20000); /延迟2S 五实验总结1、实验过程中遇到的问题及解决方法在仿真过程中出现乱码现象!通过改变检测发现数码管用的是共阴数码管 调试过来后显示正常. 2、体会 进一步熟悉软件的应用和单片机编程知识的加深了解!实验三 按键输入与数码管静态显示实验一、实验要求方法二:用查询方式1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 在电路中增加一个7段数码管(共阳/共阴自选),将P2口作数据输出口与7段数码管数据引脚相连 3. 在P0.0和P0.1分别连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚

5、为低电平时4. 在Keil软件中编写程序:实现数码管循环显示数字09,程序一开始数码管显示0,当按下P0.0引脚对应按键时,显示数字加一;当按下P0.1引脚对应按键时,显示数字减一;(不用外部中断方式)方法二:用中断方式1. 在P3.2和P3.3分别连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平2. 在Keil软件中编写程序:实现数码管循环显示数字09,程序一开始数码管显示0,当按下P3.2引脚对应按键时,显示数字加一;当按下P3.3引脚对应按键时,显示数字减一;(用外部中断方式,下降沿触发)3. 二、实验目的1. 巩固Proteus软件和Keil软件的使用方法2. 学习端口

6、输入输出的高级应用3. 掌握7段数码管的连接方式和静态显示法4. 掌握按键输入识别与去抖动程序设计三、实验说明系统电路实现P2口数码管循环显示数字09,程序一开始数码管显示0,当按下P3.0引脚对应按键时,显示数字加一;当按下P3.1引脚对应按键时,显示数字减一。采用IF语句既当所对应按键被按下时执行数码管加一后减一操作。四、硬件原理图及程序设计(一)硬件原理图设计(二)程序流程图设计(三)程序设源代码#include / 声明8051寄存器的头文件sbit P0_0 = P00; / 声明第一位位选接至P3.0sbit P0_1 = P01; / 声明第一位位选接至P3.1char TAB1

7、0=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98;/09数码管显示数据void delay_ms(int x) /1MS延时子程序int i,j; / 声明整数变量i,jfor(i=0;ix;i+) / 计数X次,延迟X*1msfor(j=0;j=10) temp = 0;/如果temp=10,则将temp零 while(P0_0 = 0);/等待按键放开,要不然一直等待 P0_1 = 1;/将P3.0作输入用,要先写1 if(P0_1 = 0) /如果按键被按下 delay_ms(10);/延时10ms去抖动 if(P0_1= 0) /确

8、定按键真的被按下 temp-;/将显示变量加一 if(temp=10,则将temp零 while(P0_1 = 0);/等待按键放开,要不然一直等待 五实验总结1、实验过程中遇到的问题及解决方法 A实验中未对P0.0,P0.1口进行定义,出现了很多的问题,后经过仔细检查找到了问题也解决了这一问题。 B2、体会:第一次掌握的去抖动函数及其重要性。实验四 数码管动态显示实验一、实验要求1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 在电路中增加四个7段数码管(共阳/共阴自选),将P2口作数据输出口与7段数码管数据引脚相连 ,P0.0P0.3引脚输出选控制信号3.

9、 在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的5. 巩固Proteus软件和Keil软件的使用方法6. 学习端口输入输出的高级应用7. 掌握7段数码管的连接方式和动态显示法8. 掌握查表程序和延时等子程序的设计三实验说明系统电路实现由89C51将数据由P2口送出,由P3.0P3.3引脚对送入的数据进行位选。并采用延时的方法实现四个数码管的动态显示1,2,3,4。采用送一个数据位选一次来进行数据的动态显示。将P2口作数据输出口与7段数码管数据引脚相连 ,P0.0P0.3引脚输出位选控制信号.四、硬件原理图及程序设计(一)硬件原理图设计(二)程序流程

10、图设计(三)程序设源代码#include / 声明8051寄存器的头文件sbit P3_0 = P30; / 声明第一位位选接至P3.0sbit P3_1 = P31; / 声明第一位位选接至P3.1sbit P3_2 = P32; / 声明第一位位选接至P3.2sbit P3_3 = P33; / 声明第一位位选接至P3.3char seg710 = 0xc0,0xf9,0xa4,0xb0,0x99, / 数字04 0x92,0x83,0xf8,0x80,0x98; / 数字59void delay_ms(int x) / 延时1ms程序int i,j; / 声明整数变量i,jfor(i=0

11、;ix;i+) / 计数X次,延迟X*1msfor(j=0;j120;j+); / 计数120次,延迟1ms /延迟函数结束 main() / 主程序开始while (1) /无穷循环P3_0 = 1;P3_1 = 0;P3_2 = 0;P3_3 = 0;P2 = seg71; / P2口送数据到数码管delay_ms(100); /延时100毫秒P3_0 = 0;P3_1 = 1;P3_2 = 0;P3_3 = 0;P2 = seg72; / P2口送数据到数码管delay_ms(100); /延时100毫秒7P3_0 = 0;P3_1 = 0;P3_2 = 1;P3_3 = 0;P2 =

12、seg73; / P2口送数据到数码管delay_ms(100); /延时100毫秒P3_0 = 0;P3_1 = 0;P3_2 = 0;P3_3 = 1;P2 = seg74; / P2口送数据到数码管delay_ms(100); /延时100毫秒 五实验总结1、实验过程中遇到的问题及解决方法 A在实验中对位选的理解不够深,导致数据动态显示未能按预定顺序显示,经过更高位选电平,最终克服了这个问题; B由于延时时间过短为能看到预期的动态显示效果,经过更改延迟显示时间最后克服了这一问题。2、体会 在这个实验中由于自己对位选的理解错误而给程序造成了一点的小错误,不过这样也让我对遇到的位选问题更加的

13、印象深刻。五 键盘扫描实验一、实验要求1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 在电路中增加一个7段数码管(共阳/共阴自选),并绘制一个4X4键盘,分别定义键盘值从0到9,A,B,C,D,E,F;3. 在Keil软件中编写程序,对键盘进行扫描,将扫描到的键盘值用数码管进行显示。 二、实验目的1. 学习端口输入输出的高级应用2. 掌握7段数码管的连接方式和显示法3. 掌握4X4键盘的扫描原理和程序三实验说明在89c51的P1口接4x4的键盘,P1.0到P1.4接键盘四行,P1.5P1.8接键盘四列,在P2口接7段数码管并与一限流电阻串联。所谓4x4键盘是

14、指4列4行所构成的按键阵列,每个按键一次编制为09、af。在键盘扫描时先判断是否有按键按下,再判断是哪一列按键按键被按下,最后判断是哪一行按键被按下,根据公式 :所按键数值 = 行*4+列。最后数值在P2口由七段数码管查询得出并显示。四、硬件原理图及程序设计(一)硬件原理图设计(二)程序流程图设计(三)程序设源代码#include / 声明8051寄存器的头文件#define SCANPORT P1 /定义键盘扫描联接口PX.7-PX.4接列1到4,PX.3-PX.0接行1到4,char TAB16=0xC0,0xF9,0xA4,0xB0,0x99, /共阳极04数码管显示数据 0x92,0x

15、82,0xF8,0x80,0x98, /共阳极49数码管显示数据 0xA0,0x83,0xa7,0xa1,0x84,0x8e; /共阳极af数码管显示数据void delay_ms(int x) /1MS延时子程序int i,j; / 声明整数变量i,jfor(i=0;ix;i+) / 计数X次,延迟X*1ms for(j=0;j120;j+); / 计数120次,延迟1ms / 延时子程序结束unsigned char LineScanCode4=0x7F,0xBF,0xDF,0xEF; /列扫描数据 PX.7-PX.4接列1到3unsigned char KeyScan() unsigne

16、d char Temp=0; unsigned char KeyValue=0,Row=4,Line=0; for(Line=0;Line4;Line+) SCANPORT = LineScanCodeLine;/输出列扫描值,且将要读输入的低4位引脚写1 Temp = SCANPORT & 0x0F; /读入4个行的值 if(Temp!=0x0F)/如果有一行不为1,说明在这次列扫描中有按键按下 switch(Temp)/判断是哪一行被按下 case 0x0E: Row=3;break; /00001110 3 case 0x0D: Row=2;break; /00001101 2 case

17、 0x0B: Row=1;break; /00001011 1 case 0x07: Row=0;break; /00000111 0 default: break; break; /扫描结束 SCANPORT=0x0F;/将要读输入的低4位引脚写1 KeyValue = Row*4+Line; return KeyValue; void main() unsigned char key; while(1) key = KeyScan(); if(key16) /有键按下 P2 = TABkey; 五实验总结1、实验过程中遇到的问题及解决方法 A由于初始对键盘扫描程序未能充分理解,在判断是哪行

18、按键被按下时判断失误,导致按键顺序未按一定规律。 B由于C语言基础知识不是很好,出现了一下细节性的问题。 C刚开始时对按键如何执行扫描程序的不清楚,导致了出现很多问题。2、体会 刚接触键盘时觉得很神奇,后来经过老师的讲解,觉得我们专业也是可以制作很多好东西的,例如密码锁等。在一遇到问题时要仔细分析,从中找出问题才会有所收获,自己找出问题,并通过动脑筋查阅相关资料后得出正确的结果是一件很有成就感的事情。实验六 外部中断实验一一、实验要求1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. P1口上拉接8个LED;3. 在Keil软件中编写程序,对LED显示进行控制,

19、显示方式有两种:(1)0、7亮,1、6亮,2、5亮,3、4亮,0、7亮循环;(2)3、4亮,2、5亮,1、6亮,0、7亮,3、4亮循环。 4. 在P3.2连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平5. 编写程序:系统对LED显示进行控制,一开始显示方式为(1),当按下P3.2连接的按键时,系统在(1)和(2)之间切换显示方式二、实验目的1. 学习端口输入输出的高级应用2. 掌握LED查表显示法3. 掌握外部中断的工作原理4. 掌握外部中断程序设计三实验说明P1口外接一个排灯,并下拉220欧姆电阻,在P3.2连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平。

20、用中断的方式实现排灯在方式(1):0、7亮,1、6亮,2、5亮,3、4亮和方式(2):3、4亮,2、5亮,1、6亮,0、7亮之间切换,当P3.2连接一个按键被按下则发生中断,则flag反向一次,排灯则切换方式(1)到方式(2),若按键被按下,则从方式(2)切换到方式(1),如此循环。四、硬件原理图及程序设计(一)硬件原理图设计(二)程序流程图设计(三)程序设源代码#include / 声明8051寄存器的头文件char i,flag=1; / 定义变量并赋初值char LED4=0x7e,0xbd,0xdb,0xe7;/定义LED显示方式07,16,25,34亮灯void delay_ms(i

21、nt x) /延时1ms子程序int a,b; / 定义整型变量for(a=0;ax;a+) / 计数X次,延迟X*1ms for(b=0;b3) i=0; /如果i大于3则另它等于0 elsei-; / 如果flag等于0,则执行下面 if(i0) i=3; / 如果i小于0则另它等于3 void my_int(void) interrupt 0 using 1 /中断子程序 flag=!flag; /flag等于flag的反五实验总结1、实验过程中遇到的问题及解决方法 A实验中遇到当按键被按下后排灯却没有在方式(1)和方式(2)之间切换的问题,经过检查发现是对if语句理解不够,造成错误,经

22、过多次调试后解决了该问题 B由于初次接触中断,对中断的各开关未能很好的设定开关。实验七 外部中断实验二一、实验要求1. 在数码管动态显示实验中的电路图基础上,绘制两个按钮K1和K2,一端分别与单片机P3.2和P3.3引脚,当按键弹起时引脚为高电平,当按键按下时引脚为低时平2. 在Keil软件中编写程序, 采用动态显示法,主程序让实现数码管分别显示数字1,2,3,4,当K1按下时数字顺序向右移一位显示,当K2按下时数字顺序向左移一位显示二、实验目的1. 掌握7段数码管的连接方式和动态显示法2. 巩固中断的知识,学会外部中断的使用3. 掌握查表程序、中断服务子程序和延时等子程序的设计三实验说明 a

23、对程序的用查表法显示1234.当要移位时用中断对j+,就是每按下按键就加一,而另外一个中断j-。b 查表时我们的表数据是1,2,3,4,1,2,3,4这样就可以实现移位,这种方法比较简单。四、硬件原理图及程序设计(一)硬件原理图设计(二)程序流程图设计(三)程序设源代码#includesbit P3_2=P32;sbit P3_3=P33;/1MS延时子程序void delay_ms(int x) /延时子程序(x)msint i,j;for(i=0;ix;i+) for(j=0;j3)j=0; if(j0)j=3; void zd0() interrupt 0 using 1 j+;void zd1() interrupt 2 using 1 j-;五实验总结a这个试验中出现了错误,是写程序不够严格,以至于不能实现功能。所以以后写程序要规范,避免不要的书写错误。b还有就是在做isis、的时候,找元件不够熟悉,找个元件要很久,还有就是对电路不够了解,电路总是出错,所以要巩固电路的基础知识。实验八

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1