有谁知道这道题的c语言编程

项目名称:中断实验
功能:8数码管-8发光二极管跑马灯双向循环,按动按钮(开关)产生中断,数码管、发光二极管同时闪烁。
要求:
1、8数码管-8发光二极管流水灯同时显示,第一位数码管显示1,第二位显示2,。。。。。。第八位显示8;双向循环显示,要求间隔的延时随显示位不同而变化:显示1------8时由快变慢,显示8------1时由慢变快。(建议延时0.1-----3S);8发光二极管流水灯同时显示,即与数码管同步显示。
2、除第一次显示1以外,其余在显示1和8的两端结束时数码管分别全部显示1和8,延时1S,流水灯同时全部显示,延时1S,即与数码管同步。然后继续循环显示。参见视频。
3、按动按钮(开关)产生中断(外中断),8流水灯同时在中断处闪动,中断时刻显示的数码管闪动中断时显示的数字(闪动频率自定,闪动8次),然后正常显示(接续中断处)。循环显示时注意在“1”处、“8”处停留的时间。任何时间均可按动按钮产生中断

第1个回答  2011-06-16
这应该是单片机的设计,需要具体电路支持
第2个回答  2011-06-16
前面这段话,可能让你误解了,删掉

使用回溯法实现,计算量很大,最后结果 :共有 32174932 个子集满足和为280

去掉打印,可以提高速度

#include<stdio.h>
void p(unsigned long count, int a[], int n)
{
int i;
printf("%10lu ", count);
for(i=0;i<n;i++)
printf("%2d ", a[i]);
printf("%3d\n", f(a,n));
}
int f(int a[], int n)
{
int i,k=0;
for(i=0;i<n;i++)
k+=a[i];
return k;
}

void main()
{
unsigned long count=0L;
int a[33];
int i=0;
a[i]=33;
while(a[0]>23)
{
while(i<33 && a[i]>0 && f(a,i)<280)
{
a[i+1]=a[i]-1;
i++;
}
if(i<33 && a[i]>0)
{
count++;
p(count,a,i);
}
i-=2;
a[i]--;
while(a[i]==0)
{
i--;
a[i]--;
}
}
printf("count = %10ul\n", count);
getch();
}
相似回答