1:这个按钮是哪两个引脚?是P34和P35吗?P00为方波输出?
2:怎样把显示部分改成用1602显示?
3:已经按键的电路怎么做?直接接地是否可以?
2:怎样把显示部分改成用1602显示?
3:已经按键的电路怎么做?直接接地是否可以?
<code class="lang-cpp">#include <reg51.h> #define uchar unsigned char #define uint unsigned int /* 变量定义 */ uchar key_stime_counter,hight_votage=15,timeT_counter; bit key_stime_ok; /* 引脚定义 */ sbit control_signal=P0^0; sbit turn_left=P3^4; sbit turn_right=P3^5; /***************************************************************** 名称:定时器0初始化 功能:20ms定时,11.0592M晶振 初值=65536-11059200*0.02/12=65536-18432=47104=0xB800 20ms 初值=65536-11059200*0.0001/12=65536-92.16=64430=0xFFA3 0.1ms *****************************************************************/ void TimerInit() { control_signal=0; TMOD=0x01; //设置定时器0为工作方式1 EA=1; //开总中断 ET0=1; //定时器0中断允许 TH0 = 0xFF; //定时器装初值 TL0 = 0xA3; TR0=1; //启动定时器0 } /********************************************** 定时器0中断服务函数 ***********************************************/ void timer0(void) interrupt 1 using 0 { TH0=0xFF; TL0=0xA3; //定时器0重新装入数值 if (++key_stime_counter>=200) { key_stime_counter=0; control_signal=1; key_stime_ok = 1; // 20ms到 timeT_counter=0; } if (key_stime_ok&&(++timeT_counter>=hight_votage)) { key_stime_ok=0; timeT_counter=0; control_signal=0; // hight_votage*0.1ms到 } } /********************************************* 名称:键盘扫描 功能:在按键稳定期内判断键值,并返回键值 **********************************************/ uchar keyscan(void) { static char key_state = 0; static char key_value = 0; uchar key_press, key_return = 0; key_press = turn_left & turn_right; //读按键I/O电平 switch (key_state) { case 0 : // 按键初始态 if (key_press==0) key_state = 1; // 键被按下,但需要确认是否是干扰 break; case 1 : // 按键确认态 if (key_press==0)//如有键按下则不是干扰,判断键值 { if(turn_left==0) //判断是哪一个按键被按下 { key_value=1; //按键较多时可采用switch选择结构 } else if(turn_right==0) { key_value=2; } else { key_value=0; key_state = 2; // 状态转换到键释放态 } } else { key_state = 0; // 按键已抬起,属于干扰,转换到按键初始态 } break; case 2 : if (key_press==1) { key_return=key_value;//按键释放后再输出键值,如果按下键就输出则可省略key_value key_value=0; key_state = 0; //如果按键释放,转换到按键初始态 } break; } return key_return; //返回键值 } /********************************************* 名称:按键处理 功能: **********************************************/ void key_operation(void) { switch (keyscan()) //根据键值不同,执行不同的内容 { case 1: hight_votage -= 1; if(hight_votage < 5) { hight_votage = 5; } break; case 2: hight_votage += 1; if(hight_votage > 25) { hight_votage = 25; } break; default : break; } } //LED显示函数 void diplay() { if(hight_votage>=5&&hight_votage<=7) p1="0xFD; " 1灯亮,舵机接近或到达右转极限位置 if(hight_votage>7&&hight_votage<=10) p1="0xFB; " 2灯亮 if(hight_votage>10&&hight_votage<=13) p1="0xF7; //3灯亮" if(hight_votage>13&&hight_votage<=16) p1="0xEF; //4灯亮,舵机到达中间位置" if(hight_votage>16&&hight_votage<=19) p1="0xDF; //5灯亮" if(hight_votage>19&&hight_votage<=22) p1="0xBF; //6灯亮" if(hight_votage>22&&hight_votage<=25) p1="0x7F; //7灯亮,舵机接近或到达左转极限位置" } *主程序* void main(void) { timerinit(); while(1) { key_operation(); diplay(); } }< code></=25)></=22)></=19)></=16)></=13)></=10)></=7)></reg51.h></code>
引用 hansd:电调认为输入油门过大。所以进入编程模式了。。。
代码没看,楼主确定不是电调油门保护了?
引用 月下孤狼:哦哦,谢谢。只是我手里的52有现成的最小系统板,已经烧录器都有,所以就先用这个了。
为什么不用STC12C5A60s2?这个带推挽模式输出,适合驱动MOS管。
89C52是过时的STC产品,官网都不推荐使用
引用 仓生木品:谢谢。我改改用。
对电调不熟
1602显示的代码可以参考一下
/*-----------------------------------------------
名称:LCD1602
编写:shifang
日期:2009.5
修改...
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。