標(biāo)題: keil生成.hex不成功,那位大神幫我修改一下89c52單片機(jī)的程序啊,跪謝!(紅色為錯(cuò)... [打印本頁(yè)]
作者: Mrsaqing 時(shí)間: 2014-11-22 00:09
標(biāo)題: keil生成.hex不成功,那位大神幫我修改一下89c52單片機(jī)的程序啊,跪謝!(紅色為錯(cuò)...
#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(); //開始進(jìn)入歡迎界面
delay(1000); //延時(shí)進(jìn)入稱量畫面
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++);
}
//開機(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日");
}
//鍵盤服務(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,"名 稱: 蘋 果");
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;
}
作者: aabbcc 時(shí)間: 2014-11-22 00:26
是不是因?yàn)槿鄙兕^文件??
作者: aabbcc 時(shí)間: 2014-11-22 00:27
把下面這個(gè)代碼保存為 lm4229.h 復(fù)制到同一目錄下面看看
作者: aabbcc 時(shí)間: 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);
}
//--------------------------------------------
// 寫數(shù)據(jù)函數(shù)
//--------------------------------------------
void write_data(uchar dat)
{
//while((read_data()&0x02)!=0x02);
CD=0; //數(shù)據(jù)
CE=0; //LCD使能
WRIT=0; //寫
DATA_PORT=dat; //把數(shù)據(jù)送到P口
delay_lcd(1); //當(dāng)晶振較高時(shí)加延時(shí)
WRIT=1; //關(guān)寫
CE=1; //關(guān)使能
}
//--------------------------------------------
// 寫命令函數(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); //寫入空格,清屏
write_com(0xb2); //關(guān)閉自動(dòng)寫
}
//--------------------------------------------
// 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)閉文本顯示,開圖形顯示
//write_com(0x9c);
}
//==================【畫線和矩形部分】==============
//--------------------------------------------
// LM4229在指定位置畫橫線
// 參數(shù)說明: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;
//---- 畫橫線長(zhǎng) a -----
place=x+y*30;
write_data(place&0xff); //寫地址低8位
write_data(place>>8); //寫地址高8位
write_com(0x24); //設(shè)置地址
write_com(0xb0); //設(shè)置數(shù)據(jù)自動(dòng)寫
for(j=0;j<a/8;j++) //a/8列數(shù)據(jù)
{write_data(0xff);}
write_com(0xb2); //自動(dòng)復(fù)位
}
//==================【畫線和矩形部分】==============
//--------------------------------------------
// LM4229在指定位置畫虛線(橫)
// 參數(shù)說明: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;
//---- 畫橫線長(zhǎng) a -----
place=x+y*30;
write_data(place&0xff); //寫地址低8位
write_data(place>>8); //寫地址高8位
write_com(0x24); //設(shè)置地址
write_com(0xb0); //設(shè)置數(shù)據(jù)自動(dòng)寫
for(j=0;j<a/8;j++) //a/8列數(shù)據(jù)
{write_data(0x3c);}
write_com(0xb2); //自動(dòng)復(fù)位
}
//--------------------------------------------
// LM4229在指定位置畫豎線(左)
// 參數(shù)說明: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); //寫地址低8位
write_data(place>>8); //寫地址高8位
write_com(0x24); //設(shè)置地址
write_com(0xb0); //設(shè)置數(shù)據(jù)自動(dòng)寫
write_data(0x80); //數(shù)據(jù)位1居中較妥當(dāng)--goldenspider
write_com(0xb2); //自動(dòng)復(fù)位
place=place+30;
}
}
//--------------------------------------------
// LM4229在指定位置畫豎線(右)
// 參數(shù)說明: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); //寫地址低8位
write_data(place>>8); //寫地址高8位
write_com(0x24); //設(shè)置地址
write_com(0xb0); //設(shè)置數(shù)據(jù)自動(dòng)寫
write_data(0x01);
write_com(0xb2); //自動(dòng)復(fù)位
place=place+30;
}
}
//--------------------------------------------
// LM4229在指定位置畫矩形a*b
// 參數(shù)說明: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); //畫右寬
draw_Vertical_left(x,y,b); //畫左寬
draw_Horizontal(x,y,a); //畫上邊
draw_Horizontal(x,y+b,a); //畫下邊
}
//==================【顯示圖片部分】====================
//--------------------------------------------
// 縱向顯示字符
// 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); //寫地址低8位
write_data(place>>8); //寫地址高8位
write_com(0x24); //設(shè)置地址
write_com(0xb0); //設(shè)置數(shù)據(jù)自動(dòng)寫
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); //寫地址低8位
write_data(place>>8); //寫地址高8位
write_com(0x24); //設(shè)置地址
write_com(0xb0); //設(shè)置數(shù)據(jù)自動(dòng)寫
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--);
}
//===================================================
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
久久久91精品国产一区二区精品
|
www.一区二区|
久久久99国产精品免费
|
成人在线不卡
|
国产精品日女人
|
国产日韩精品一区二区
|
日韩高清一区二区
|
2022国产精品
|
91精品国产麻豆
|
青青草原精品99久久精品66
|
a级毛片毛片免费观看久潮喷
|
亚洲成人天堂
|
亚洲国产aⅴ精品
|
中文字幕亚洲欧美日韩在线不卡
|
久久国产精品视频
|
精品国产欧美一区二区
|
欧美三区在线观看
|
国产一区91在线
|
九九精品久久久
|
超碰综合
|
国产一级一级毛片
|
日韩精品在线播放
|
亚洲精品在线免费观看视频
|
狠狠撸在线视频
|
亚洲欧美视频
|
www.日韩
|
一区二区三区免费看
|
中文字幕 亚洲一区
|
亚洲国产欧美在线
|
精品国产乱码久久久久久牛牛
|
国产精品99久久久久
|
欧美日韩在线一区二区三区
|
精品国产一区二区三区久久久蜜月
|
欧美日韩在线成人
|
久久久精
|
中文精品视频
|
国产在线小视频
|
国产在线永久免费
|
美女日批免费视频
|
国产精品久久久久久吹潮
|
亚洲成人福利在线观看
|