单片机实验5

1、实验内容一
1.1、问题一:
单个共阳数码管如图5-1所示,用8位杜邦线将并行口P1与J6相连,在数码管上循环显示0~9。每个数字显示1S。

图5-1 (a)
图5-1 (b)

共阳极数码管显示0-9段码表如图5-2所示:

图5-2

1.2、问题一的代码:

#include <reg51.h>
#include <absacc.h>
void delay();
int i = 0;
int code TAB[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{

	while (1)
	{
		P1 = TAB[i];
		 for(;i < 10;i++)
		 {
		 		P1 = TAB[i];
				delay();
		 }
		i = 0;

	}
}

void delay() 
{	
	int x,y;
	for(x=200;x>0;x--)
    for(y=625;y>0;y--);
}

1.3、问题一的结果和现象:
数码管上循环显示0~9,每个数字显示1S。
2、实验内容二
2.1、问题二:
编程使八位数字01234567在八位共阴极数码管(原理图如图所示5-3)上同时显示,步骤如下:
(1) P0口输出位码01111111B,即先选通最左一个数码管,后P0口再输出“0”对应的段码,延时1S;然后P0口控制选通下一个数码管,即位码为10111111B,输出“1”对应的段码,延时1S;依次选通,最右一个数码管的位码为11111110B。程序运行时看到8个数码管一个一个显示不同的数字。
(2) 将延时时间缩短,看到数字变化的速度加快,当延时足够小时,就会看到8个数码管同时显示不同的数字。(分别取1S,100ms,10ms)。
在这里插入图片描述

图5-3
2.2、问题二的代码:
#include <reg51.h>
#include <absacc.h>
void delay();
int i = 0;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
int code TAB[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F
,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
int code TAB1[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{

	while (1)
	{
		for (i = 0;i < 8;i++)
		{
			P1 = TAB1[i];
			P2_2 = 1;
			P2_2 = 0;
			P1 = TAB[i+num];
			P2_3 = 1;
			P2_3 = 0;
			delay();
		} 
	}
}

void delay() 
{	
	int y;
    for(y=300;y>0;y--);
}

2.3、问题二的实验结果和现象:
当延时时间为1s时,可以明显看出每个数码管的间隔;当延时时间为100ms以及10ms左右时时,可以看到效果好了很多;当时间为4ms时,可看到一直常亮的8个数码管,从左至右依次是0~8;当延时时间小于1ms时,每个数码管出现了重叠,在本次显示还未完成,出现了下一个,
3、实验内容三
3.1、问题三:
编程实现数字0123456789abcdef依次在八位共阴极数码管上左移显示,显示到89abcdef后重新回到012345678。
3.2、问题三的代码:

#include <reg51.h>
#include <absacc.h>
void delay();
int i ,a;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
int code TAB[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,
0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
int code TAB1[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{

	while (1)
	{
		int num = 0;
		for (num = 0; num < 9;num++)
		{
			a = 20;	
		 	while(a--)
			{
				 for (i = 0;i < 8;i++)
				{
					P1 = TAB1[i];
					P2_2 = 1;
					P2_2 = 0;
					P1 = TAB[i+num];
					P2_3 = 1;
					P2_3 = 0;
					delay();
				}  
			}
		}
	}
}

void delay() 
{	
	int y;
    for(y=300;y>0;y--);
}

3.3、问题三的实验结果和现象:
数字0123456789abcdef依次在八位共阴极数码管上左移显示,显示到89abcdef后重新回到012345678,每次显示大约0.5ms。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值