从c语言程序到汇编语言程序,求大神c语言程序转换成汇编语言程序。

这篇博客介绍了如何使用51单片机编程来控制数码管显示时间,并实现了紧急状态的处理。通过定义和操作IO引脚,数码管能够显示从25到5秒的时间倒计时。同时,程序中包含了一个按键处理函数,用于检测紧急情况:当按键被按下时,所有指示灯将变为红色,进入紧急通行状态,再次按下按键则恢复正常状态。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include //我们对51单片机编程,要引用头函数

sbit led_A=P0^0; //数码管位

sbit led_B=P0^1; //数码管位

//***************led指示灯引脚定义*****************//

sbit dx_R=P0^2;

sbit dx_Y=P0^3;

sbit dx_G=P0^4;

sbit nb_R=P0^7;

sbit nb_Y=P0^6;

sbit nb_G=P0^5;

bit flag=0;

sbit key_stop=P3^3;

char N=25; //初始时间是25

char tab_disp[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极码表

/*延时子函数*/

void delay(int t ){while(t--);}

/*显示子函数*/

void display(char dat)

{

led_A=led_B=0; //先位灭显

P2=0XFF; //再段灭显

P2=tab_disp[dat/10]; //赋显示的数

if(dat/10)led_A=1;

delay(1000);//延时

P2=0XFF;led_A=led_B=0; //段灭显位灭显

P2=tab_disp[dat%10]; //赋显示的数

led_B=1;

delay(1000); //延时

}

//这个是循环显示60遍显示的函数

void deal(char m)

{

int t=60;

while(t--)display(m); //循环显示60遍显示的函数

}

void KEY() //按键函数

{

unsigned char save; //定义保存灯状态的变量

if(key_stop==0) //按键是否按下

{

delay(20); //延时去抖

if(key_stop==0) //再次判断按键是否按下

{

flag=1; //紧急状态标志位置1,进入紧急通行状态

save=P0; //保存灯的状态

P0=0x84; //全部亮红灯

while(key_stop==0); //按键释放,当按键一直按下的时候,程序就会一直执行这里,直到按键按下

while(flag==1) //如果是紧急状态就一直执行下面的程序

{

if(key_stop==0) //在紧急状态时判断按键是否按下

{

delay(50); //延时去抖

if(key_stop==0) //再次判断按键是否按下

{

flag=0; //紧急状态标志位清零,退出紧急状态

P0=save; //LED灯恢复到之前状态

while(key_stop==0); //按键释放

}

}

}

}

}

}

/*主函数*/

void main(void)

{

char i;

EA=1; //全局中断开关

IT1=1; //外部中断下降沿有效

EX1=1;

while(1)

{

N=25; //初始时间是25

dx_R=1;dx_Y=0;dx_G=0;//指示灯0是亮,1是灭

nb_R=0;nb_Y=0;nb_G=1;//指示灯0是亮,1是灭

for(i=N;i>0;i--) //一秒一秒的减

{

deal(i);

KEY();

}

dx_R=1;dx_Y=0;dx_G=0;//指示灯0是亮,1是灭

nb_R=0;nb_Y=1;nb_G=0;//指示灯0是亮,1是灭

N=5; //时间变成5

for(i=N;i>0;i--) //一秒一秒的减

{

deal(i);

KEY();

}

dx_R=0;dx_Y=0;dx_G=1;//指示灯0是亮,1是灭

nb_R=1;nb_Y=0;nb_G=0;//指示灯0是亮,1是灭

N=25;//时间变成25

for(i=N;i>0;i--) //一秒一秒的减

{

deal(i);

KEY();

}

dx_R=0;dx_Y=1;dx_G=0;//指示灯0是亮,1是灭

nb_R=1;nb_Y=0;nb_G=0; //指示灯0是亮,1是灭

N=5; //时间变成5

for(i=N;i>0;i--) //一秒一秒的减

{

deal(i);

KEY();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值