找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3709|回复: 11
打印 上一主题 下一主题
收起左侧

有没有大神会把c语言转成汇编语言

[复制链接]
跳转到指定楼层
楼主
ID:84418 发表于 2015-7-5 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/***************************头文件***********************/
#include <reg51.h>
/************************数据类型宏定义******************/
#define uchar unsigned char
#define uint unsigned int
#define lcd P0     //液晶数据口
/***********************声明控制引脚*********************/
sbit rs=P3^0;  //LCD1602控制端口
sbit en=P3^1;
sbit jh=P3^2;  // 继电器控制端
sbit k1=P1^0; //按键
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
/**************************数组定义********************/
uchar code table0[]="Modle: Automatic";    //用于LCD1602显示
uchar code table1[]="T1=12min T2=20s ";
uchar table2[]="Automatic";
uchar table3[]="Manual   ";
uchar table4[]="00";
uchar table5[]="00";
uchar table6[]="                ";
/**********************s声明全局变量*******************/
uchar _50ms,t1=15,t2=30; //每50ms加一次的变量 ;间隔时间min;浇花时间s ;
uint s,T_s;   //1s时间到;总定时时间
uchar flag=0,flag1=0,flag2=0,flag3=0;//时间切换标志。自动/手动切换标志,时间间隔和浇花时间调节标志 ,浇花与不浇花标志
/*************************延时程序*********************/
void delay(uint count)   //1ms延时
{
   uint i,j;
   for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}
/*************************液晶驱动程序*************************/
void w_cmd(uchar com)    //lcd1602写命令
{
  rs=0;
  lcd=com;
  en=1;
  delay(5);
  en=0;
}
void w_data(uchar dat)    //lcd1602读数据
{
  rs=1;
  lcd=dat;
  en=1;
  delay(5);
  en=0;
}
void w_str(uchar *s)       //lcd1602写字符串
{
    while(*s)  w_data(*s++);
}
void lcd_int()       //lcd1602初始化
{
  en=0;
  w_cmd(0x38);
  w_cmd(0x0c);
  w_cmd(0x06);
  w_cmd(0x01);
  w_cmd(0x80+0x00);
  w_str(table0);
  w_cmd(0xc0+0x00);
  w_str(table1);
}
/*******************定时器0初始化程序******************/
void Timer0_Init(void) //其中没ET0是为以后控制暂停用的
{
TMOD = TMOD | 0X01; //定时方式1
TH0 = 0X3C; //50ms
TL0 = 0XB0;
TR0 = 1;
ET0=1;
_50ms = 0;
s = 0;
}
/*******************定时器0中断程序********************/
void Timer0(void) interrupt 1
{
  TR0 = 0; //停止计数
  TH0 = 0X3C; //重装定时器值
  TL0 = 0XB0;
  TR0 = 1;
  _50ms++;
  if(_50ms == 20) //1s到
  {
     _50ms = 0;
     
    s++;
   // count++;
    if(!flag)  //间隔时间内
    {
     if(s == T_s) //时间间隔到
     {
      s=0;
    flag=1;
    jh=0;//开始浇花
     }
    }
    if(flag)  //浇花时间内
    {
     if(s==t2)
   {
    s=0;
    flag=0;
    flag3=0;
    jh=1;  //停止浇花
   }
    }
  }
}
/******************判断模式选择***********************/
void judge()
{
if(k1==0)     //判断模式
{
  delay(10);
  if(k1==0)
  {
   while(!k1);
   flag1=~flag1;
  }
}
}
/*****************调节时间****************************/
void tiaojie()   
{
table4[0]=t1/10+48;
table4[1]=t1%10+48;
table5[0]=t2/10+48;
table5[1]=t2%10+48;
w_cmd(0xc0+0x03);
w_str(table4);
w_cmd(0xc0+0x0c);
w_str(table5);  //液晶显示
if(k2==0)   //判别调节间隔时间还是浇花时间
{
  delay(10);
  if(k2==0)
  {
   while(!k2);
   flag2=~flag2;
  }
}
if(flag2==0)  //调节间隔时间
{
  if(k3==0)
  {
   delay(10);
   if(k3==0)
   {
    while(!k3);
    t1++;   
    if(t1>150) t1=150;
   }
  }
  if(k4==0)
  {
   delay(10);
   if(k4==0)
   {
    while(!k4);
    t1--;
    if(t1<12) t1=12;
   }
  }
}
if(flag2)    //调节浇花时间
{
  if(k3==0)
  {
   delay(10);
   if(k3==0)
   {
    while(!k3);
    t2++;
    if(t2>120) t2=120;
   }
  }
  if(k4==0)
  {
   delay(10);
   if(k4==0)
   {
    while(!k4);
    t2--;
    if(t2<20) t2=20;
   }
  }
}  
}
/*******************主函数**********************************/
void main()
{
lcd_int();
Timer0_Init();
while(1)
{
  judge();    //判断模式
  if(!flag1)   //自动模式
  {   
   w_cmd(0x80+0x07);
    w_str(table2);  //液晶显示
   
   tiaojie(); //调节时间
   T_s=t1*60;//自动模式间隔时间,默认12分钟
   EA=1;    //开定时器
  }
  if(flag1) //手动模式
  {   
   w_cmd(0x80+0x07);
    w_str(table3);  //液晶显示
  
   if(k5==0)     //判定是否按下浇水开关
   {
    delay(10);
    if(k5==0)
    {
     while(!k5);
     flag3=~flag3;
    }
   }
   if(flag3==0)   //不浇花
   {
    jh=1;
    EA=0;//关定时器
   }
   if(flag3)    //浇花
   {
    jh=0;   //开继电器
   // count=0; //浇花计时
    EA=1;      //开定时器
    flag=1;    //浇花标志
    t2=50;   //浇花不超过50s
   }
  }
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-7-5 23:39 | 只看该作者
先生成hex文件 然后反汇编即可
回复

使用道具 举报

板凳
ID:84887 发表于 2015-7-6 12:39 | 只看该作者
反汇编

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:84935 发表于 2015-7-6 19:24 | 只看该作者
有难度

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:84418 发表于 2015-7-6 21:29 | 只看该作者
admin 发表于 2015-7-5 23:39
先生成hex文件 然后反汇编即可

hex文件生成了 然后怎么进行反汇编呢
回复

使用道具 举报

6#
ID:84603 发表于 2015-7-6 22:10 | 只看该作者
我也想问
回复

使用道具 举报

7#
ID:58502 发表于 2015-7-7 00:06 | 只看该作者
keil进入调试之后可以看到相应的汇编代码

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:1 发表于 2015-7-7 00:18 | 只看该作者
zcgh6633 发表于 2015-7-6 21:29
hex文件生成了 然后怎么进行反汇编呢

这里下载 单片机反汇编软件:http://www.51hei.com/mcudown/
回复

使用道具 举报

9#
ID:85547 发表于 2015-7-13 16:10 | 只看该作者
反汇编

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:85513 发表于 2015-7-13 23:49 | 只看该作者
楼上说的没错,先生成hex文件,然后反汇编

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:153199 发表于 2016-12-17 12:16 | 只看该作者
生成hex。然后反汇编,结果不一定准确
回复

使用道具 举报

12#
ID:111634 发表于 2016-12-17 13:33 | 只看该作者
keil能将c变成汇编
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表