数码管动态显示的三种实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

/********************************************************************************实验名:动态显示数码管实验*使用的IO:数码管使用P0,P2.2,P2.3,P2.4键盘使用P1*实验效果:按矩阵键盘分别显示在数码管上面显示十六进制的0到F。*注意:*******************************************************************************/#includereg51.h//#includeintrins.h#defineGPIO_DIGP0#defineGPIO_KEYP1sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;unsignedcharcodeDIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsignedcharKeyValue;//用来存放读取到的键值unsignedcharKeyState;//记录按键的状态,0没有,1有unsignedcharDisplayData[8];//用来存放要显示的8位数的值unsignedcharNum;//用来存放中断的时候显示的第位数值voidDelay50us();//延时50usvoidKeyDown();//检测按键函数voidDigDisplay();//动态显示函数voidTimerConfiguration();//定时器初始化设置/********************************************************************************函数名:main*函数功能:主函数*输入:无*输出:无*******************************************************************************/voidmain(void){TimerConfiguration();KeyState=0;//初始化按键状态while(1){KeyDown();if(KeyState==1){DisplayData[7]=DisplayData[6];DisplayData[6]=DisplayData[5];DisplayData[5]=DisplayData[4];DisplayData[4]=DisplayData[3];DisplayData[3]=DisplayData[2];DisplayData[2]=DisplayData[1];DisplayData[1]=DisplayData[0];DisplayData[0]=DIG_CODE[KeyValue];KeyState=0;}//DigDisplay();}}/********************************************************************************函数名:TimerConfiguration*函数功能:定时器初始化*输入:无*输出:无*******************************************************************************/voidTimerConfiguration(){TMOD=0X02;//选择为定时器0模式,工作方式2,仅用TRX打开启动。TH0=0X9C;//给定时器赋初值,定时100usTL0=0X9C;ET0=1;//打开定时器0中断允许EA=1;//打开总中断TR0=1;//打开定时器}/********************************************************************************函数名:DigDisplay*函数功能:使用数码管显示*输入:无*输出:无*******************************************************************************/voidDigDisplay(){unsignedchari,j;//for(i=0;i8;i++)//{GPIO_DIG=0x00;//消隐switch(i)//位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0;break;case(1):LSA=1;LSB=0;LSC=0;break;case(2):LSA=0;LSB=1;LSC=0;break;case(3):LSA=1;LSB=1;LSC=0;break;case(4):LSA=0;LSB=0;LSC=1;break;case(5):LSA=1;LSB=0;LSC=1;break;case(6):LSA=0;LSB=1;LSC=1;break;case(7):LSA=1;LSB=1;LSC=1;break;}GPIO_DIG=DisplayData[i];i++;if(i7)i=0;//j=10;//扫描间隔时间设定//while(j--)//Delay50us();//GPIO_DIG=0x00;//消隐//}}/********************************************************************************函数名:KeyDown*函数功能:检测有按键按下并读取键值*输入:无*输出:无*******************************************************************************/voidKeyDown(void){unsignedinta=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f){Delay50us();a++;a=0;if(GPIO_KEY!=0x0f){ET0=0;//关定时器中断KeyState=1;//有按键按下//测试列GPIO_KEY=0X0F;//Delay50us();switch(GPIO_KEY){case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d):KeyValue=2;break;case(0X0e):KeyValue=3;break;//default:KeyValue=17;//检测出错回复17意思是把数码管全灭掉。}//测试行GPIO_KEY=0XF0;Delay50us();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;//default:KeyValue=17;}ET0=1;//开定时器中断while((a5000)&&(GPIO_KEY!=0xf0))//检测按键松手检测{Delay50us();a++;}a=0;}}}/********************************************************************************函数名:Delay50us*函数功能:延时函数,延时50us*输入:无*输出:无*******************************************************************************/voidDelay50us(void)//延时50us误差0us{unsignedchara,b;for(b=1;b0;b--)for(a=22;a0;a--);}/********************************************************************************函数名:Delay50us*函数功能:延时函数,延时50us*输入:无*输出:无*******************************************************************************/voidTimer()interrupt1{DigDisplay();}/********************************************************************************实验名:动态显示数码管实验*使用的IO:数码管使用P0,P2.2,P2.3,P2.4*实验效果:数码管显示76543210。*注意:*******************************************************************************/#includereg51.h#defineGPIO_DIGP0sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;unsignedcharcodeDIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsignedcharDisplayData[8];//用来存放要显示的8位数的值voidDigDisplay();//动态显示函数/********************************************************************************函数名:main*函数功能:主函数*输入:无*输出:无*******************************************************************************/voidmain(void){unsignedchari;for(i=0;i8;i++){DisplayData[i]=DIG_CODE[i];}while(1){DigDisplay();}}/********************************************************************************函数名:DigDisplay*函数功能:使用数码管显示*输入:无*输出:无*******************************************************************************/voidDigDisplay(){unsignedchari;unsignedintj;for(i=0;i8;i++){switch(i)//位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0;break;//显示第0位case(1):LSA=1;LSB=0;LSC=0;break;//显示第1位case(2):LSA=0;LSB=1;LSC=0;break;//显示第2位case(3):LSA=1;LSB=1;LSC=0;break;//显示第3位case(4):LSA=0;LSB=0;LSC=1;break;//显示第4位case(5):LSA=1;LSB=0;LSC=1;break;//显示第5位case(

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功