久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4939|回復: 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;            
}
   

回復

使用道具 舉報

ID:68618 發表于 2014-11-22 00:26 | 顯示全部樓層
是不是因為缺少頭文件??
回復

使用道具 舉報

ID:68618 發表于 2014-11-22 00:27 | 顯示全部樓層
把下面這個代碼保存為 lm4229.h 復制到同一目錄下面看看
回復

使用道具 舉報

ID:68618 發表于 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

//===========================================
//              函數聲明
//-------------------------------------------
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;
//--------------------------------------------
//              讀數據函數
//--------------------------------------------
uchar read_data(void)
{
TRISD = 0xff;
CD = 1;           //set CD
RD = 0;           //clear RD
Status = PORTD;
RD = 1;           //set RD
return(Status);
}

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

//--------------------------------------------
//              寫命令函數
//--------------------------------------------
void write_com(uchar com)
{
//while((read_data()&0x01)!=0x01);
CD=1;            //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay_lcd(1);    //當晶振較高時加延時
WRIT=1;
CE=1;
}
//--------------------------------------------
// 指定位置、長度清屏(//清全屏會更好-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);           //設置
for(i=0;i<length;i++)
write_data(0xff);          //寫入空格,清屏
write_com(0xb2);           //關閉自動寫
}

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



//==================【畫線和矩形部分】==============

//--------------------------------------------
//         LM4229在指定位置畫橫線
//     參數說明:x、y 坐標     a 長度  
//     (a為8的倍數)x:0~29;y:0~127
//--------------------------------------------
void draw_Horizontal(uchar x,uchar y,uchar a)
{
uint place;
uchar j;

//---- 畫橫線長 a -----
place=x+y*30;
write_data(place&0xff);   //寫地址低8位
write_data(place>>8);     //寫地址高8位
write_com(0x24);          //設置地址
write_com(0xb0);          //設置數據自動寫
for(j=0;j<a/8;j++)        //a/8列數據
{write_data(0xff);}
write_com(0xb2);         //自動復位
}

//==================【畫線和矩形部分】==============

//--------------------------------------------
//         LM4229在指定位置畫虛線(橫)
//      參數說明:x、y 坐標     a 長度  
//      (a為8的倍數)x:0~29;y:0~127
//--------------------------------------------
void draw_DottedLine(uchar x,uchar y,uchar a)
{
uint place;
uchar j;

//---- 畫橫線長 a -----
place=x+y*30;
write_data(place&0xff);   //寫地址低8位
write_data(place>>8);     //寫地址高8位
write_com(0x24);          //設置地址
write_com(0xb0);          //設置數據自動寫
for(j=0;j<a/8;j++)        //a/8列數據
{write_data(0x3c);}
write_com(0xb2);         //自動復位
}

//--------------------------------------------
//         LM4229在指定位置畫豎線(左)
// 參數說明:x、y 坐標     b 長度   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);   //寫地址低8位
    write_data(place>>8);     //寫地址高8位
    write_com(0x24);          //設置地址
    write_com(0xb0);          //設置數據自動寫
    write_data(0x80);         //數據位1居中較妥當--goldenspider
    write_com(0xb2);          //自動復位
    place=place+30;
}
}

//--------------------------------------------
//         LM4229在指定位置畫豎線(右)
//   參數說明:x、y 坐標     b 長度   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列數據
{
    write_data(place&0xff);   //寫地址低8位
    write_data(place>>8);     //寫地址高8位
    write_com(0x24);          //設置地址
    write_com(0xb0);          //設置數據自動寫
    write_data(0x01);
    write_com(0xb2);          //自動復位
    place=place+30;
}
}

//--------------------------------------------
//         LM4229在指定位置畫矩形a*b
//     參數說明:x、y 坐標     a、b 長度
//     調用到上面幾個函數 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);  //畫右寬
draw_Vertical_left(x,y,b);         //畫左寬
draw_Horizontal(x,y,a);            //畫上邊
draw_Horizontal(x,y+b,a);          //畫下邊
}

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

//--------------------------------------------
//               縱向顯示字符
//         LM4229在指定位置顯示a*b圖片
//     a為圖片寬,b為圖片高(a為8的倍數)
//--------------------------------------------
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行數據
{
    write_data(place&0xff);   //寫地址低8位
    write_data(place>>8);     //寫地址高8位
    write_com(0x24);          //設置地址
    write_com(0xb0);          //設置數據自動寫
    for(j=0;j<a/8;j++)        //a/8列數據
    {write_data(tab_image[(a/8)*i+j]);}
    write_com(0xb2);          //自動復位
    place=place+30;           //換行
}
}

//-------------------------------------------------------
//                 橫向顯示字符
//          LM4229在指定位置顯示a*b圖片
//n為字符個數(圖片長),a為字符寬(a為8的倍數)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行數據
  {
    write_data(place&0xff);   //寫地址低8位
    write_data(place>>8);     //寫地址高8位
    write_com(0x24);          //設置地址
    write_com(0xb0);          //設置數據自動寫
    for(j=0;j<a/8;j++)        //a/8列數據
    {write_data(~tab_image[k*(a/8)*b+(a/8)*i+j]);}
    write_com(0xb2);          //自動復位
    place=place+30;           //換行
    if(i==(b-1))
    place=x+y*30+(k*a/8);
  }
    place=place+a/8;
}
}

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

//===================================================
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 激情一区二区三区 | 国产电影一区二区三区爱妃记 | 亚洲欧洲精品一区 | 综合久久久| 日本久久综合 | 欧洲一区二区在线 | 羞视频在线观看 | 69热视频在线观看 | 成人区一区二区三区 | 日韩电影中文字幕 | 午夜三级在线观看 | 91久久婷婷 | 激情av在线 | 国产伦精品一区二区三区照片91 | 成av在线| 亚洲精品成人在线 | 欧美午夜久久 | 天天操夜夜操 | 91精品一区二区三区久久久久 | 久久久性色精品国产免费观看 | 日韩资源 | 在线国产视频 | 亚洲人成人网 | 盗摄精品av一区二区三区 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 最近最新中文字幕 | 欧美精品第三页 | 国产亚洲精品久久久优势 | 成人网址在线观看 | 一区二区三区小视频 | 91社区在线观看 | 日韩欧美在线播放 | 91在线第一页 | 国产精品国产a | 日韩高清一区 | 一级黄片一级毛片 | 欧美日韩精品久久久免费观看 | 日日爽 | 国产精品久久精品 | av手机免费在线观看 | 亚洲激精日韩激精欧美精品 |