这是我先前编写的数码管显示+矩阵按键程序:矩阵按键:按下4*4矩阵按键分别代表0~F;独立按键K3为清屏按键,按下后数码内容清空。
电路原理图如下:
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- sbit k3=P3^5;
- uchar k;
- uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e} ;
- void delays(s)
- {
- int i,j;
- for(i=s;i>0;i--)
- for(j=120;j>0;j--);
- }
- void keypros()
- {
- uchar a,b;
- P1=0xf0;
- delays(10) ;
- a=P1;
- P1=0x0f;
- delays(10);
- b=P1;
- a=a+b;
- switch(a)
- {
- case 0x7e:k=0;break;
- case 0xbe:k=1;break;
- case 0xde:k=2;break;
- case 0xee:k=3;break;
-
- case 0x7d:k=4;break;
- case 0xbd:k=5;break;
- case 0xdd:k=6;break;
- case 0xed:k=7;break;
-
- case 0x7b:k=8;break;
- case 0xbb:k=9;break;
- case 0xdb:k=10;break;
- case 0xeb:k=11;break;
-
- case 0x77:k=12;break;
- case 0xb7:k=13;break;
- case 0xd7:k=14;break;
- case 0xe7:k=15;break;
- }
- }
- void main()
- {
- P2=0x00;
- while(1)
- {
- if(k3==0)
- {
- delays(10);
- if(k3==0)
- {
- k=0xff;
- }
- }
- keypros();
- if(k!=0xff)
- {
- P0=duan[k];
- }
- else if(k==0xff)
- {
- P0=k;
- }
- }
- }
复制代码
所有资料51hei提供下载:
实验三.zip
(17.46 KB, 下载次数: 17)
|