原理图如下
pcb如下
单片机源程序如下:
- #include<reg51.h>
- typedef unsigned int u16;
- typedef unsigned char u8;
- #define GPIO_DIG P0
- #define GPIO_KEY P1
- sbit LSA=P2^5;
- sbit LSB=P2^6;
- sbit LSC=P2^7;
- u8 LedNumber; //存放当前显示LED序号
- u8 KeyValue; //存放读取到的键值
- u8 RightValue; //存放当前计数值
- u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//存放数码管字形码
- u8 code led[]={0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,
- 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};//存放led字形码
- void delay(u16 j)
- {
- while(j--);
- }
- void LedDisplay(u8 n)
- {
- u8 j;
- j=(16+7*n)%16;
- P2=(P2&0xf0)|led[j-1];
- }
- void Timer1Init()
- {
- TMOD|=0x10;
- TH1=0Xfc;
- TL1=0x18;
- EA=1;
- TR1=1;
- }
- void Timer1() interrupt 3
- {
- static u16 i;
- TH1=0Xfc;
- TL1=0x18;
- TR1=1;
- i++;
- if(i==1000)
- {
- i=0;
- LedNumber++;
- if(LedNumber==16)
- {
- LedNumber=0;
- }
- }
- }
- void KEY_SCAN()
- {
- u8 a=0;
- GPIO_KEY=0X0f;
- if(GPIO_KEY!=0X0f)//检查是否有键按下
- {
- delay(1000);//延时10ms消抖
- if(GPIO_KEY!=0X0f)//消抖后再次检查是否有键按下
- {
- //测试列
- switch(GPIO_KEY)
- {
- case(0x07):KeyValue=0;break;
- case(0x0b):KeyValue=1;break;
- case(0x0d):KeyValue=2;break;
- case(0x0e):KeyValue=3;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;
- }
- if((Lednummer-1)==KeyValue)
- {
- RightValue++;
- }
- while((a<50)&&(GPIO_KEY!=0Xf0))
- {
- delay(1000);
- a++;
- }
- }
- }
- }
- void DpyDisplay()
- {
- u8 j;
- u8 code RightValue[];
- RightValue[2]=RightValue/100;
- RightValue[1]=(RightValue%100)/10;
- RightValue[0]=RightValue%10;
- for(j=2;j>=0;j--)
- {
- switch(j)
- {
- case(2):
- LSA=1;LSB=0;LSC=0;break;
- case(1):
- LSA=0;LSB=1;LSC=0;break;
- case(0):
- LSA=0;LSB=0;LSC=1;break;
- }
- P0=smg[RightValue[j]];
- delay(100);
- P0=0x00;
- }
- }
- void Judge()
- {
-
- }
- void (main)
- {
- while()
- {
- GameInit();
- Timer1Init();
- while(1)
- {
- if(LedNumber>=1)
- {
- LedDisplay(LedNumber);
- }
- }
- }
- }
复制代码
初学,如有错误,请大家多多指导,资料仅供参考:
pcb原理图程序.7z
(1.63 MB, 下载次数: 43)
|