找回密码
 立即注册

QQ登录

只需一步,快速开始

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

keil生成.hex不成功,那位大神帮我修改一下89c52单片机的程序啊,跪谢!(红色为错...

[复制链接]
跳转到指定楼层
楼主
ID:69210 发表于 2014-11-22 00:09 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#include<math.h>
#include<lm4229.h>
#defineuchar unsigned char
#defineuint   unsigned int
sbit ADCS=P3^5;
sbit ADDI=P3^7;  
sbit ADDO=P3^7;  
sbitADCLK =P3^6;  
uintx1,y1,z1=0,w1;
ucharad_data,k,n,m,e,num,s;                              //采样值存储
uinttemp1;
sbit beep=P3^0;                                          
charpress_data;                                 //标度变换存储单元
float  press;
unsignedchar ad_alarm,temp;                          //报警值存储单元
unsignedchar abc[5]={48,46,48,48,48};
unsignedchar price_all[6]={48,48,46,48,48,48};
floatprice_unit[10]={5.5,2.8,3.6,4.5,2.4,4.2,3.8,6.0,1.5,0};   //商品初始单价
ucharprice_danjia[5]={48,46,48,48,48};
floatprice;
uintprice_temp1,price_temp2;                             //商品总价      
ucharAdc0832(unsigned char channel);                                                                                                         
voidalarm(void);
voiddata_pro(void);
voiddelay(uint k);
voidkeyscan();
voiddisp_init();
void  price_jisuan();
/************
主函数
************/
voidmain(void)
{
   delay(500);                        //系统延时500ms启动
   //ad_data=0;                       //采样值存储单元初始化为0
   lcd_init();                        //显示初始化
   disp_init();                                      //开始进入欢迎界面
   delay(1000);                                          //延时进入称量画面
   clear_lcd(0,4,40);
   clear_lcd(16,0,100);
   clear_lcd(28,0,40);
   clear_lcd(44,0,100);
   clear_lcd(56,0,40);
   clear_lcd(72,0,100);
   clear_lcd(84,0,40);
   clear_lcd(100,0,100);
   clear_lcd(112,0,40);
   write_lcd(0,8,"实用电子秤");              
       while(1)
    {
         ad_data =Adc0832(0);        //采样值存储单元初始化为0
         alarm();
         data_pro(); //读取重量
         keyscan();  //查询商品种类
         write_lcd(40,0,"------------------------------");
         write_lcd(56,0,"  :");
         write_lcd(56,11,price_danjia);
         write_lcd(56,20,"/千克");
         write_lcd(72,0,"总重量:");
         write_lcd(72,11,abc);
         write_lcd(72,20,"千克");
         write_lcd(88,0,"  :");
         price_jisuan();           //计算出价格
         write_lcd(88,10,price_all);
         write_lcd(88,20,"");
         write_lcd(112,0,"设计学生:0712201-23 ");
       }
}
/************
ADC0832函数
************/
//采集并返回
ucharAdc0832(unsigned char channel)     //AD转换,返回结果
{
     uchar i=0;
    uchar j;
    uint dat=0;
    uchar ndat=0;
    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI=1;
    _nop_();
    _nop_();
    ADCS=0;//拉低CS
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK,形成下降沿1
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK
    ADDI=channel&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK,形成下降沿2
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK,形成下降沿3
    ADDI=1;//控制命令结束
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//收数据
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次时钟脉冲
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//收数据
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次时钟脉冲
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//拉搞CS
    ADCLK=0;//拉低CLK
    ADDO=1;//拉高数据端,回到初始状态
    dat<<=8;
    dat|=ndat;
    return(dat);            //return ad k         
}
voiddata_pro(void)
{
      unsigned int;                    
        if(0<ad_data<256)                                 
             {                       
                 int vary=ad_data;                                                           
                     press=(0.019531*vary);               
                                                                                                   
                     temp1=(int)(press*1000);            //放大1000倍,便于后面的计算
                   abc[0]=temp1/1000+48;                         //取压力值百位
                     abc[1]=46;
                     abc[2]=(temp1%1000)/100+48;                     //取压力值十位
                     abc[3]=((temp1%1000)%100)/10+48;             //取压力值个位
                     abc[4]=((temp1%1000)%100)%10+48;                     //取压力值十分位
               }         
                     
}
/*****************报警子函数*******************/
voidalarm(void)
{
        if(ad_data>=256)                        
           beep=0;          //则启动报警
        
        else
             beep=1;            
}
voiddelay(uint k)
{
   uint i,j;
   for(i=0;i<k;i++)
    for(j=0;j<100;j++);
}
//开机欢迎界面
voiddisp_init()
{
   write_lcd(0,8,"欢迎使用电子秤");
  write_lcd(16,0,"------------------------------");
   write_lcd(28,0,"设计学生: ");
  write_lcd(44,0,"------------------------------");
   write_lcd(56,0,"班级学号:0712201-23");
  write_lcd(72,0,"------------------------------");
   write_lcd(84,0,"指导老师: ");
   write_lcd(100,0,"------------------------------");
   write_lcd(112,0,"设计日期:2010年6月29日");
}
//键盘服务程序
voidkeyscan()
{
                     P1=0xfe;
                     temp=P1;
                     temp=temp&0xf0;
                     while(temp!=0xf0)
                            {
                                   delay(5);
                                   temp=P1;
                                   temp=temp&0xf0;
                                   while(temp!=0xf0)
                                   {
                                          temp=P1;
                                   switch(temp)
                                          {                                                                                                                           
case0xee:num=1,price=price_unit[0], write_lcd(24,0,"  :       ");
                                                        break;
case0xde:num=2,price=price_unit[1],write_lcd(24,0,"  :        ");
                                                        break;
case0xbe:num=3,price=price_unit[2],write_lcd(24,0,"  :        ");
                                                        break;
case0x7e:num=4,price=price_unit[3],write_lcd(24,0,"  :        ");
                                                        break;
                                          }
                                   while(temp!=0xf0)
                                          {
                                                 temp=P1;
                                                 temp=temp&0xf0;
                                          }
                                   }
                            }
                     P1=0xfd;
                     temp=P1;
                     temp=temp&0xf0;
                     while(temp!=0xf0)
                            {
                                   delay(5);
                                   temp=P1;
                                   temp=temp&0xf0;
                                   while(temp!=0xf0)
                                   {
                                          temp=P1;
                                   switch(temp)
                                          {
case0xed:num=5,price=price_unit[4],write_lcd(24,0,"  :   西     ");
                                                        break;
case 0xdd:num=6,price=price_unit[5],write_lcd(24,0,"  :        ");
                                                        break;
case0xbd:num=7,price=price_unit[6],write_lcd(24,0,"  :        ");
                                                        break;
case0x7d:num=8,price=price_unit[7],write_lcd(24,0,"  :        ");
                                                        break;
                                          }
                                   while(temp!=0xf0)
                                          {
                                                 temp=P1;
                                                 temp=temp&0xf0;
                                          }
                                   }
                            }
                     P1=0xfb;
                     temp=P1;
                     temp=temp&0xf0;
                     while(temp!=0xf0)
                            {
                                   delay(5);
                                   temp=P1;
                                   temp=temp&0xf0;
                                   while(temp!=0xf0)
                                   {
                                          temp=P1;
                                   switch(temp)
                                          {
case0xeb:num=9,price=price_unit[8],write_lcd(24,0,"  :        ");
                                                        break;
case0xdb:num=10,price=price_unit[9],write_lcd(24,0,"  :    商品代码");
                                                        break;
case0xbb:num=11,price=price_unit[1];
                                                        break;
case0x7b:num=12,price=price_unit[2];
                                                        break;
                                          }
                                   while(temp!=0xf0)
                                          {
                                                 temp=P1;
                                                 temp=temp&0xf0;
                                          }
                                   }
                            }
                     P1=0xf7;
                     temp=P1;
                     temp=temp&0xf0;
                     while(temp!=0xf0)
                            {
                                   delay(5);
                                   temp=P1;
                                   temp=temp&0xf0;
                                   while(temp!=0xf0)
                                   {
                                          temp=P1;
                                   switch(temp)
                                          {
                                                 case0xe7:num=13,price=price_unit[3];
                                                        break;
                                                 case0xd7:num=14,price=price_unit[4];
                                                        break;
                                                 case0xb7:num=15,price=price_unit[5];
                                                        break;
                                                 case0x77:num=16,price=price_unit[6];
                                                        break;
                                          }
                                   while(temp!=0xf0)
                                          {
                                                 temp=P1;
                                                 temp=temp&0xf0;
                                          }
                                   }
                            }
       price_temp1=(int)(price*1000);
        price_danjia[0]=price_temp1/1000+48;                            //取单价个位
       price_danjia[1]=46;
        price_danjia[2]=(price_temp1%1000)/100+48;                         //取单价十分位
        price_danjia[3]=((price_temp1%1000)%100)/10+48;                 //取单价百分位
         price_danjia[4]=((price_temp1%1000)%100)%10+48;                //取单价千分位
}
void  price_jisuan()
{
            price_temp2=(int)(price*press*1000);
            price_all[0]=price_temp2/10000+48;
                   price_all[1]=(price_temp2/1000)%10+48;                           
                     price_all[2]=46;
                     price_all[3]=(price_temp2%1000)/100+48;                  
                     price_all[4]=((price_temp2%1000)%100)/10+48;                  
                     price_all[5]=((price_temp2%1000)%100)%10+48;            
}
   

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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