程序如下:
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P1_4=P1^4; sbit K1=P3^2; sbit K2=P3^4; uchar aa; void main() { P1_4=0; aa=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) { if(K1==0) { P1_4=0; P0_0=0; P0_1=0; } if(aa==100) { aa=0; P0_1=1; P0_2=0; } if(K2==0) { P1_4=0; P0_0=1; P0_2=1; } } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }
我的原意是要程序如此执行:接通电源——(按键1按下——1、2号灯亮——延时5秒——2号灯灭3号灯亮——按键2按下——1、3号灯灭)括号内循环执行
可现在烧写后是这样执行的:接通电源——(延时5秒——3号灯亮——按键1按下——1、2号灯亮——延时5秒——2号灯灭——按键2按下——1、3号灯灭)括号内循环执行
跟我的原意思不符,求哪位热心人帮忙指点指点程序哪能里出问题了?
你再加个uchar变量bb,用来记录1号键是否按下就行了,这是个超简单的问题了。 修改如下几行就搞定了.
if(K1==0) { P1_4=0; P0_0=0; P0_1=0; bb=8; } if((aa==100)&&(bb==8)) { aa=0; P0_1=1; P0_2=0; bb=0; }
谢谢你了——ADMIN
我今天试了一下子,可能是我的编译器或是其它的什么原因,每次延时的时间不一样,但是如果在它一个周期结束后有按复位键的话,它会很标准,每次都是5秒。今天太晚了,我明天还要上班,等我明天弄懂了,再聊!
有你们的帮助,我会继续努力 。。。。。。对了,你有没有一些建议或资料可以给我的(最基础的),因为我C语言0基础,单片机0基础,编程0基础,电脑软硬件0基础,
哈
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |