全部积分求一个单片机程序

我的单片机型号是AT89S52.用一个按键控制10个I/O口分别连接的10个LED,控制方式为:按一次第1个亮,按两次第1和第2个亮,依次到10个全亮,按第十一次第10熄灭,第十二次第10个和第9个熄灭,直到全部熄灭后又循环开始第一步时的情形.也就是从亮到熄灭到亮无限循环.另外还要有掉电记忆的功能.也就是掉电一段时间后恢复供电要还原掉电时的情形.
基本电路已连接好,16.17脚接AT24C02的SDA.SCL,I/O口的定义不限,只求能实现以上功能.先在此谢过了,如成功则将全部积分奉上.

按键用外部中断0,也就是AT89S52的P3^2口;
至于AT24C02,我这没有它的资料,所以就不会喽
可以的话我们一起研究研究哈
除了掉电记忆功能外的程序如下:

#include<reg52.h>

sbit led1=P1^0; // P1口8个灯,P2^0,P2^1共10个灯
sbit led2=P1^1;
sbit led3=P1^2;
//sbit ....
sbit led9=P2^0;
sbit led10=P2^1;

unsigned char Kflag=0; //记录键盘按下次数
unsigned char dirct=0; //判断按下次数的方向

void key_delay(unsigned char ms)
{
unsigned char j;
while(ms--)
for(j=0;j<250;j++);

}

void led_on(unsigned char num)
{
switch(num)
{
case 0:
P1=0xFF;
led9=1;
led10=1;
break;
case 1:
P1=0xFE;
led9=1;
led10=1;
break;
case 2:
P1=0xFC;
led9=1;
led10=1;
break;
//case ....

}
}

void zhongduan0(void) interrupt 0
{ key_delay(5); //键盘消斗
EA=0;
if(dirct==0) //判断方向:dirct==0,Kflag++;
{
Kflag++; //dircti==1,Kflag--;
if(Kflag==11)
{
dirct=1;
Kflag=9;
}
}
else
{
Kflag--;
if(Kflag==0)
{
dirct=0;
}
}
led_on(Kflag); //点灯
EA=1;
key_delay(5); //键盘再次消斗
}

void main()
{
IT0=0;
IE=81;
// Kflag=readfromAT24C02(addr); //读AT24C02
// dirct=readfromAT24C02(addr);
while(1)
{
// writetoAT24C02(addr,Kflag); //写AT24C02
// writetoAT24C02(addr,dirct);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-10-04
哦,现在在外地出差,回去,给你写个吧,不过是汇编的呵呵.另外象这个用个24C01就足够了,没必要在用个02.
第2个回答  2008-10-04
money,呵呵

给单片机编一个积分程序咋办?
如定义一个检测出的电流变量I和一个积分和变量Num,用中断产生1s的定时,每一秒钟把检测到的电流值加入到积分和变量中,即每秒钟来个Num=Num+I,这就实现了积分,简单吧~

变速积分pid 算法
double Proportion; \/\/ 比例常数 Proportional Const double Integral; \/\/ 积分常数 Integral Const double Derivative; \/\/ 微分常数 Derivative Const double LastError; \/\/ Error[-1]double PrevError; \/\/ Error[-2]double SumError; \/\/ Sums of Errors } PID...

只用单片机单独一个芯片能进行积分,微分等复杂运算吗?不能的话怎么办...
单片机可以做很复杂的计算,当然也包括积分、微分,但关键是你的要求是多少时间计算一次?以传统51单片机为例,12M晶振下,运算能力为1MIPS(1,000,000指令每秒)下面是从《Cx51 Compiler-- Optimizing C Compiler and Library Reference for Classic and Extended 8051 Microcontrollers》中,摘出的16位...

在单片机中关于积分微分的函数是怎么弄的!!!
高级的话,只带math运算库,做积分微分就很简单了,调用相应的库函数即可 初级的话,没办法只能根据微分积分的定义,自己构造函数,然后调用函数带入数据...其实一般的单片机很不适合做这种数学运算,单片机又名微控制器,长于控制而非计算,往往做一个浮点数据的乘法要成百上千个指令周期,太慢了。。。

在写单片机PID程序时 应该是设定值减去测量值 还是 测量值减去给定值...
Math(void){signedlongee1;\/\/偏差一阶\/\/signedlongee2;\/\/偏差二阶signedlongd_out;\/\/积分输出if(!Flag_PID_T_OK)return;Flag_PID_T_OK=0;Temp_Set=3700;\/\/温度控制设定值37.00度PID_e0=Temp_Set-Temp_Now;\/\/本次偏差ee1=PID_e0-PID_e1;\/\/计算一阶偏差\/\/ee2=PID_...

一文搞懂PID控制算法
接着咱再来详细了解PID控制算法的三个最基本的参数:Kp比例增益、Ki积分增益、Kd微分增益。 1、Kp比例增益 Kp比例控制考虑当前误差,误差值和一个正值的常数Kp(表示比例)相乘。需要控制的量,比如水温,有它现在的 当前值 ,也有我们期望的 目标值 。 当两者差距不大时,就让加热器“轻轻地”加热一下。 要是因为某...

单片机编程如何实现积分,比如把角速度积分成角度,求解啊
恒定速度采样,把采样值看成一系列宽度相同高度不同的长条,然后累加面积

高分 求 单片机直流电压表原理流程图
1).AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了...

单片机控制输出电压
这种方案还可把本不太线性的进行矫正,如要考虑成本并在速度和精度要求不高时,就可用只要有比较器的单片机就行了,输入用积分方式测量,输出用电阻权码,这可就要你有比好的电子动手能力,真只这一点要求又有好的电子动手能力了不如就只搞一个好的电压放大器就是最省方式....

求解决一个51单片机ad转换的问题
万用表是积分型AD,通常比逐次比较型的AD稳定,解决办法是用速度换精度,软件上可以多次平均或其它数字滤波算法,硬件上可接简单低通滤波如下图所示:允许的话,可以考虑将C2两端接到 PCF8591的差分输入端

相似回答