找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1757|回复: 0
打印 上一主题 下一主题
收起左侧

一些51单片机的简单学习实验程序

[复制链接]
跳转到指定楼层
楼主
ID:590636 发表于 2019-7-29 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验项目目录
实验1:μVision集成开发环境的操作使用和汇编程序设计实验. 1
实验2:汇编语言设计实验  2
实验3:C51程序设计实验. 3
实验4:键盘与显示编程实验. 4
实验5:单片机外部中断实验. 5
实验6:中断及定时系统综合应用之电子钟实验. 7
实验8:串行通信实验. 8
实验9:A/D转换实验. 9
实验10:D/A转换实验. 10
实验11:简易数字信号发生器设计. 11
实验12:简易数字电压表的设计. 12

实验1:μVision集成开发环境的操作使用和汇编程序设计实验
一、实验目的与要求
1.掌握汇编语言指令格式,熟练常用汇编指令的含义及使用方法;
2.熟悉基本程序的结构,熟悉编写汇编程序的基本方法;
3.掌握使用uVision3创建应用项目方法和步骤和使用uVision3调试应用程序的基本方法。
二、实验内容与任务
在uVision3环境下,采用汇编语言,分别编程实现:
1. 求取存储在50H~5FH区间的16个无符号二进制数的最大值和最小值,并将最大值存入60H内,最小值存入61H内。
2. 求片内连续50H~5FH 这16个单元的8位无符号数的平均值,并将结果存入60H中。
3 求多字节无符号数的加法。40H,41H和42H中分别存入被加数的低8位,中8位和高8位,50H,51H和52H中分别存入加数的低8位,中8位和高8位,要求,将两者相加,结果按低到高位存入40H至43H中,并将结果的字节数存入R3中。
三、实验仪器与设备
     计算机,uVision3软件
四、实验设计方案与程序
1. ORG    0000H
   AJMP    MAIN
   ORG     0030H        
MAIN:
   MOV     A,#0FFH
   CLR     C      
   MOV     R2,#08H

LOOP1:
   RLC     A      
   MOV     P0,A   
   ACALL   DEL     
   DJNZ    R2,LOOP1   
   MOV     R2,#08H

LOOP2:
   RRC     A      
   MOV     P0,A   
   ACALL   DEL
   DJNZ    R2,LOOP2   
   JMP     MAIN   


DEL:   MOV R5,#05H   
DEL1:  MOV R6,#0F0H
DEL2:  MOV R7,#0F0H
DEL3:  DJNZ R7, DEL3
   DJNZ R6, DEL2
   DJNZ R5, DEL1
    RET
END


2 ORG 0000H
LJMP MAIN
ORG 1000H
MAIN:MOV R0,#50H
     MOV R1,#51H
     MOV R3,#15
     MOV R4,#10H
     CLR C
LOOP:MOV A,@R0
     ADDC A,@R1
     MOV @R0,A
     INC R1
     DJNZ R3,LOOP
     MOV A,@R0
     DIV A10H
     MOV 60H,A
     SJMP $
     END


3. ORG 0000H
LJMP MAIN
ORG 1000H
MAIN:MOV R0,#40H
     MOV R1,#50H
     MOV R2,#3
     CLR C
LOOP:MOV A,@R0
     ADDC A,@R1
     MOV @R0,A
     INC R0
     INC R1
     DJNZ R2,LOOP
     SJMP $
     END

五、实验结果与分析
1.结果;存储在50H~5FH区间的16个无符号二进制数的最大值存入60H内,最小值存入61H内。
2结果;程序执行后,16个数的平均值放入60H,
3.结果:两个加数的高、中、低三位分别在40H、41H、42H和50H、51H、52H中,和分别放在40H、41H、42H中。
六、回答问题及体会
遇到的问题:对汇编语言的不熟悉及程序设计的问题
解决:多看书,多实验
体会:基础最重要,要重视基础


实验2:汇编语言设计实验 2一、实验目的与要求
1.掌握汇编语言程序结构及其使用方法;
2.学会用汇编语言编写应用程序;
3.熟悉LED的工作特性及控制方法。
4.熟悉单片机实验板的工作原理。
二、实验内容与任务
实验参考电路图如下图所示(实际电路图以自己手中的单片机实验板为准),要求采用汇编语言编写程序,控制数码管跑马显示0-9。
file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg

三、实验仪器与设备
     计算机,单片机实验板
四、实验设计方案与程序
  ORG    0000H
   AJMP    MAIN
   ORG     0030H        
