还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验独立键盘和矩阵键盘5
一、实验目的、学会用语言进行独立按键应用程序的设计1C、学会用语言进行矩阵按键应用程序的设计2C
二、实验内容、独立按键对四个独立按键编写程序当按时,个同时闪烁;1kl8LED100ms当按时,个从左到右流水灯显示;当按时,个从右到左流水灯k28LED k38LED显示;当按时,各同时从两侧向中间逐步点亮,之后再从中间向两侧逐k48LED渐熄灭;、矩阵按键采用键盘扫描方式,顺序按下矩阵键盘后,在一个数码管上顺序显2示采用静态显示即可0〜F,、提高部分(独立按键、定时器、数码管动态扫描)编写程序,实现下面的功3能用数码管的两位显示一个十进制数,变化范围为开始时显示每按一次00〜59,00,kl,数值加每按一次数值减每按一次数值归零;按下利用定时器功能1;k2,1;k3,k4,使数值开始自动每秒加再按一次数值停止自动加保持显示原数1;k4,1,
三、实验步骤、硬件连接1()使用数据线,将实验开发板与微型计算1MicroUSB机连接起来;
(2)在实验开发板上,用数据线将相应接口连接起来;、程序烧入软件的使用2使用普中软件将文件下载至单片机芯片内ISP HEX查看结果是否正确
四、实验结果一一源代码
1.#include nreg
52.hntypedef unsignedchar u8;typedef unsigned int ul6;void Time1interrupt2THl=0Xd8;TLl=OXfO;t++;ift=100t=0;sec++;ifsec=60sec=0;}}datapros;DigDisplayQ;
五、实验体会一一结果分析、独立按键位定义四个按键、、、宏定义为口,1keyl key2key3key4,LED P2tab数组保存流水灯依次点亮的数值,数组保存流水灯同时从两侧向中间D0-D7begMid逐步点亮,之后再从中间向两侧逐渐熄灭的赋值方式现象按下个同keyl,8LED时闪烁;按下个从左到右流水灯显示;按下触发外部中断100ms key2,8LED key3,0,8个从右到左流水灯显示;按下触发外部中断各同时从两侧向中LED key4,1,8LED间逐步点亮,之后再从中间向两侧逐渐熄灭、矩阵按键宏定义为口、为口,位定义2GPIO_DIG P0GPIO_KEY PlLSA\LSB\LSC分别为口,用来进行数码管位选,定义全局变量P
2.2/P
2.3/P
2.4KeyValue,smgduan数组保存数码管段选数据,打开第一个数码管执行按键处理函LSA=LSB=LSC=O,数,这里采用行列扫描方法,即先让口高四位为、低四位为判断有那一列为P101,再让口高四位为、低四位为判断哪一行被为这样由行和列可以确定0;P110,0;出具体哪一个按键被按下,按键函数里的循环是处理当按键持续按下并且超while过时,强制退出按键处理函数之后给口发送数码管段选数据实验5000ms P0现象为个矩阵按键假设按下第一个数码管显示后面依次类推,到16S1-S16,S1,0,按下显示S16,Fo、提高部分独立按键、定时器、数码管动态扫描3初始化定时器选择工作方式也就是位定时/计数器,赋初值为位定1,1,1610ms,义独立按键、、定义全局变量自动初始化为当自增到keyl key2key3key4,t0,t100即计数次每次相当于时,使全局变量自增当增加到第时,10010ms1s sec1,sec60s数码管重新以开始计时,数码管段选保存在数组里,位选只有和位,因为0012只显示计数,通过循环选择在主函数里,判断是否按下,当按下时,0-59s key4重置定时器中断标志位实验现象为当按下独立按键数码管前两位开始1key%从开始计时到中间若再次按下则计时停止,只有再次按下数码管0059,key4,key4,才会在原来计时的基础上再次计时计时满重新开始,按下全局自6000keyl,sec增加秒数加按下全局自减秒数减一;按下全局初始为1,1,;key2,sec1,key3,sec0,秒数重新初始为00#define LEDP2sbit keyl=P3Al;sbit key2=P3A0;sbit key3=P3A2;sbit key4=P3A3;const chartab[]={0xfe0xfid,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};9u8code begMid[]={0x7e,0xbd,0xdb,0xe7Oxdb,Oxbd,0x7e};5void Delayul6i{whilei-;}void KeyDown{u8i;ifkey2==0DelaylOOO;ifkey2=0fbri=O;i8;i++LED=tab[i];Delay50000;}while!key2;LED=0xff;}else ififkeyl=Ofbri=0;i3;i++LED=OxOO;Delay10000;LED=0xff;Delay10000;}}void IntOInit{IT0=l;EX0=l;EA=l;}void IntlInit{ITl=l;EX1=1;EA=1;}void mainIntOInit;Intllnit;whilel{KeyDown;}void IntOinterrupt0u8i;iffkey3=0fbri=7;i=0;i—LED=tab[i];Delay50000;}void Intlinterrupt2u8i;ifkey4=0{DelaylOOO;ififkey4=0fbri=0;i=6;i++LED=begMid[i];Delay50000;}
2.#includereg
52.h typedef unsigned intul6;typedef unsignedchar u8;#define GPIO_DIG PO#define GPIOKEYP1sbit LSA=P2A2;sbit LSB=P2A3;sbit LSC=P2A4;u8Key Value;u8code smgduan
[17]={0x3f0x060x5b0x4f,0x66,0x6d0x7d0x079559590x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0〜Fvoid delayul6iwhilei-;void KeyDownvoidchara=0;GPIO_KEY=OxOf;ifGPIO_KEY!=OxOfdelaylOOO;ifGPIO_KEY!=OxOfGPIO_KEY=OXOF;switchGPIO_KEYcase0X07:KeyValue=O;break;caseOXOb:KeyValue=1;break;caseOXOd:KeyValue=2;break;caseOXOe:KeyValue=3;break;}GPIO_KEY=OXFO;switchGPIO_KEYcase0X70:KeyValue=KeyValue;break;caseOXbO:KeyValue=KeyValue+4;break;caseOXdO:KeyValue=KeyValue+8;break;caseOXeO:KeyValue=KeyValue+12;break;whilea50GPIO_KEY!=0xf0delaylOOO;a++;}void mainLSA=0;LSB=O;LSC=O;whilelKeyDown;GPIO_DIG=smgduan[Key Value];}}
3.#include reg
52.h typedefunsignedintul6;typedefunsignedchar u8;#define KEYPORTP3sbit LSA=P2A2;sbit LSB=P2A3;sbit LSC=P2A4;sbit keyl=P3Al;sbit key2=P3A0;sbit key3=P3A2;sbit key4=P3A3;ul6t;u8sec;u8DisplayData
[2];u8code smgduan[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};void955995595TimellnitTMOD|=0x10;THl=0Xd8;TLl=0XfD;EA=1;ET1=1;void delayul6i{whilei—;}void DigDisplayu8i;fdri=0;i2;i++switchicase O:LSA=O;LSB=O;LSC=O;break;case1:LSA=1;LSB=O;LSC=O;break;PO=DisplayData[i];delaylOO;P0=0x00;}void datapros{DisplayData[O]=smgduan[sec%10];DisplayData[l]=smgduan[sec/l0];void mainTimellnit;whilelifkey4==0delaylOOO;ifkey4==0{TR1=!TR1;whilekey4=0;}ifkey3=0delaylOOO;ifkey3==O{sec=O;whilekey3=0;}}ifkey2=0delaylOOO;ifkey2=0sec—;whilekey2=0;}ifkeyl==OdelaylOOO;ifkeyl=Osec++;whilekeyl=O;}。
个人认证
优秀文档
获得点赞 0