本文主要是介绍我的第一个单片机程序!!!但是有些问题需要请教一下在座的各位大佬们,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
昨天晚上做的单片机实验,我平时看到单片机代码倒是挺多,但是没正真动手去写代码,去设计一个电路(我本来是有一个51的单片机板子的,但是学校不开学,我也没法回去拿,只能在家一直看代码,我可真是太难了)
实验的题目就是做一个4*4 的矩阵键盘(0~F),然后用两位数码管显示,比如按下了“1”,数码管显示“01”;按下了“F”,数码管显示“15”,下面把代码和proteus仿真的电路图给各位大佬双手奉上来:
代码:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define Time 50 sbit L1 = P1^0;
sbit L2 = P1^1;
sbit L3 = P1^2;
sbit L4 = P1^3;
sbit L5 = P1^4;
sbit L6 = P1^5;
sbit L7 = P1^6;
sbit L8 = P1^7;uchar dis[16] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned int time;
void delay(time) //delay_function
{unsigned int j,i;for( j=0;j<80;j++)for(i=0;i<time;i++);
}void display(i,k) //display_function
{P2 = 0x01; P0 = dis[i];delay(Time);P2 = 0x02; P0 = dis[k];delay(Time);
}void judge(i,a,b,c,d)
{if(L5 == 0) while(1) display(i,a);if(L6 == 0) while(1) display(i,b);if(L7 == 0) while(1) display(i,c);if(L8 == 0) while(1) display(i,d);
}main()
{uchar temp,i; while(1){P1= 0xef;for(i=0;i<4;i++){if(L1 == 0) //press first linejudge(0,0,1,2,3); if(L2 == 0) //press second linejudge(0,4,5,6,7);if(L3 == 0) //press third line{if(L5 == 0) while(1) display(0,8);if(L6 == 0) while(1) display(0,9); if(L7 == 0) while(1) display(1,0);if(L8 == 0) while(1) display(1,1);}if(L4 == 0) //press forth linejudge(1,2,3,4,5);temp = P1;temp = temp|0x0f;temp = temp<<1;temp = temp|0X0f;P1 = temp;}}
}
先解释某些代码吧,judge函数,它需要五个形参,分别是i,a,b,c,d,“i”在这里代表十位数,所以i只可能又“0”和“1”两个值,a,b,c,d分别代表个位数。
举个例子吧,假设按下了“F”,那么进入"if(L4 == 0)“条件语句,进入judge函数,再进入"if(L8 == 0)”,然后再进入while循环执行display函数,此时,传进display函数的两个参数i,d分别是 1,5,通过P2口控制数码管的亮灭(此处我用的是数码管的动态显示,因为延时时间很短,利用视觉暂留使我们看到的是两个数码管一直显示),P1口就是送1和5 对应的十六进制编码了,最终我们看到的数码管显示一直是15。
还要多说一点的是,当第三行有按键按下时,是没法放进judge函数的,因为第三行的按键在数码管显示的是08,09,10,11,十位数是不一样的,起初打算向judge函数里面传入六个参数,但是后来发现这样无法实现,所以单独拿了出来。
下面是proteus仿真的电路图:
电路比较简单(上面的晶振电路可以不用画,我看很多同学都没画),点击“F”后显示15
上面呢是标题的前半部分,标题后半部分的问题来了:
我这个电路无法循环检测,也就是说我按下“F”键后,数码管一直显示15,按下其他的键没有用,我被这个问题困扰了一下午也没想出解决方法,希望做单片机大佬给我解答一下!提前谢谢您了,在这先给您拜个早年啦!
这篇关于我的第一个单片机程序!!!但是有些问题需要请教一下在座的各位大佬们的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!