MAIN:
   MOV     A,#0FFH
   CLR     C      
   MOV     R2,#08H

LOOP1:
   RLC     A      
   MOV     P0,A   
   ACALL   DEL     
   DJNZ    R2,LOOP1   
   MOV     R2,#08H

LOOP2:
   RRC     A      
   MOV     P0,A   
   ACALL   DEL
   DJNZ    R2,LOOP2   
   JMP     MAIN   


DEL:   MOV R5,#05H   
DEL1:  MOV R6,#0F0H
DEL2:  MOV R7,#0F0H
DEL3:  DJNZ R7, DEL3
    DJNZ R6, DEL2
   DJNZ R5, DEL1
   RET
END
五、实验结果与分析
小灯显示0到9,如下图所示
file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg

六、回答问题及体会  
遇到的问题:对汇编语言的不熟悉及程序设计的问题
解决:多看书,多实 验 体会:基础最重要,要重视基础


实验3:C51程序设计实验  一、实验目的与要求
1.掌握C51程序结构及其使用方法;
2.学会用C51编写应用程序;
3.掌握LED的工作特性及控制方法。
4.掌握单片机实验板的工作原理。
二、实验内容与任务
实验参考电路图如下图所示(实际电路图以自己手中的单片机实验板为准),要求使用C51编写程序,使小灯从左到右移动
file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg

三、实验仪器与设备
     计算机,单片机实验板
四、实验设计方案与程序
#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int //加黑的都是定义头文件

void DelayMS(uint x) //延时

{

uchar i;

while(x--)

{

for(i=0;i<120;i++);

}

}

void main() //主程序

{

uchar i;

P2=0x01;

while(1)

{

for(i=0;i<7;i++)

{

P2=_crol_(P2,1); //左循环移动

DelayMS(150);

}

for(i=0;i<7;i++)

{

P2=_cror_(P2,1); //右循环移动

DelayMS(150);

}

}

}
五、实验结果与分析
file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg
六、回答问题及体会
问题:C语言知识的缺乏以及编程遇到的困难

解决方案:多练习,多编程,有自己的编程风格

体会;编程是个很有意思的东西,一串串代码就能让灯按顺序亮起来,很有意思


实验4:键盘与显示编程实验一、实验目的与要求
    1. 进一步掌握单片机通用IO接口的编程方法。
     2.掌握单片机矩阵键盘电路的设计方法。
     3.掌握单片机读取矩阵键盘状态的编程方法。
     4.掌握数码管动静态扫描控制方法。
二、实验内容与任务
    1、实验电路图如图所示,按键信号由P2口进行识别,上电后左一数码管显示“P”,按下某按键后,在左一数码管显示对应键值。
file:///C:/Users/22284/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg

三、实验仪器与设备
     计算机,单片机实验板
四、实验设计方案与程序
#include"reg52.h"         
typedef unsigned int u16;     
typedef unsigned char u8;
#define GPIO_DIG P0
#define GPIO_KEY P1
sbit LSA=P2^2;
sbit LSB=P2^3;                  
sbit LSC=P2^4;
u8 KeyValue;  
u8 code smgduan[17]={0xf3,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(u16 i)
{
    while(i--);   
}
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
    if(GPIO_KEY!=0x0f)
    {
       delay(1000);
       if(GPIO_KEY!=0x0f)
       {   
           GPIO_KEY=0X0F;
           switch(GPIO_KEY)
           {
              case(0X07):   KeyValue=1;break;
              case(0X0b):   KeyValue=2;break;
              case(0X0d):KeyValue=3;break;
              case(0X0e):   KeyValue=4;break;
           }
           GPIO_KEY=0XF0;
           switch(GPIO_KEY)
           {
               case(0X70):   KeyValue=KeyValue;break;
              case(0Xb0):   KeyValue=KeyValue+4;break;
              case(0Xd0):KeyValue=KeyValue+8;break;
              case(0Xe0):   KeyValue=KeyValue+12;break;
           }
           while((a<50)&&(GPIO_KEY!=0xf0))  //检测按键松手检测
           {
              delay(1000);
              a++;
           }

        }
    }
    }
void main()
{   
    LSA=1;
    LSB=1;
    LSC=1;
    while(1)
    {  
       KeyDown();      
       GPIO_DIG=smgduan[KeyValue];   
    }      
}
五、实验结果与分析
上电后左一数码管显示“P”,按下某按键后,在左一数码管显示对应键值。
如图

新建 Microsoft Word 文档.docx

14.25 KB, 下载次数: 4, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表