欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5035|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

keil生成.hex不成功,那位大神幫我修改一下89c52單片機(jī)的程序啊,跪謝!(紅色為錯(cuò)...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:69210 發(fā)表于 2014-11-22 00:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#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;                              //采樣值存儲(chǔ)
uinttemp1;
sbit beep=P3^0;                                          
charpress_data;                                 //標(biāo)度變換存儲(chǔ)單元
float  press;
unsignedchar ad_alarm,temp;                          //報(bào)警值存儲(chǔ)單元
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};   //商品初始單價(jià)
ucharprice_danjia[5]={48,46,48,48,48};
floatprice;
uintprice_temp1,price_temp2;                             //商品總價(jià)      
ucharAdc0832(unsigned char channel);                                                                                                         
voidalarm(void);
voiddata_pro(void);
voiddelay(uint k);
voidkeyscan();
voiddisp_init();
void  price_jisuan();
/************
主函數(shù)
************/
voidmain(void)
{
   delay(500);                        //系統(tǒng)延時(shí)500ms啟動(dòng)
   //ad_data=0;                       //采樣值存儲(chǔ)單元初始化為0
   lcd_init();                        //顯示初始化
   disp_init();                                      //開(kāi)始進(jìn)入歡迎界面
   delay(1000);                                          //延時(shí)進(jìn)入稱量畫(huà)面
   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,"實(shí)用電子秤");              
       while(1)
    {
         ad_data =Adc0832(0);        //采樣值存儲(chǔ)單元初始化為0
         alarm();
         data_pro(); //讀取重量
         keyscan();  //查詢商品種類
         write_lcd(40,0,"------------------------------");
         write_lcd(56,0,"  價(jià):");
         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,"  價(jià):");
         price_jisuan();           //計(jì)算出價(jià)格
         write_lcd(88,10,price_all);
         write_lcd(88,20,"");
         write_lcd(112,0,"設(shè)計(jì)學(xué)生:0712201-23 ");
       }
}
/************
ADC0832函數(shù)
************/
//采集并返回
ucharAdc0832(unsigned char channel)     //AD轉(zhuǎn)換,返回結(jié)果
{
     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;//控制命令結(jié)束
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//收數(shù)據(jù)
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次時(shí)鐘脈沖
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//收數(shù)據(jù)
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次時(shí)鐘脈沖
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//拉搞CS
    ADCLK=0;//拉低CLK
    ADDO=1;//拉高數(shù)據(jù)端,回到初始狀態(tài)
    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倍,便于后面的計(jì)算
                   abc[0]=temp1/1000+48;                         //取壓力值百位
                     abc[1]=46;
                     abc[2]=(temp1%1000)/100+48;                     //取壓力值十位
                     abc[3]=((temp1%1000)%100)/10+48;             //取壓力值個(gè)位
                     abc[4]=((temp1%1000)%100)%10+48;                     //取壓力值十分位
               }         
                     
}
/*****************報(bào)警子函數(shù)*******************/
voidalarm(void)
{
        if(ad_data>=256)                        
           beep=0;          //則啟動(dòng)報(bào)警
        
        else
             beep=1;            
}
voiddelay(uint k)
{
   uint i,j;
   for(i=0;i<k;i++)
    for(j=0;j<100;j++);
}
//開(kāi)機(jī)歡迎界面
voiddisp_init()
{
   write_lcd(0,8,"歡迎使用電子秤");
  write_lcd(16,0,"------------------------------");
   write_lcd(28,0,"設(shè)計(jì)學(xué)生: ");
  write_lcd(44,0,"------------------------------");
   write_lcd(56,0,"班級(jí)學(xué)號(hào):0712201-23");
  write_lcd(72,0,"------------------------------");
   write_lcd(84,0,"指導(dǎo)老師: ");
   write_lcd(100,0,"------------------------------");
   write_lcd(112,0,"設(shè)計(jì)日期:2010年6月29日");
}
//鍵盤(pán)服務(wù)程序
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,"  :   蘋(píng)     ");
                                                        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;                            //取單價(jià)個(gè)位
       price_danjia[1]=46;
        price_danjia[2]=(price_temp1%1000)/100+48;                         //取單價(jià)十分位
        price_danjia[3]=((price_temp1%1000)%100)/10+48;                 //取單價(jià)百分位
         price_danjia[4]=((price_temp1%1000)%100)%10+48;                //取單價(jià)千分位
}
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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:68618 發(fā)表于 2014-11-22 00:26 | 只看該作者
是不是因?yàn)槿鄙兕^文件??
回復(fù)

使用道具 舉報(bào)

板凳
ID:68618 發(fā)表于 2014-11-22 00:27 | 只看該作者
把下面這個(gè)代碼保存為 lm4229.h 復(fù)制到同一目錄下面看看
回復(fù)

使用道具 舉報(bào)

