单片机实验4:动态显示0-7数字

动态显示0-7数字代码:

单片机晶振需要调节为11.0592,只有在这个状态下X*110次循环才能约等于X毫秒

#include <reg52.h>
#define uchar unsigned char

void delay_xms(int x)
{
	int i,j;
	for(i=0;i<x;i++)
		for(j=0;j<110;j++);
}

void main()
{
	uchar code duanxuan[] = {0x3f,0x06,0x5b,0x4f,	  //0,1,2,3
							0x66,0x6d,0x7d,0x07,	  //4,5,6,7
							0x7f,0x6f,0x77,0x7c,	  //8,9,A,B
							0x39,0x5e,0x79,0x71};	  //C,D,E,F		段选
							
	uchar code weixuan[] = {0x1c,0x18,0x14,0x10, 	  //1,2,3,4
							   0xc,0x8,0x4,0x0};	  //5,6,7       位选

	while(1)
	{
		int i,m;
		for(i=0;i<8;i++)
		{
			P2 = weixuan[i];
			P0 = duanxuan[i];
			delay_xms(1000);    //延时1000ms,即1s
			P0 = 0;				//消影,对于这种动态的必须先位选再段选
		}
	}
}

实验结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
实验五 矩阵键盘实验 一、实验内容 1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来 。按其它键退出。 2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能 。可定义"A"键为"+"键,"B"键为"="键。 二、实验目的 1. 学习独立式按键的查询识别方法。 2、 非编码矩阵键盘的行反转法识别方法。 三、实验说明 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入"1"。 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为 低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下 ,否则扫描下一行,直到扫完所有行。 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接 到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电 平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对 两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才 读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在 行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线 值。 由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识 别最为简便。 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作 为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值 应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读 出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四 位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键 是"4",则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个 键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被 按下了。 四、接线方法 键盘连接成4×4的矩阵形式,占用单片机P1口的8根线,行信号是P1.0- 1.3,列信号是P1.4-1.7。 五、实验电路 参考学习板说明书P14。 六、参考程序 "程序一: " " " "/***********************************************************" "**** " "功能:4*4矩阵键盘,LED显示所按的键 " "作者:txl " "时间:2009-04 " "版本:V1.0 " "************************************************************" "***/ " "#include<reg52.h> " "#define uint unsigned int " "#define uchar unsigned char " " " "sbit wei1=P2^0; " " " " " "uchar code table[]={0xC0,0xF9,0xA4,0xB0, " "0x99,0x92,0x82,0xF8, " "0x80,0x90,0x88,0x83, " "0xC6,0xA1,0x86,0x8E};//共阳数码管码表 " "//全局变量 " "uchar num,temp,num1; " "//函数声明 " "void delay(uint z); " "uchar keyscan(); " "void display(uchar aa); " " " "void main() " "{ " "num=1; " "wei1=0; " "P0=0xC0; " " " " " "while(1) " "{ " " " "display(keyscan()); " "} " "} " " " " " "void display(uchar aa) " "{ " "P0=table[aa-1]; " "} " " " " " " " "uchar keyscan() " "{ " "P1=0xfe; " "temp=P1; " "temp=temp&0xf0; " "while(temp!=0xf0) " "{ " "delay(5); " "temp=P1; " "temp=temp&0xf0; " "while(temp!=0xf0) " "{ " "temp=P1; " "switch(temp) " "{ "
C51单片机数码管动态显示单片机基础教学中比较经典的一个实验,该实验可以通过单片机控制数码管的显示,实现数字动态滚动、计时、计数等功能。下面是该实验的总结。 一、实验原理 数码管动态显示是通过单片机的高速刷新来实现的。数码管的显示是静态的,即只有一次性地将数码管的显示数据送入数码管的存储器中,而动态显示则是通过不断地刷新数码管的显示数据,使其看上去是在不停地变化。单片机控制数码管的显示,需要通过端口输出控制信号,将位选和段选信号送入数码管中,从而实现数码管的动态显示。 二、实验器材 1. C51单片机开发板 2. 74HC595移位寄存器 3. 共阴数码管 4. 面包板、杜邦线等 三、实验步骤 1. 将数码管的阳极连接到单片机的P2口,将数码管的阴极连接到74HC595移位寄存器的输出端Q0~Q7。 2. 将74HC595移位寄存器的SCK、RCK、SDA分别连接到单片机的P3.5、P3.6、P3.7口。 3. 在程序中设置数码管的显示数据,将其存入74HC595移位寄存器中。 4. 设置位选信号,将控制信号送入数码管中,实现数码管的动态显示。 四、实验代码 以下是C语言编写的数码管动态显示的实验代码: ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //数码管显示表 void delay(uint x) { uint i, j; for (i = x; i > 0; i--) for (j = 110; j > 0; j--); } void main() { uchar i = 0; while (1) { P3 = 0xFF; //清零P3口 P1 = table[i++]; //设置数码管显示数据 if (i == 10) i = 0; //循环显示0~9 P3 = ~(1 << i); //设置位选信号,显示第i个数码管 delay(1); //延时一段时间 } } ``` 五、实验结果 实验成功后,数码管应该可以进行动态滚动、计时、计数等功能的实现。通过对程序进行修改,还可以实现更多有趣的功能,如闪烁、渐变等。 六、实验结论 通过本次实验,我们掌握了单片机控制数码管的动态显示原理和方法,了解了74HC595移位寄存器的使用方法。在实验中,我们不仅学会了如何通过单片机控制数码管的显示,还锻炼了编程能力和动手能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值