Ⅰ 刚开始学习单片机,求解释单片机简单计算器的除法程序部分(最好每句都说明一下
else if(fuhao==4) //是否为4,
{
write_com(0x80+0x4f); //写入命令。你的函数应该是液晶显示的。
write_com(0x04); //一样命令
i=0;
c=(long)(((float)a/b)*1000); //计算c的数据
while(c!=0) //判断C如果不等于0.,其实是直到等于0就退出
{
write_date(0x30+c%10);
c=c/10; //10位一次运算
i++;
if(i==3) //设置小数点位数
write_date(0x2e); //写数据
}
if(a/b<=0)
write_date(0x30); //写数据
write_date(0x3d); //写数据
a=0;b=0;flag=0;fuhao=0; //变量清零,
}
Ⅱ 单片机流水灯程序
单片机流水灯程序答案:
下面是一个基于单片机的流水灯程序示例。
详细解释:
1. 程序概述:
此程序用于控制单片机连接的LED灯,实现流水灯效果。即LED灯会依次亮起,形成一个流动的灯光效果。
2. 程序逻辑:
* 初始化:设置单片机端口的方向为输出,并初始化所有LED灯为熄灭状态。
* 主循环:在单片机的主循环中,逐个控制端口位,使每个LED灯依次亮起。通过延时函数控制每个灯亮的时间,形成流水灯效果。
* 延时函数:为了控制LED灯的亮起和熄灭速度,需要加入延时函数。这个延时函数可以根据需要进行调整,以达到最佳效果。
3. 代码实现:
c
#include <单片机头文件.h> // 根据实际单片机型号替换头文件
void delay; // 延时函数声明
void main {
P1 = 0x00; // 初始化端口,所有LED灯熄灭
while { // 主循环
for { // 控制8个LED灯
P1 = ~; // 依次点亮LED灯
delay; // 延时函数,控制点亮时间
}
}
}
void delay { // 简单的延时函数实现
unsigned int j;
for;
}
注意:以上代码仅为示例,实际应用中需要根据单片机的具体型号和硬件连接情况进行调整。单片机的编程语言和具体语法也会因型号不同而有所差异。此外,延时函数的实现也可能更为复杂,这里为了简单明了而采用了一个基础的实现方式。在实际应用中,可能还需要考虑其他因素,如中断、外部触发等。请根据具体需求进行编程和调试。
Ⅲ 基于51单片机流水灯加蜂鸣器程序,帮忙解释一下,谢谢,急求 #include <reg52.h>
这个程序非常简单。temp变量用于控制流水灯的顺序。程序中使用P1端口连接了流水灯,这意味着P1端口的每一位可以控制一个LED灯的亮灭。程序通过循环让P1端口的每一位依次点亮,从而实现流水灯的效果。
每当一个LED灯点亮时,蜂鸣器会发出声音。具体来说,程序中蜂鸣器的控制逻辑是,在P1端口的一个LED灯点亮的同时,蜂鸣器被触发发声。这种方式可以实现LED灯亮起时蜂鸣器同步发声的效果。
程序的执行过程是这样的:首先,程序初始化P1端口,设置其为输出模式。然后,通过一个循环,依次点亮P1端口的每一位,每次点亮一个LED灯时,蜂鸣器都会发声。当所有LED灯都点亮一次后,循环结束,程序再次从头开始执行。
这种设计可以实现一个简单的交互效果,用户通过观察LED灯的流水效果,可以听到对应的蜂鸣器声音。这种方式不仅能够吸引用户的注意力,还能增强用户与设备之间的互动体验。
需要注意的是,程序中的具体实现细节可能因硬件平台的不同而有所差异。例如,蜂鸣器的触发方式、LED灯的连接方式等,都需要根据具体的硬件配置进行调整。但总体来说,这个程序的核心思想是通过控制P1端口的每一位来实现流水灯效果,并在每次LED点亮时触发蜂鸣器发声。
如果对程序的具体代码有任何疑问,可以随时提问。希望这个解释对你有所帮助。
Ⅳ 求单片机高手帮忙详细解释下程序 特别是中断那
这应该是一个闪烁灯的程序,定时器以方式2自动重装的方式工作,定时器到时产生一次中断就将记数字段减一,等到计数字段减到0就改变一次LED灯的状态,这基实就是一个延时的过程。
总的来讲就是定时器每100us就产生一次中断,而每次中断就将计数字段减一,因此计数字段应该设为10000,这样就是产生10000次中断(就是10000*100us =1s)时改变一次LED灯的状态,便实现了1s的计时。
Start:
mov TMOD, #02h ; 方式2, 定时器
mov TH0, #t100us
mov TL0, #t100us
mov IE, #10000010b ; EA=1, IT0 = 1
这几句是选择定时器并设置定时器工作方式,此处选择了定时器0并以工作方式2工作,方式2是自动重装,TH0减至0时,定时器到时产生中断并自动将TL0的值赋给TH0,之后重新工作。TH0和TL0决定了定时器工作起点,其中TH0是设置高八位字节,TL0是设置低八位字节(定时器总共是2个字节16位,最大值的十进制为65535)。EA=1是开总中断,IT0=1是开定时器0的中断。
mov C100us, #high(Tick)
mov C100us+1, #low(Tick)
两句是设置计数器计数起点,C100us是高位字段,C100us+1是低位字段。
T0Int:
push PSW
mov a, C100us+1
jnz Goon
dec C100us
这是定时器到时产生中断后的处理过程。先看C100us+1(即低位字段)是否为0,不为0即jnz(jump not zero)就跳转至Goon处,否则就将C100us(即高位字段)减一,然后执行Goon。
Goon:
dec C100us+1
mov a, C100us
orl a, C100us+1
jnz Exit ; 100us 记数器不为0, 返回
mov C100us, #HIGH(TICK);#high(Tick)
mov C100us+1, #LOW(TICK);#low(Tick)
cpl LEDBuf ; 100us 记数器为0, 重置记数器
; 取反LED
这几句就是判断计数器是否为0。其中 orl a, C100us+1是将高位字段与低位字断“按位与”。结果若不为0(只有在高位字断与低位字断同时为0时,结果才为0)便执行EXIT,即退出;若为0
则重置计数器,并将LED取反。
OK就是这样了,今天下午没课,一高兴就写了这么多,不要烦啊,呵呵。