地板
ID:68618 發(fā)表于 2014-11-22 00:27 | 只看該作者
#define uchar unsigned char
#define uint unsigned int
#define DATA_PORT   PORTD

//#define WRIT  PORTAbits.RA10             //WR
//#define RD    PORTAbits.RA9        //RD
//#define CD    PORTBbits.RB6        //C/D
//#define CE    PORTBbits.RB7        //CS
//#define RST   PORTBbits.RB8        //RST

#define WRIT  RC3             //WR
#define RD    RC2        //RD
#define CD    RC0        //C/D
#define CE    RC1        //CS
#define RST   RC4        //RST

//===========================================
//              函數(shù)聲明
//-------------------------------------------
void delay_lcd(uchar);
void write_data(uchar);
void write_com(uchar);
void clr_lcd(uchar,uchar,uint);
void draw_Horizontal(uchar,uchar,uchar);
void draw_Vertical_right(uchar,uchar,uchar);
void draw_Vertical_left(uchar,uchar,uchar);
void write_image(uchar x,uchar y,uchar a,uchar b,uchar *tab_image);

uchar Status=0x00;
//--------------------------------------------
//              讀數(shù)據(jù)函數(shù)
//--------------------------------------------
uchar read_data(void)
{
TRISD = 0xff;
CD = 1;           //set CD
RD = 0;           //clear RD
Status = PORTD;
RD = 1;           //set RD
return(Status);
}

//--------------------------------------------
//              寫(xiě)數(shù)據(jù)函數(shù)
//--------------------------------------------
void write_data(uchar dat)
{
//while((read_data()&0x02)!=0x02);
CD=0;          //數(shù)據(jù)
CE=0;          //LCD使能
WRIT=0;        //寫(xiě)
DATA_PORT=dat; //把數(shù)據(jù)送到P口
delay_lcd(1);  //當(dāng)晶振較高時(shí)加延時(shí)
WRIT=1;        //關(guān)寫(xiě)
CE=1;          //關(guān)使能
}

//--------------------------------------------
//              寫(xiě)命令函數(shù)
//--------------------------------------------
void write_com(uchar com)
{
//while((read_data()&0x01)!=0x01);
CD=1;            //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay_lcd(1);    //當(dāng)晶振較高時(shí)加延時(shí)
WRIT=1;
CE=1;
}
//--------------------------------------------
// 指定位置、長(zhǎng)度清屏(//清全屏?xí)?goldenspider)
//--------------------------------------------

void clr_lcd(uchar x,uchar y,uint length)
{
uint i,place;
place=x*30+y;
write_data(place&0xff);
write_data(place/256);
write_com(0x24);           //設(shè)置
for(i=0;i<length;i++)
write_data(0xff);          //寫(xiě)入空格,清屏
write_com(0xb2);           //關(guān)閉自動(dòng)寫(xiě)
}

//--------------------------------------------
//         LM4229初始化函數(shù)
//--------------------------------------------
void lcd_init()
{
write_data(0x00);
write_data(0x00);
write_com(0x40);
//設(shè)置CGRAM的起始位置
write_data(30);
write_data(0x00);
write_com(0x41);
write_data(0);        //圖形首地址
write_data(0);        //圖形首地址
write_com(0x42);      //圖形首地址設(shè)置
write_data(30);
write_data(0);
write_com(0x43);      //圖形區(qū)域設(shè)置
write_com(0x80);      //設(shè)置為OR模式
//write_com(0x84);
write_com(0x98);      //關(guān)閉文本顯示,開(kāi)圖形顯示
//write_com(0x9c);
}



//==================【畫(huà)線和矩形部分】==============

//--------------------------------------------
//         LM4229在指定位置畫(huà)橫線
//     參數(shù)說(shuō)明:x、y 坐標(biāo)     a 長(zhǎng)度  
//     (a為8的倍數(shù))x:0~29;y:0~127
//--------------------------------------------
void draw_Horizontal(uchar x,uchar y,uchar a)
{
uint place;
uchar j;

//---- 畫(huà)橫線長(zhǎng) a -----
place=x+y*30;
write_data(place&0xff);   //寫(xiě)地址低8位
write_data(place>>8);     //寫(xiě)地址高8位
write_com(0x24);          //設(shè)置地址
write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫(xiě)
for(j=0;j<a/8;j++)        //a/8列數(shù)據(jù)
{write_data(0xff);}
write_com(0xb2);         //自動(dòng)復(fù)位
}

//==================【畫(huà)線和矩形部分】==============

//--------------------------------------------
//         LM4229在指定位置畫(huà)虛線(橫)
//      參數(shù)說(shuō)明:x、y 坐標(biāo)     a 長(zhǎng)度  
//      (a為8的倍數(shù))x:0~29;y:0~127
//--------------------------------------------
void draw_DottedLine(uchar x,uchar y,uchar a)
{
uint place;
uchar j;

//---- 畫(huà)橫線長(zhǎng) a -----
place=x+y*30;
write_data(place&0xff);   //寫(xiě)地址低8位
write_data(place>>8);     //寫(xiě)地址高8位
write_com(0x24);          //設(shè)置地址
write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫(xiě)
for(j=0;j<a/8;j++)        //a/8列數(shù)據(jù)
{write_data(0x3c);}
write_com(0xb2);         //自動(dòng)復(fù)位
}

