找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3297|回复: 18
收起左侧

单片机C语言没定义的函数怎么理解?

  [复制链接]
ID:668004 发表于 2020-7-13 14:16 | 显示全部楼层 |阅读模式
/*        名称: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()-------------这个函数啥意思?都没看到有定义啊
回复

使用道具 举报

ID:94031 发表于 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() 的原函数。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:452950 发表于 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;
        }
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:733205 发表于 2020-7-13 16:15 | 显示全部楼层
你这C语言学的,如果在调用之前定义,就不用声明,如果在调用之后定义,就需要声明一下,然后就可以在调用之后去定义这个函数。
还有,你都没有搞清楚声明和定义的意思

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:668004 发表于 2020-7-13 16:56 | 显示全部楼层
xuyaqi 发表于 2020-7-13 15:59
void In_595()
{
        uchar i;

你好   _nop_();_nop_();  这条语句啥意思
回复

使用道具 举报

ID:668004 发表于 2020-7-13 16:59 | 显示全部楼层
xuyaqi 发表于 2020-7-13 15:59
void In_595()
{
        uchar i;

temp<<=1这个是左移1位后赋值给temp是吗? 还有DS=CY是啥含义
回复

使用道具 举报

ID:452950 发表于 2020-7-13 17:13 | 显示全部楼层
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

_nop_();是空操作,延时用的,一个nop为1个指令周期
回复

使用道具 举报

ID:668004 发表于 2020-7-13 17:34 | 显示全部楼层
xxpp2011 发表于 2020-7-13 17:13
_nop_();是空操作,延时用的,一个nop为1个指令周期

temp<<=1这个是左移1位后赋值给temp是吗? 还有DS=CY是啥含义  
这个也帮忙回复下 谢谢
回复

使用道具 举报

ID:636538 发表于 2020-7-13 17:56 | 显示全部楼层
串行输入子函数不就是定义的吗,
回复

使用道具 举报

ID:797483 发表于 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()都是直接调用这个函数的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:748788 发表于 2020-7-14 08:09 | 显示全部楼层
看来学单片机不仅要抄别人分享的程序,更要理解抄来的程序,才能消化吸收,真正变成自己的
回复

使用道具 举报

ID:668004 发表于 2020-7-14 09:02 | 显示全部楼层
路人748号 发表于 2020-7-13 19:38
void In_595()
{
        uchar i;

对。没注意看 viod out_595()也是定义了
回复

使用道具 举报

ID:426143 发表于 2020-7-14 09:12 | 显示全部楼层

这个就要看你其他头文件有没有定义
回复

使用道具 举报

ID:337139 发表于 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() 的原函数。
回复

使用道具 举报

ID:426861 发表于 2020-10-23 09:14 | 显示全部楼层
先声明,后调用
回复

使用道具 举报

ID:635332 发表于 2020-10-23 14:06 | 显示全部楼层
对函数缺少声明
回复

使用道具 举报

ID:668004 发表于 2021-10-27 17:47 | 显示全部楼层
长风007 发表于 2020-10-23 08:56
//串行输入子程序
void In_595()
{

高手   谢谢  做什么产品
回复

使用道具 举报

ID:975491 发表于 2021-10-27 18:52 | 显示全部楼层
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

一个机器周期,AT89C51一个机器周期是1us
回复

使用道具 举报

ID:975579 发表于 2021-10-28 02:28 来自触屏版 | 显示全部楼层
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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