找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8974|回复: 6
收起左侧

keil多个子程序合并问题

[复制链接]
ID:59542 发表于 2014-5-13 15:53 | 显示全部楼层 |阅读模式
本人以前学单片机时学的是汇编,所以C语言的keil单片机编程不是很懂,我打算做一个酒精测试仪的课程设计,这个是我网上找到的程序代码,我试着编译,但是总是报错,想问问各位大师怎么解决,是设置的问题么,希望能有详细的解答,最好附图解答。以下是程序代码:
一:主程序
#include
#include
#include
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
//键盘
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
//变量
bit flg=0;
//数组
uchar M_time[]={"Time"}; //时间
uchar M_Detect[]={"Detect"}; //检测
uchar M_Storage[]={"Storage"}; //存储
uchar stor[4];
//以定义函数
void initial_lcd1602(void);
void delays1(uint n)
{
while(n--);
}
/***************子程序************************/
void chang_h(void)
{
int g;
if(k0==0)
{for(g=0;g0x23)wr_data[4]=0x00;
}
}
if(k1==0)
{for(g=0;g0;i--)
lcd_delay(248);
write_lcd_command(0x06); //光标右移,文字不移动
for(i=4;i>0;i--)
lcd_delay(248);
write_lcd_command(0x01); //清屏
for(i=4;i>0;i--)
lcd_delay(248);
}
四:AD转换程序
#include"reg52.h"
#include
//******************adc0832****************************//
sbit CS=P3^1; //使能。
sbit CLK=P3^2;//时钟
sbit Do=P3^3; // 数据输出
sbit Di=P3^3;//数据输入
unsigned char CH=0x02;
//通道的选择:0x02就是单通道0;0x03就是单通道1;
//0x00就是双通道ch0=“+”; ch0=“-”
//0x01就是双通道ch0=“-”; ch0=“+”
//*****************************************************//
unsigned char ADconv(void)
{unsigned char i;
unsigned int data_f=0,data_c=0;
Di=1;
CS=1;
_nop_();
CS=0;
Di=1; ;//芯片使能之前的初始化。第一个下降沿
CLK=1;
_nop_();
_nop_();
/****************************************/
CLK=0; // 确定通道模式、第2个下降沿
_nop_();
_nop_();
CLK=1;
Di=(bit)(0x02&CH); //设定通道初始化
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
Di=(bit)(0x01&CH); //设定通道初始化 .第3个下降沿
_nop_();
_nop_();
CLK=0; //AD转化的初始化完成。
Di=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
CLK=1;
for(i=8;i>0;i--)//得到一个正常排序的8位数据
{
data_f|=Do;
data_f1;
DS1302_CLK=1;
delays(5);
DS1302_CLK=0;
delays(5);
}
}
/*****************************************************************************
函数功能:读DS1302一个字节子程序
入口参数:
出口参数:
*****************************************************************************/
uchar readbyte(void)
{
uchar i,dat=0;
for(i=8;i>0;i--)
{
DS1302_IO=1;
dat>>=1;
if(DS1302_IO)
dat|=0x80;
DS1302_CLK=1;
delays(5);
DS1302_CLK=0;
}
return dat;
}
/*uchar readbyte(void)
{
uchar i;
uchar ucdat=0;
for(i=8;i>0;i--)
{
DS1302_IO=1;
ucdat>>=1;
if(DS1302_IO)ucdat|=0x80;
DS1302_CLK=1;
delays(2);
DS1302_CLK=0;
}
return(ucdat);
}*/
/*****************************************************************************
函数功能:写DS1302地址子程序
入口参数:add
入口数据:dat
*****************************************************************************/
void write_DS1302(uchar address,uchar dat)
{
DS1302_RST=0;
delays(10);
DS1302_CLK=0;
delays(10);
DS1302_RST=1;
delays(5);
sendbyte(address);
delays(5);
sendbyte(dat);
DS1302_RST=0;
DS1302_CLK=0;
}
/*****************************************************************************
函数功能:读DS1302地址子程序
入口参数:add
出口参数:readtimeR[]
*****************************************************************************/
uchar read_DS1302(uchar address)
{
uchar timer;
DS1302_RST=0;
delays(2);
DS1302_CLK=0;
delays(2);
DS1302_RST=1;
sendbyte(address);
timer=readbyte();
DS1302_RST=0;
DS1302_CLK=0;
return timer;
}
/*uchar read_DS1302(uchar addr)
{
uchar timedata;
DS1302_RST=0;
delays(2);
DS1302_CLK=0;
delays(2);
DS1302_RST=1;
sendbyte(addr);
timedata=readbyte();
DS1302_CLK=1;
delays(2);
DS1302_RST=0;
return(timedata);
} */
/*****************************************************************************
函数功能:初始化DS1302子程序
入口参数:wr_data[](全局变量)
出口参数:
*****************************************************************************/
void DS1302_init()
{
write_DS1302(0xbe,0x00);
write_DS1302(0x8e,0x00); //关闭保护,若写0x80,则开启保护
write_DS1302(0x8c,wr_data[0]); //年
write_DS1302(0x88,wr_data[1]); //月
write_DS1302(0x86,wr_data[2]); //日
write_DS1302(0x8A,wr_data[3]); //星期
write_DS1302(0x84,wr_data[4]); //时
write_DS1302(0x82,wr_data[5]); //分
write_DS1302(0x80,wr_data[6]); //秒
write_DS1302(0x8e,0x80);
}
/*****************************************************************************
函数功能:读DS1302时间子程序
入口参数:
出口参数:全局变量(year,mouth,data,day,hour,minute,second)
*****************************************************************************/
void read_time(void)
{
readtimeR[0]=read_DS1302(0x8d); //年
readtimeR[1]=read_DS1302(0x89); //月
readtimeR[2]=read_DS1302(0x87); //日
readtimeR[3]=read_DS1302(0x8b); //周
readtimeR[4]=read_DS1302(0x85); //时
readtimeR[5]=read_DS1302(0x83); //分
readtimeR[6]=read_DS1302(0x81); //秒
}
void showdata()
{
read_time();
lcd_dat[3]=(readtimeR[0]>>4)+0x30;
lcd_dat[4]=(readtimeR[0]&0x0f)+0x30;
lcd_dat[6]=(readtimeR[1]>>4)+0x30;
lcd_dat[7]=(readtimeR[1]&0x0f)+0x30;
lcd_dat[9]=(readtimeR[2]>>4)+0x30;
lcd_dat[10]=(readtimeR[2]&0x0f)+0x30;
lcd_dat[14]=(readtimeR[3]&0x0f)+0x30;
lcd_time[0]=(readtimeR[4]>>4)+0x30;
lcd_time[1]=(readtimeR[4]&0x0f)+0x30;
lcd_time[3]=(readtimeR[5]>>4)+0x30;
lcd_time[4]=(readtimeR[5]&0x0f)+0x30;
lcd_time[6]=(readtimeR[6]>>4)+0x30;
lcd_time[7]=(readtimeR[6]&0x0f)+0x30;
}
我想百度了一下,他说几个子程序要放到同一个子目录下才行,而后面的未定义警告是由于前面的几个报错造成的,我想求解具体的解决办法。
QQ截图20140513153856.png
回复

使用道具 举报

ID:27859 发表于 2014-5-29 11:32 来自手机 | 显示全部楼层
#include的后面
回复

使用道具 举报

ID:27859 发表于 2014-5-29 11:35 来自手机 | 显示全部楼层
#included <reg51.h>
回复

使用道具 举报

ID:62622 发表于 2014-6-5 07:49 来自手机 | 显示全部楼层
头文件需要放到对应的课设文件夹里,头文件打不开,所以后续变量,函数没定义状态啦。
回复

使用道具 举报

ID:62064 发表于 2014-6-17 19:19 | 显示全部楼层
真的蛮好的哦
回复

使用道具 举报

ID:79544 发表于 2015-12-12 15:21 | 显示全部楼层
看看天狼星单片机视频教程里的模块化编程吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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