⑴ iDSDT编译aml时错误,求助大神修复
IDSDT的编译器太老了,建议换成最新的编译器编译,然后手工加入代码,IDSDT的作用仅限于参考价值。英特尔已经发布了支持ACPI规范5.0的IASL编译器。
具体参考英特尔对新版本编译器的改进说明PDF文档,英特尔官网有介绍。
⑵ 谁能帮我把dsdt.dsl编译成dsdt.aml
论坛上随处可见。到处充斥着修改dsdt的软件。比如。 dsdt auto pactor(但其中有好多坛友提出,自己的主板型号里面都没有)。dsdt se (此软件集修改和修复于一身,我也汉化dsdt se了一下,下面有下载地址)。还有dsdt edit& auto fix/patcher
⑶ 高手请进 Ubuntu 14.04系统下怎么提取dsdt.aml文件
首先,dsl是源代码文件,aml是二进制文件。二进制文件,是机器能直接执行的。其次,当源代码仍存在错误时,一般是不允许保存为二进制文件的,因为错误使得源代码不能编译为二进制,所以在仍然存在错误时,不能保存为aml。再者,一般情况下,软件提取到的是二进制文件,即aml,再由软件反编译回到源代码,展现在我们面前(可以视为变回了dsl)。即软件把它又变了回去,但是,在变的过程中,可能出现错误,于是,就不能再编译到二进制,即不能保存为aml。对于你的问题:1、没有错误的aml是二进制文件。是机器能直接执行的。可以直接放到clover/acpi/patched/下面。2、在DSDT仍然存在错误时,不能保存为aml,只有修改所有错误(警告和提醒不影响),使得编译通过,才能保存为aml。
⑷ 急求用单片机 AT89C52 74LS164驱动的四位一体共阴数码管从0000~9999循环循环累加显示的程序
怎么就非要74S164的呢,我没小时间给你写,这里我发一个用74H573的时钟程序给你参考,
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa,h,hh,hl,m,mh,ml,s,sh,sl,ah,am,as,
ahh,ahl,amh,aml,ash,asl,a,b,c;
sbit la=P2^6;
sbit wela=P2^7;
sbit dian=P0^7;
sbit fm=P2^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit d1=P1^0;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl);//显示函数
void delay(uint z) ;//延时函数
void init() ;//初始化话函数
void chan();//调时函数
uchar alarm(uchar ah,uchar am);//调闹铃函数
uchar trans(uchar h,uchar m,uchar s);//显示转换函数
void time(); //时间函数
void main()
{
init(); //初始化
while(1)
{
alarm(); //调闹钟
chan(); //调时
time(); //时间
if(ah==h&&am==m)
{
if(s%2==0)
fm=0;
else
fm=1;
}
if(!(ah==h&&am==m))
fm=1;
}
}
uchar trans(uchar h,uchar m,uchar s)//时间转换
{
//a=h;
//b=m;
//c=s;
hh=h/10;
hl=h%10;
mh=m/10;
ml=m%10;
sh=s/10;
sl=s%10;
return (hh,hl,mh,ml,sh,sl) ;
}
void time()//时间函数
{
if(aa==20)
{
aa=0;
s++;
//fm=1;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
trans(h,m,s);
display(hh,hl,mh,ml,sh,sl);
//return (h,m,s);
}
void chan() //调时行数
{
if(key1==0)
{
h++;
delay(200);
if(h==24)
h=0;
}
if(key2==0)
{
m++;
delay(200);
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
uchar alarm(uchar h,uchar m)//调闹钟函数
{
loop:if(key3==0)
{
while(1)
{
if(key1==0)
{
ah++;
delay(200);
if(ah==24)
ah=0;
}
if(key2==0)
{
am++;
delay(200);
if(m==60)
{
am=0;
ah++;
if(ah==24)
ah=0;
}
}
trans(ah,am,as);
display(hh,hl,mh,ml,sh,sl);
if(key4==0)
goto loop;
}
}
return (ah,am);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)//显示函数
{
la=1;
P0=table[hh];
la=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
la=1;
P0=table[hl];
dian=1;
la=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(1);
la=1;
P0=table[mh];
la=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
la=1;
P0=table[ml];
dian=1;
la=0;
P0=0xff;
wela=1;
P0=0x77;
wela=0;
delay(1);
la=1;
P0=table[sh];
la=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
la=1;
P0=table[sl];
la=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void init() //初始化函数
{
wela=0;
la=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
⑸ 怎么编译DSL文件为AML文件
编译DSL文件为AML文件:
1、利用编译程序从源语言DSL文件编写的源程序产生目标程序AML文件;
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
(5)aml编译asl扩展阅读:
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序;
按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。编译程序的语法规则可用上下文无关文法来刻画。
语法分析的方法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法的开始符号出发,向下推导,推出句子。
而自下而上分析法采用的是移进归约法,基本思想是:用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻符号
⑹ 单片机数字时钟系统设计利用6个7段数码管显示时间,分别用二个7段数码管显示时,分,秒,时按24小时计。。
PCB图我就没有只有原理图和程序。你要吗?
⑺ 51单片机与ADXL345连接的硬件电路图
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa,h,hh,hl,m,mh,ml,s,sh,sl,ah,am,as,
ahh,ahl,amh,aml,ash,asl,a,b,c;
sbit la=P2^6;
sbit wela=P2^7;
sbit dian=P0^7;
sbit fm=P2^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit d1=P1^0;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl);//显示函数
void delay(uint z) ;//延时函数
void init() ;//初始化话函数
void chan();//调时函数
uchar alarm(uchar ah1,uchar am1);//调闹铃函数
uchar trans(uchar h,uchar m,uchar s);//显示转换函数
void time(); //时间函数
void main()
{
init(); //初始化
while(1)
{
alarm(); //调闹钟
chan(); //调时
time(); //时间
if(ah==h&&am==m)
{
if(s%2==0)
fm=0;
else
fm=1;
}
if(!(ah==h&&am==m))
fm=1;
}
}
uchar trans(uchar h,uchar m,uchar s)//时间转换
{
//a=h;
//b=m;
//c=s;
hh=h/10;
hl=h%10;
mh=m/10;
ml=m%10;
sh=s/10;
sl=s%10;
return (hh,hl,mh,ml,sh,sl) ;
}
void time()//时间函数
{
if(aa==20)
{
aa=0;
s++;
//fm=1;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
trans(h,m,s);
display(hh,hl,mh,ml,sh,sl);
//return (h,m,s);
}
void chan() //调时行数
{
if(key1==0)
{
h++;
while(key1==0);
if(h==24)
h=0;
}
if(key2==0)
{
m++;
while(key2==0);
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
uchar alarm(uchar ah1,uchar am1)//调闹钟函数
{
loop:if(key3==0)
{
while(1)
{
if(key1==0)
{
ah++;
while(key1==0);
if(ah==24)
ah=0;
}
if(key2==0)
{
am++;
while(key2==0);
if(am==60)
{
am=0;
ah++;
if(ah==24)
ah=0;
}
}
trans(ah,am,as);
display(hh,hl,mh,ml,sh,sl);
if(key4==0)
goto loop;
}
}
return (ah,am);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)//显示函数
{
la=1;
P0=table[hh];
la=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
la=1;
P0=table[hl];
dian=1;
la=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(1);
la=1;
P0=table[mh];
la=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
la=1;
P0=table[ml];
dian=1;
la=0;
P0=0xff;
wela=1;
P0=0x77;
wela=0;
delay(1);
la=1;
P0=table[sh];
la=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
la=1;
P0=table[sl];
la=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void init() //初始化函数
{
wela=0;
la=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
⑻ 求助 用C语言设计单片机动态扫描数字钟 请给出详细程序。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa,h,hh,hl,m,mh,ml,s,sh,sl,ah,am,as,
ahh,ahl,amh,aml,ash,asl,a,b,c;
sbit fm=P1^7;
sbit dian=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit d1=P1^0;
uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl);//显示函数
void delay(uint z) ;//延时函数
void init() ;//初始化话函数
void chan();//调时函数
uchar alarm(uchar ah1,uchar am1);//调闹铃函数
uchar trans(uchar h,uchar m,uchar s);//显示转换函数
void time(); //时间函数
void main()
{
init(); //初始化
while(1)
{
alarm( ah, am); //调闹钟
chan(); //调时
time(); //时间
//if(a==h&&b==m)
//{
//if(s%2==0)
//fm=~fm;
//else
//fm=1;
// fm=~fm;
//}
//if(!(ah==h&&am==m))
//fm=1;
}
}
uchar trans(uchar h,uchar m,uchar s)//时间转换
{
hh=h/10;
hl=h%10;
mh=m/10;
ml=m%10;
sh=s/10;
sl=s%10;
return (hh,hl,mh,ml,sh,sl) ;
}
void time()//时间函数
{
if(aa==20)
{
aa=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
trans(h,m,s);
display(hh,hl,mh,ml,sh,sl);
//return (h,m,s);
}
void chan() //调时行数
{
if(key1==0)
{
h++;
while(key1==0);
if(h==24)
h=0;
}
if(key2==0)
{
m++;
while(key2==0);
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
uchar alarm(uchar ah,uchar am)//调闹钟函数
{
if(key3==0)
{
while(1)
{
if(key1==0)
{
ah++;
a=ah;
while(key1==0);
if(ah==24)
ah=0;
}
if(key2==0)
{
am++;
while(key2==0);
if(am==60)
{
am=0;
ah++;
if(ah==24)
ah=0;
}
b=am;
}
trans(a,b,as);
display(hh,hl,mh,ml,sh,sl);
if(key4==0)
break;
}
}
return 0;
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)//显示函数
{
P0=table[hh];
P2=0x01;
delay(2);
P0=0xff;
P0=table[hl];
dian=0;
P2=0x02 ;
delay(2);
P0=0xff;
P0=table[mh];
P2=0x04;
delay(2);
P0=0xff;
P0=table[ml];
dian=0;
P2=0x08;
delay(2);
P0=0xff;
P0=table[sh];
P2=0x10 ;
delay(2);
P0=0xff;
P0=table[sl];
P2=0x20;
delay(2);
P0=0xff;
}
void init() //初始化函数
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(a==h&&b==m) //以下部分为闹铃
{ c++;
if(0<=c<=5)
fm=~fm;
if(5<c<10)
fm=1;
if(10<=c<=15)
fm=~fm;
if(c==20)
c=0;
}
if(!(ah==h&&am==m))
fm=1;
}