单片机(C51)一个小程序,可以请帮忙在此程序中加入按键长按开机与长按关机功能,谢谢!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机(C51)一个小程序,可以请帮忙在此程序中加入按键长按开机与长按关机功能,谢谢!!!相关的知识,希望对你有一定的参考价值。
/********************************************************************
一个按键,三个LED,一个马达输出
上电进入待机状态,按下第一次按键后,红色LED点亮,马达工作5S,停止10S;
按下第二次按键后,绿色LED点亮,马达工作10S,停止15S;
按下第三次按键后,蓝色LED点亮,马达工作15S,停止20S;
按下第四次按键后,红色LED点亮,马达工作5S,停止10S;
...........................................以此循环
*********************************************************************/
/***********目前还需要写按键长按3S开机与长按3S关机功能**********/
/*******************
工作芯片:STC 15W101
********************/
#include <reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit Motor = P3^4;
sbit key = P3^5;
sbit r_led = P3^2;
sbit g_led = P3^1;
sbit b_led = P3^3;
u8 Motor_on[]=0,5,10,15;
u8 Motor_off[]=0,10,15,20;
u8 timer,i,aa,Motor_on_t;fang1 = 1;
void delay(u16 num)
u16 x,y;
for(x=num; x>0; x--)
for(y=110; y>0; y--)
;
void IO_Init(void)
Motor = 0;
r_led = 1;
g_led = 1;
b_led = 1;
void Set_Grade(u8 Grade)
switch(Grade)
case 1:
r_led = 0;
g_led = 1;
b_led = 1;
break;
case 2:
r_led = 1;
g_led = 0;
b_led = 1;
break;
case 3:
r_led = 1;
g_led = 1;
b_led = 0;
break;
default:
r_led = 1;
g_led = 1;
b_led = 1;
break;
void key_i (void)
while (1)
if (key == 1)
delay(10);
if (key == 0)
delay(10);
if (key ==0)
while(!key);
i++;
if (i < 4)
Motor_on_t = 0;
Set_Grade(i);
Motor = 1;
TR0 = 1;
else if( i >= 3)
Motor_on_t = 0;
i = 1;
Set_Grade(i);
Motor = 1;
TR0 = 1;
i = 1;
while (!key);
break;
void EC ()
if(fang1)
if (aa && Motor_on_t == Motor_on[i])
fang1 = 0;
Motor_on_t = 0;
Motor = 0;
if(!key)
timer = 0;
Motor_on_t = 0;
else if(aa && Motor_on_t == Motor_off[i] )
fang1 = 1;
Motor_on_t = 0;
Motor = 1;
if(!key)
timer = 0;
Motor_on_t = 0;
void tomd (void)
TMOD = 0X11;//设置TMOD,使得T0工作在16位定时器
TH0 = 0x4C;
TL0 = 0x00;
//TH0 = (65535-50000) / 256;
//TL0 = (65535-50000) % 256;//设置TH0/TL0 初值
EA = 1; //开放总中断
ET0 = 1;//开放定时器0的溢出中断
//TR0 = 1;
void main (void)
i = 0;
aa = 0;
//fang1 = 1;
IO_Init();
tomd ();
while(1)
key_i ();
EC ();
void timer_t0(void) interrupt 1//定时器0中断服务函数,入口
TH0 = 0x4C;
TL0 = 0x00;
timer ++;//每次中断自加
if(i >= 4)
i = 1;
aa = 1;
if (timer == 20)
timer = 0;
Motor_on_t++;
void main (void)
u8 flagqt=0x5a;
u16 tcnt=0;
while(tcnt<3000)
tcnt++;
delay(1);
if(key_st!=0)tcnt=0;
i = 0;
aa = 0;
//fang1 = 1;
IO_Init();
tomd ();
tcnt=0;
while(1)
key_i ();
EC ();
if(key_st==0)
tcnt++;
delay(1);
if(tcnt>=3000) ((void(code *)(void))0x0000)();
else tcnt=0;
追问
好像这样会一直在while(1)循环中出不来。还有以下两句可以说一下怎么理解吗?第一句是付值给一个变量,但是为什么要这样呢?第二句完全看不懂,可以解说一下吗
u8 flagqt=0x5a; if(tcnt>=3000) ((void(code *)(void))0x0000)();
python程序执行报错,请大神帮忙看下
# -*- coding: cp936 -*-
#--conding: -utf-8--
#给出三角形的三条边长,判断该三角形的形状,并计算面积
_metaclass_=type
class sanJiaoXing:
mianji=0
p=0
def init(self):
a=int(raw_input("a="))
b=int(raw_input("b="))
c=int(raw_input("c="))
if a+b<c or a+c<b or b+c<a:
print "两边之和小于第三边,无法构成三角形"
elif a==b==c:
print "这个三角形是等边三角形"
elif a==b!=c or b==c!=a or a==c!=b:
print "这个三角形是等腰三角形"
elif a*a+b*b==c*c or a*a+c*c==b*b or b*b+c*c==a*a:
print"这个是直角三角形"
else:
print"这个是一般三角形"
def MianJi(self):
from math import sqrt
p=(a+b+c)/2
mianji=sqrt(p*(p-a)*(p-b)*(p-c))
print "三角形的面积为:%s" % mianji
test=sanJiaoXing()
test.init()
test.MianJi()
错误信息
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\python1\三角形判断.py", line 32, in <module>
test.MianJi()
File "C:\Users\Administrator\Desktop\python1\三角形判断.py", line 26, in MianJi
p=(a+b+c)/2
NameError: global name 'a' is not defined
>>>
支持xhkczxzz.
再来一个:
#!/usr/bin/env python# coding: utf-8
#
# filename: triangle.py
# date: Feb., 2014
# author: Tim Wang
class Triangle(object):
def __init__(self, a, b, c):
self.lines = sorted([a, b, c])
if self.lines[0] + self.lines[1] <= self.lines[2]:
raise TypeError
def category(self):
if self.lines[0] == self.lines[1] == self.lines[2]:
return u"等边三角形"
category = u""
if (self.lines[0] == self.lines[1] or
self.lines[1] == self.lines[2]):
category += u"等腰"
A = self.lines[0] ** 2 + self.lines[1] ** 2
B = self.lines[2] ** 2
if A == B:
category += u"直角"
elif A > B:
category += u"锐角"
else:
category += u"钝角"
return category + u"三角形"
def perimeter(self):
"""周长"""
return self.lines[0] + self.lines[1] + self.lines[2]
def area(self):
"""面积(海伦公式)"""
p = sum(self.lines)/2.
return (p
* (p - self.lines[0])
* (p - self.lines[1])
* (p - self.lines[2])
) ** .5
def R(self):
"""外接圆半径"""
return (self.lines[0]
* self.lines[1]
* self.lines[2] ) / (4 * self.area())
tr = Triangle(3, 4, 5)
print tr.perimeter()
print tr.area()
print tr.R()
print tr.category().encode("utf-8") 参考技术A 把a\b\c改为:
self.a
self.b
self.c追问
多谢,多谢,
在这边的时候是不是应该添加break啊,
if a+b<c or a+c<b or b+c<a:
print "两边之和小于第三边,无法构成三角形"
我输入三边为1,2,1时,仍执行了下面的求面积的方法了。
可是我加了break会有问题,求大神再次帮忙看下。多谢多谢
mianji=p=0
issanJiaoXing=False
def __init__(self): #######
self.a=int(raw_input("a="))
self.b=int(raw_input("b="))
self.c=int(raw_input("c="))
self.isSanjiaoxing(self.a,self.b,self.c)
def isSanjiaoxing(self,a,b,c): #######
if self.a+self.b<=self.c or self.a+self.c<=self.b or self.b+self.c<=self.a:
print "非三角形"
self.issanJiaoXing=False ###
return
elif self.a==self.b==self.c:
print "等边"
elif self.a==self.b!=self.c or self.b==self.c!=self.a or self.a==self.c!=self.b:
print "等腰"
elif self.a*self.a+self.b*self.b==self.c*self.c or self.a*self.a+self.c*self.c==self.b*self.b or self.b*self.b+self.c*self.c==self.a*self.a:
print"直角"
else:
print"一般"
self.issanJiaoXing=True ###
def MianJi(self):
……
p=(self.a+self.b+self.c)/2.0 ######
……
test=sanJiaoXing()
test.MianJi()本回答被提问者采纳
以上是关于单片机(C51)一个小程序,可以请帮忙在此程序中加入按键长按开机与长按关机功能,谢谢!!!的主要内容,如果未能解决你的问题,请参考以下文章
单片机Keil C51 C语言多文件如何使用全局位变量?跪拜!!
怎么把编好的程序烧录到8051或则AT89C51单片机上啊?