本帖最后由 张伟灵 于 2016-12-30 12:43 编辑 #include<reg52.h> sbit P3_3=P3^3; void Delay10ms() { unsigned char i,j; i=20; j=113; do { while(--j); } while(--i); } void main() { P3_3=0; //GATE=1时,外触发INT0和INT1要高电平触发 //注意:实验板按键都是接地,自己接个按键接5V。 TMOD=0x80; //GATE=1,TR1和外中断INT1共同控制,模式13位 IE=0x88; //EA=1,ET1=1 TH1=(8192-1000)/256; //12MHZ,设1MS触发外中断 TL1=(8192-1000)%256; //你也可以设10MS以下,最好不要超过按键抖动时间 TR1=1; //启动TR1中断,等待INT1触发 while(1) { /*你之前的程序*/ P2=0x33;}//我用P2试验LED灯00110011成功 } void time1() interrupt 3 { TR1=0; //影响按键判断的中断关了 TH1=(8192-1000)/256; //12MHZ,重新装初值1MS TL1=(8192-1000)%256; Delay10ms();//用实验板做才有效果,按键有抖动,不好仿真 if(P3_3==1) {/*你要做的程序~~~ */ P2=0xaa; //试验P2LED灯用10101010 while(P3_3==1);} P2=0x0f; //试验P2LED灯用00001111 TR1=1; } |
我今天忙,有时间我帮你写一下 |
xieyuanyuan 发表于 2016-12-27 18:35 主程序应该是时间那个,而你写的这两个只作为按按键时的中断程序! |
主程序里面扫描按键,然后根据按键,执行相对应的程序即可。 |
向前看zk 发表于 2016-12-27 16:52 我主要是不知道 是要把我写的那个程序 插到哪个地方?是插在 main 的后面吗? |
heibiheibiheibni |
大致看了一下 ,你发的图片就一个延时程序和按键程序,T1时间控制那个没有。 而你说的T1做时间控制是24小时秒分时这样正常周董的么,也就是你不按按键时时间正常走,只有你在按按键时显示你的学号和51字样,但不影响时间的正常走动,放开按键又回复时间走动的字样。 首先,你要设定T1做计数器/定时器,还得有中断程序,因为你要按键,就是要设定TCON,TMOD什么的,你在书上一看就知道了,如(TCON的八位: TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0)。你参考一下下面这个小程序(他不能够直接用)和你的书本,相信你会明白的,希望思路对你有用! #include<reg52.h> sbit LED=P1^2; void Init_Timer1(void) { TMOD |= 0x10; TH1=0x00; TL1=0x00; EA=1; ET1=1; TR1=1; } main() { Init_Timer1(); while(1); } void Timer1_isr(void) interrupt 3 using 1 { TH1=0x00; TL1=0x00; LED=~LED; } |