欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
自己編寫(xiě)的頭文件放哪兒
[打印本頁(yè)]
作者:
xiaojia
時(shí)間:
2017-8-21 21:03
標(biāo)題:
自己編寫(xiě)的頭文件放哪兒
自己編寫(xiě)的頭文件引用的函數(shù)為什么找不到,我的c文件應(yīng)該放哪
lcd1602.h
/*
需要定義以下io口:
rd; //命令or數(shù)據(jù)(0命令 1數(shù)據(jù))
wr; //讀or寫(xiě)(0寫(xiě) 1讀)
en; //使能
DATE;//數(shù)據(jù)
*/
#ifndef __lcd1602_h__
#define __lcd1602_h__
sbit rd = P2^0; //命令or數(shù)據(jù)(0命令 1數(shù)據(jù))
sbit wr = P2^1; //讀or寫(xiě)(0寫(xiě) 1讀)
sbit en = P2^2; //使能
#define DATE P0
extern void delay(u16 num);//延時(shí)num毫秒
extern void write_cmd(u8 cmd); //寫(xiě)命令 命令內(nèi)容為cmd
extern void write_date(u8 date); //寫(xiě)數(shù)據(jù) 數(shù)據(jù)內(nèi)容為date
extern void lcd1602_init(); //初始化1602
extern void gbk(); //光標(biāo)開(kāi)關(guān)
extern void szxs(u8 a,u8 b,u8 c); /* 兩位數(shù)字顯示 a(1第一行 2第二行)
b(第幾個(gè)0~39 其中0~15可直接顯示 16~39需移屏才顯示)
c (要顯示的數(shù)0~99)*/
extern void zfxs(u8 a,u8 b,u8 c); /*單個(gè)字符顯示 a(1第一行 2第二行)
b(第幾個(gè)0~39 其中0~15可直接顯示 16~39需移屏才顯示)
c要顯示的字符 注意加''*/
#endif
lcd1602.c
/*
需要定義以下io口:
rd; //命令or數(shù)據(jù)(0命令 1數(shù)據(jù))
wr; //讀or寫(xiě)(0寫(xiě) 1讀)
en; //使能
DATE;//數(shù)據(jù)
*/
#include <REGX52.H>
#include <lcd1602.h>
void delay(u16 num)//延時(shí)num毫秒
{
u16 a,b;
for(a=num;a>0;a--)
for(b=110;b>0;b--);
}
////////////////////////////////
void write_cmd(u8 cmd) //寫(xiě)命令 命令內(nèi)容為cmd
{
rd=0; //命令or數(shù)據(jù)(0命令 1數(shù)據(jù))
wr=0; //讀or寫(xiě)(0寫(xiě) 1讀)
en=1; //使能
DATE=cmd;
delay(3);
en=0;
}
////////////////////////////////
void write_date(u8 date) //寫(xiě)數(shù)據(jù) 數(shù)據(jù)內(nèi)容為date
{
rd=1;
wr=0;
en=1;
DATE=date;
delay(3);
en=0;
// if(flog1==1) //flog1==1 jin ru tiao jie mo shi mei ci xian shi wan guang biao hui dao tiao jie wie zhi
// write_cmd(wz[gbwz]);
}
///////////////////////////
void lcd1602_init() //初始化1602
{
rd=0; //命令or數(shù)據(jù)(0命令 1數(shù)據(jù))
en=0; //使能
wr=0; //讀or寫(xiě)(0寫(xiě) 1讀)
write_cmd(0x02); //顯示清屏 指針 顯示都清零
write_cmd(0x06); //讀寫(xiě)一位后地址加一
write_cmd(0x0c); //開(kāi)顯示 關(guān)光標(biāo) 不閃爍
write_cmd(0x38); //設(shè)置16*2顯示 5*7點(diǎn)陣 8位數(shù)據(jù)接口
write_cmd(0x01); //顯示回車(chē):數(shù)據(jù)指針清零
}
//////////////////////////////////
void gbk() //光標(biāo)開(kāi)關(guān)
{
write_cmd(0x0f); //光標(biāo)開(kāi)
}
void gbg()
{
write_cmd(0x0c); // 光標(biāo)關(guān)
}
/////////////////////////////////////
void szxs(u8 a,u8 b,u8 c) /* 兩位數(shù)字顯示 a(1第一行 2第二行)
b(第幾個(gè)0~39 其中0~15可直接顯示 16~39需移屏才顯示)
c (要顯示的數(shù)0~99)*/
{ if(a==1)
{
if(c<10)
{
write_cmd(0x80+b);
write_date(0x30);
write_cmd(0x81+b);
write_date(c+0x30);
}
else
{
write_cmd(0x80+b);
write_date(c/10+0x30);
write_cmd(0x81+b);
write_date(c%10+0x30);
}
}
else
{
if(c<10)
{
write_cmd(0xc0+b);
write_date(0x30);
write_cmd(0xc1+b);
write_date(c+0x30);
}
else
{
write_cmd(0xc0+b);
write_date(c/10+0x30);
write_cmd(0xc1+b);
write_date(c%10+0x30);
}
}
}
//////////////////////////////////////
void zfxs(u8 a,u8 b,u8 c) /*單個(gè)字符顯示 a(1第一行 2第二行)
b(第幾個(gè)0~39 其中0~15可直接顯示 16~39需移屏才顯示)
c要顯示的字符 注意加''*/
{
if(a==1)
{
write_cmd(0x80+b);
}
else
{
write_cmd(0xc0+b);
}
write_date(c);
}
作者:
xiaojia
時(shí)間:
2017-8-21 21:05
我放在了inc
作者:
xiaojia
時(shí)間:
2017-8-21 21:05
我放在了inc和lib中都不行
作者:
lzzdyyy
時(shí)間:
2017-8-21 22:06
/inc里不行嗎
作者:
不倒翁.WZT
時(shí)間:
2017-8-22 07:35
標(biāo)題:
RE: 自己編寫(xiě)的頭文件放哪兒
首先這個(gè)頭文件應(yīng)在一個(gè)主模塊中編寫(xiě),也就是在主模塊中重新建立一個(gè)文件來(lái)編寫(xiě)頭文件,如果你編寫(xiě)這個(gè)頭文件不是在需要這個(gè)頭文件的主模塊中新建的文件,那么,你還需要將這個(gè)頭文件拷貝到需要這個(gè)頭文件的主模塊從新建立的文件中去。像你給出的lcd1602這個(gè)子模塊,首先一定是有一個(gè)主模塊需要它,那么,就在這個(gè)主模塊中從新建立一個(gè)文件,用以編寫(xiě)1602頭文件。另外,還要從新建立一個(gè)文件,用以編寫(xiě)1602的子模塊部分。在1602的子模塊中調(diào)用1602頭文件。注意:一定要將這個(gè)1602子模塊添加到主模塊的工程組里去。這樣,這個(gè)工程即有了主模塊又有了子模塊,子模塊也有頭文件。那么,在主模塊調(diào)用子模塊的頭文件即可。
給你一個(gè)例子供參考,這是一個(gè)時(shí)鐘程序,是好用的。具體做法:1、打開(kāi)一個(gè)編譯正確的程序,他沒(méi)有子模塊。2、將下面例子的主模塊拷貝到這個(gè)程序中去。3、在這個(gè)程序中從新建立一個(gè)文件,將LCD1602頭文件部分拷貝進(jìn)去。4、在這個(gè)程序中再?gòu)男陆⒁粋(gè)文件,將LCD1602子模塊部分拷貝進(jìn)去。注意:一定要將這個(gè)1602子模塊添加到主模塊的工程組里。按同樣的方法建立DS1302子模塊。
編譯成功后,這個(gè)程序就好用了。
主模塊部分:
/*******************************************************************************/
#include<reg51.h>
#include"lcd.h"
#include"ds1302.h"
void LcdDisplay();
/****************************主函數(shù)**********************************/
void main()
{
Ds1302Init();
LcdInit();
while(1)
{
Ds1302ReadTime();
LcdDisplay();
}
}
/*****************************顯示函數(shù)**********************************/
void LcdDisplay()
{
LcdWriteCom(0x80+0X40);
LcdWriteData('0'+TIME[2]/16); //時(shí)
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[1]/16); //分
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[0]/16); //秒
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //年
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16); //月
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16); //日
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)); //星期
}
ds1302時(shí)鐘部分:
#include"ds1302.h"
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};
/***************************向DS1302命令(地址+數(shù)據(jù))***********************************/
void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;
_nop_();
SCLK = 0;//先將SCLK置低電平。
_nop_();
RST = 1; //然后將RST(CE)置高電平。
_nop_();
for (n=0; n<8; n++)//開(kāi)始傳送八位地址命令
{
DSIO = addr & 0x01;//數(shù)據(jù)從低位開(kāi)始傳送
addr >>= 1;
SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
_nop_();
SCLK = 0;
_nop_();
}
for (n=0; n<8; n++)//寫(xiě)入8位數(shù)據(jù)
{
DSIO = dat & 0x01;
dat >>= 1;
SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
_nop_();
SCLK = 0;
_nop_();
}
RST = 0;//傳送數(shù)據(jù)結(jié)束
_nop_();
}
/****************************讀取一個(gè)地址的數(shù)據(jù)********************************/
uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
_nop_();
SCLK = 0;//先將SCLK置低電平。
_nop_();
RST = 1;//然后將RST(CE)置高電平。
_nop_();
for(n=0; n<8; n++)//開(kāi)始傳送八位地址命令
{
DSIO = addr & 0x01;//數(shù)據(jù)從低位開(kāi)始傳送
addr >>= 1;
SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
_nop_();
SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)
_nop_();
}
_nop_();
for(n=0; n<8; n++)//讀取8位數(shù)據(jù)
{
dat1 = DSIO;//從最低位開(kāi)始接收
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
_nop_();
SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)
_nop_();
}
RST = 0;
_nop_(); //以下為DS1302復(fù)位的穩(wěn)定時(shí)間,必須的。
SCLK = 1;
_nop_();
DSIO = 0;
_nop_();
DSIO = 1;
_nop_();
return dat;
}
/******************************初始化DS1302************************************/
void Ds1302Init()
{
uchar n;
Ds1302Write(0x8E,0X00); //禁止寫(xiě)保護(hù),就是關(guān)閉寫(xiě)保護(hù)功能
for (n=0; n<7; n++)//寫(xiě)入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年
{
Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
}
Ds1302Write(0x8E,0x80); //打開(kāi)寫(xiě)保護(hù)功能
}
/********************************讀取時(shí)鐘信息***********************************/
void Ds1302ReadTime()
{
uchar n;
for (n=0; n<7; n++)//讀取7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年
{
TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
}
}
1302時(shí)鐘的頭文件:
#ifndef __DS1302_H_
#define __DS1302_H_
//---包含頭文件---//
#include<reg51.h>
#include<intrins.h>
//---重定義關(guān)鍵詞---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
//---定義ds1302使用的IO口---//
sbit DSIO=P3^4;
sbit RST=P3^5;
sbit SCLK=P3^6;
//---定義全局函數(shù)---//
void Ds1302Write(uchar addr, uchar dat);
uchar Ds1302Read(uchar addr);
void Ds1302Init();
void Ds1302ReadTime();
//---加入全局變量--//
extern uchar TIME[7]; //加入全局變量
#endif
LCD1602部分:
#include"lcd.h"
/************延時(shí)函數(shù),延時(shí)1ms該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)********/
void Lcd1602_Delay1ms(uint c) //誤差 0us
{
uchar a,b;
for (; c>0; c--)
for (b=199;b>0;b--)
for(a=1;a>0;a--);
}
/****************************向LCD寫(xiě)入一個(gè)字節(jié)的命令****************************/
void LcdWriteCom(uchar com) //寫(xiě)入命令
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //選擇發(fā)送命令
LCD1602_RW = 0; //選擇寫(xiě)入
LCD1602_DATAPINS = com; //放入命令
Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1; //寫(xiě)入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
}
/*****************************向LCD寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)****************************/
void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù)
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //選擇輸入數(shù)據(jù)
LCD1602_RW = 0; //選擇寫(xiě)入
LCD1602_DATAPINS = dat; //寫(xiě)入數(shù)據(jù)
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //寫(xiě)入時(shí)序
Lcd1602_Delay1ms(5); //保持時(shí)間
LCD1602_E = 0;
}
/********************************初始化LCD屏************************************/
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x38); //開(kāi)顯示
LcdWriteCom(0x0c); //開(kāi)顯示不顯示光標(biāo)
LcdWriteCom(0x06); //寫(xiě)一個(gè)指針加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn)
}
LCD1602頭文件部分:
#ifndef __LCD_H_
#define __LCD_H_
/**********************************
當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r(shí)候定義,
使用8位取消這個(gè)定義
**********************************/
#define LCD1602_4PINS
/**********************************
包含頭文件
**********************************/
#include<reg51.h>
//---重定義關(guān)鍵詞---//
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
/**********************************
PIN口定義
**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
/**********************************
函數(shù)聲明
**********************************/
/*在51單片機(jī)12MHZ時(shí)鐘下的延時(shí)函數(shù)*/
void Lcd1602_Delay1ms(uint c); //誤差 0us
/*LCD1602寫(xiě)入8位命令子函數(shù)*/
void LcdWriteCom(uchar com);
/*LCD1602寫(xiě)入8位數(shù)據(jù)子函數(shù)*/
void LcdWriteData(uchar dat) ;
/*LCD1602初始化子程序*/
void LcdInit();
#endif
作者:
hange_v
時(shí)間:
2017-8-22 13:54
放到工程文件夾和其工程他C文件放一塊就行了,include “ ”
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1