标题: 单片机C语言没定义的函数怎么理解? [打印本页]

作者: QWE4562012    时间: 2020-7-13 14:16
标题: 单片机C语言没定义的函数怎么理解?
/*        名称:74HC595串入并出芯片应用
        说明:74HC595是具有一个8位串入并出的移位寄存器和一个8位输出寄存器,
        本例利用74HC595,通过串行输入数据来控制数码管的显示。
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SH_CP=P2^0;                //移位时钟脉冲
sbit DS=P2^1;                        //串行数据输入
sbit ST_CP=P2^2;                //输出锁存器控制脉冲
uchar temp;
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延时
void DelayMS(uint ms)
{
        uchar i;
        while(ms--) for(i=0;i<120;i++);
}
//串行输入子程序
void In_595()
{
        uchar i;
        for(i=0;i<8;i++)
        {
                temp<<=1;DS=CY;
                SH_CP=1;                //移位时钟脉冲上升沿移位
                _nop_();_nop_();
                SH_CP=0;
        }
}
//并行输出子程序
void Out_595()
{
        ST_CP=0;_nop_();
        ST_CP=1;                //上升沿将数据送到输出锁存器
        _nop_();
        ST_CP=0;                //锁存显示数据
}
//主程序
void main()
{
        uchar i;
        while(1)
        {
                for(i=0;i<10;i++)
                {
                        temp=DSY_CODE[ i];
                        In_595();                        //temp中的一字节数据串行输入74HC595
                        Out_595();                        //74HC595移位寄存数据传输到存储寄存器并出现在输出端
                        DelayMS(200);
                }               
        }
}
--------------In_595()-------------这个函数啥意思?都没看到有定义啊

作者: xuyaqi    时间: 2020-7-13 15:59
void In_595()
{
        uchar i;
        for(i=0;i<8;i++)
        {
                temp<<=1;DS=CY;
                SH_CP=1;                //移位时钟脉冲上升沿移位
                _nop_();_nop_();
                SH_CP=0;
        }
}

上面就是 In_595() 的原函数。
作者: xxpp2011    时间: 2020-7-13 16:00
上面不就是吗
//串行输入子程序
void In_595()
{
        uchar i;
        for(i=0;i<8;i++)
        {
                temp<<=1;DS=CY;
                SH_CP=1;                //移位时钟脉冲上升沿移位
                _nop_();_nop_();
                SH_CP=0;
        }
}
作者: 草草111111    时间: 2020-7-13 16:15
你这C语言学的,如果在调用之前定义,就不用声明,如果在调用之后定义,就需要声明一下,然后就可以在调用之后去定义这个函数。
还有,你都没有搞清楚声明和定义的意思
作者: QWE4562012    时间: 2020-7-13 16:56
xuyaqi 发表于 2020-7-13 15:59
void In_595()
{
        uchar i;

你好   _nop_();_nop_();  这条语句啥意思
作者: QWE4562012    时间: 2020-7-13 16:59
xuyaqi 发表于 2020-7-13 15:59
void In_595()
{
        uchar i;

temp<<=1这个是左移1位后赋值给temp是吗? 还有DS=CY是啥含义
作者: xxpp2011    时间: 2020-7-13 17:13
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

_nop_();是空操作,延时用的,一个nop为1个指令周期
作者: QWE4562012    时间: 2020-7-13 17:34
xxpp2011 发表于 2020-7-13 17:13
_nop_();是空操作,延时用的,一个nop为1个指令周期

temp<<=1这个是左移1位后赋值给temp是吗? 还有DS=CY是啥含义  
这个也帮忙回复下 谢谢
作者: SKYLAR123    时间: 2020-7-13 17:56
串行输入子函数不就是定义的吗,
作者: 路人748号    时间: 2020-7-13 19:38
void In_595()
{
        uchar i;
        for(i=0;i<8;i++)
        {
                temp<<=1;DS=CY;
                SH_CP=1;                //移位时钟脉冲上升沿移位
                _nop_();_nop_();
                SH_CP=0;
        }
}
你仔细看,In_595()这个是你自己定义的函数,因为定义了,所以它就叫In_595()这个名字,后面的In_595()都是直接调用这个函数的
作者: wwh2382    时间: 2020-7-14 08:09
看来学单片机不仅要抄别人分享的程序,更要理解抄来的程序,才能消化吸收,真正变成自己的
作者: QWE4562012    时间: 2020-7-14 09:02
路人748号 发表于 2020-7-13 19:38
void In_595()
{
        uchar i;

对。没注意看 viod out_595()也是定义了
作者: 土豆西红柿    时间: 2020-7-14 09:12
QWE4562012 发表于 2020-7-13 17:34
temp

这个就要看你其他头文件有没有定义
作者: 长风007    时间: 2020-10-23 08:56
//串行输入子程序
void In_595()
{
        uchar i;
        for(i=0;i<8;i++)
        {
                temp<<=1;DS=CY;
                SH_CP=1;                //移位时钟脉冲上升沿移位
                _nop_();_nop_();
                SH_CP=0;
        }
}
//并行输出子程序
void Out_595()
{
        ST_CP=0;_nop_();
        ST_CP=1;                //上升沿将数据送到输出锁存器
        _nop_();
        ST_CP=0;                //锁存显示数据
}
上面就是 In_595() 的原函数,要了解每一句的涵意,需要看595的sheetdata才能了解移位时的工作方式。然后才能真明白 In_595() 的原函数。
作者: 天风情    时间: 2020-10-23 09:14
先声明,后调用
作者: yuzi888    时间: 2020-10-23 14:06
对函数缺少声明
作者: QWE4562012    时间: 2021-10-27 17:47
长风007 发表于 2020-10-23 08:56
//串行输入子程序
void In_595()
{

高手   谢谢  做什么产品
作者: 凯凯睡不醒    时间: 2021-10-27 18:52
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

一个机器周期,AT89C51一个机器周期是1us
作者: 玖尾猫    时间: 2021-10-28 02:28
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

这个是头文件库里自带的函数




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1