//--------------------------------------------
//         LM4229在指定位置畫(huà)豎線(左)
// 參數(shù)說(shuō)明:x、y 坐標(biāo)     b 長(zhǎng)度   0000 0001   
//--------------------------------------------
void draw_Vertical_left(uchar x,uchar y,uchar b)
{
uint place;
uchar j;
place=x+y*30;
for(j=0;j<b;j++)              
{
    write_data(place&0xff);   //寫(xiě)地址低8位
    write_data(place>>8);     //寫(xiě)地址高8位
    write_com(0x24);          //設(shè)置地址
    write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫(xiě)
    write_data(0x80);         //數(shù)據(jù)位1居中較妥當(dāng)--goldenspider
    write_com(0xb2);          //自動(dòng)復(fù)位
    place=place+30;
}
}

//--------------------------------------------
//         LM4229在指定位置畫(huà)豎線(右)
//   參數(shù)說(shuō)明:x、y 坐標(biāo)     b 長(zhǎng)度   1000 0000   
//--------------------------------------------

void draw_Vertical_right(uchar x,uchar y,uchar b)
{
uint place;
uchar j;
place=x+y*30;
for(j=0;j<b;j++)              //a/8列數(shù)據(jù)
{
    write_data(place&0xff);   //寫(xiě)地址低8位
    write_data(place>>8);     //寫(xiě)地址高8位
    write_com(0x24);          //設(shè)置地址
    write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫(xiě)
    write_data(0x01);
    write_com(0xb2);          //自動(dòng)復(fù)位
    place=place+30;
}
}

//--------------------------------------------
//         LM4229在指定位置畫(huà)矩形a*b
//     參數(shù)說(shuō)明:x、y 坐標(biāo)     a、b 長(zhǎng)度
//     調(diào)用到上面幾個(gè)函數(shù) x:0~29;y:0~127
//--------------------------------------------
void draw_rect(uchar x,uchar y,uchar a,uchar b)
{
draw_Vertical_right(x+a/8-1,y,b);  //畫(huà)右寬
draw_Vertical_left(x,y,b);         //畫(huà)左寬
draw_Horizontal(x,y,a);            //畫(huà)上邊
draw_Horizontal(x,y+b,a);          //畫(huà)下邊
}

//==================【顯示圖片部分】====================

//--------------------------------------------
//               縱向顯示字符
//         LM4229在指定位置顯示a*b圖片
//     a為圖片寬,b為圖片高(a為8的倍數(shù))
//--------------------------------------------
void write_image(uchar x,uchar y,uchar a,uchar b,uchar *tab_image)
{
uint place;
uchar i,j;
place=x+y*30;
for(i=0;i<b;i++)              //b行數(shù)據(jù)
{
    write_data(place&0xff);   //寫(xiě)地址低8位
    write_data(place>>8);     //寫(xiě)地址高8位
    write_com(0x24);          //設(shè)置地址
    write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫(xiě)
    for(j=0;j<a/8;j++)        //a/8列數(shù)據(jù)
    {write_data(tab_image[(a/8)*i+j]);}
    write_com(0xb2);          //自動(dòng)復(fù)位
    place=place+30;           //換行
}
}

//-------------------------------------------------------
//                 橫向顯示字符
//          LM4229在指定位置顯示a*b圖片
//n為字符個(gè)數(shù)(圖片長(zhǎng)),a為字符寬(a為8的倍數(shù))b為字符高
//--------------------------------------------------------
void write_Char(uchar x,uchar y,uchar a,uchar b,uchar n,uchar *tab_image)
{
uint place;
uchar i,j,k;
place=x+y*30;
for(k=0;k<n;k++)
{
  for(i=0;i<b;i++)            //b行數(shù)據(jù)
  {
    write_data(place&0xff);   //寫(xiě)地址低8位
    write_data(place>>8);     //寫(xiě)地址高8位
    write_com(0x24);          //設(shè)置地址
    write_com(0xb0);          //設(shè)置數(shù)據(jù)自動(dòng)寫(xiě)
    for(j=0;j<a/8;j++)        //a/8列數(shù)據(jù)
    {write_data(~tab_image[k*(a/8)*b+(a/8)*i+j]);}
    write_com(0xb2);          //自動(dòng)復(fù)位
    place=place+30;           //換行
    if(i==(b-1))
    place=x+y*30+(k*a/8);
  }
    place=place+a/8;
}
}

//--------------------------------------------
//              延時(shí)函數(shù)
//--------------------------------------------
void delay_lcd(uchar t)
{
for(;t!=0; t--);
}

//===================================================
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表