1、i-)for(j=20;jj-)for(k=248;kk-);while(1)/*永远为真,一直执行下去*/del();P1_0=1;#include reg52.h /#define uchar unsigned char /#define uint unsigned int sbit P10=P10;void mDelay(unsigned int Delay) unsigned int i; for(;DelayDelay-) for(i=0;im-)for(n=20;nn-)for(s=248;ss-);while(1)temp=0xfe;P3=P2=P0=P1=temp;/直接对1/
2、0口p3赋值,使批p3.0输出低电平。delay();/延时for(i=1;8;i+)/实现广告灯的从右到左移动a=temp(8-i);P3=P2=P0=P1=a|b;i+)/实现广告灯的从左到右移动a=tempb=temp、intrins.h#define uchar unsigned char #define uint unsigned int unsigned char OutData=0xfe; P1=OutData; OutData=_crol_(OutData,1); / 循环左移 / 1000延时1s /*广告灯的缩短*/P1=temp;P1=b;/P1=a|b;三. 按键识别通
3、过按下一次按键,使广告灯向左移动一位,直到最后一位,在向右移动。(大家注意到这一个电路图与上一个实验的电路图只多了一个按键和一个5.1K的电阻。)实验原理从图中可以看出P2.1在按键没有按下时接的是高电平,按键按下时接的就是低电平了。所以我们只要判断P2.1的电平就可以知道按键是否被按下了。而在按键按下的过程中,由于抖动,将产生干扰,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时候,要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在
4、着一定的干扰信号,按下之后就基本上进入了稳定的状态。我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。C语言源程序#include sbit BY1=P21; /定义按键的输入端unsigned char count; /按键计数,每按一下,count 加1void delay10ms(void) /延时程序unsigned char i,j;for(j=248;j-);key
5、() /按键判断程序if(BY1=0) /判断是否按下键盘delay10ms(); /延时,软件去干扰if(BY1=0) /确认按键按下count+; /按键计数加1if(count=8) /计8次重新计数 count=0; /将count 清零while(BY1=0);/按键锁定,每按一次count 只加1.move( ) count;(8-count);P3=a|b;count=0;P3=0xff;P3=temp;key();move();四.数码管动态显示P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,动态显示“1234”字样;注意:a接P0.0;b接P0.1;c接P
6、0.3注意:4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7实验原理 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。LED 数码管的 a-dp 七个发光二极管因以不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。下面给出共阴极的字形码:TKVZ,0 1 2 3 4 5 6 7 8 9 a b c d e f 0 0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e 1 2 3 4 5 6 7 8 9 a b
7、 c d e f C语言源程序code unsigned char seg7code10= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /显示段码 数码管字跟:/0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x40,/ 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 /0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x0
8、6,0x0e/ 1 2 3 4 5 6 7 8 9 a b c d e fDelay(unsigned int tc) /延时程序while( tc != 0 ) /如果tc 为0 则终止延时unsigned int i; /局部正整数变量 ifor(i=0; i=10) /显示两位数shiwei=0;P0=tabledispcount/10;shiwei=1;gewei=0;P0=tabledispcount%10;Delay(5);gewei=1;else /显示一位数P0=tabledispcount;void main() TCON=0x01; /中断设置IE=0x81;while(1
9、) /循环执行LED(); /只须调用显示函数七.定时器 T0 的应用-9.9 秒计时设计开始时,显示“00”,第 1 次按下 BY1 后就开始计时。第 2 次按 BY1 后,计时停止。 第3次按BY1后,计时归零。AT89X51.H/必须用这个子函数库unsigned char sec; /定义计数值,每过1/10 秒,sec 加一unsigned char keycnt=0;unsigned int tcnt; /键值判断= 0 ) void LED() /LED显示函数P0=tablesec/10;P0=tablesec%10;void KEY() /按键扫描程序if(P3_0=0)i-
10、) /延时去干扰keycnt+;switch(keycnt) /按下次数判断case 1: /第一次按下TH0=0x06; /对TH0 TL0 赋值,并使定时器/计数器工作在方式2与定时状态TL0=0x06;TR0=1; /开始定时case 2: /第二次按下TR0=0; /定时结束case 3: /第三次按下keycnt=0; /重新开始判断键值sec=0; /计数重新从零开始while(P3_0=0); /请注意写程序时的格式规范,此处是为了节省纸张void t0(void) interrupt 1 using 0 /定时中断服务函数tcnt+; /每过250ust tcnt 加一if(t
11、cnt=400) /计满400 次(1/10 秒)时tcnt=0; /重新再计sec+;if(sec=100) /定时10 秒,在从零开始计时TMOD=0x02; /定时器工作在方式2ET0=1;/定时器/计数器中断允许EA=1;/总中断允许KEY();八.利用定时器产生乐曲实验任务利用单片机的I/O口演奏乐曲。硬件电路图实验原理 乐曲是按照一定的高低,长短和强弱关系组成的关系,在一首乐曲中,每一个音符与频率有关。所以我们只要把有关频率的占空比数据做成表格,在通过查表,在I/O口输出相关乐曲的方波,便产生了乐曲。/这样用双引号也可以。unsigned char Count;sbit _Spea
12、k =P00 ; /讯响器控制脚unsigned char code SONG = /祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,0x30,0x20,0x3
13、0,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1