找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2381|回复: 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()-------------这个函数啥意思?都没看到有定义啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:668004 发表于 2020-7-13 16:56 | 只看该作者
xuyaqi 发表于 2020-7-13 15:59
void In_595()
{
        uchar i;

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

使用道具 举报

6#
ID:668004 发表于 2020-7-13 16:59 | 只看该作者
xuyaqi 发表于 2020-7-13 15:59
void In_595()
{
        uchar i;

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

使用道具 举报

7#
ID:452950 发表于 2020-7-13 17:13 | 只看该作者
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

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

使用道具 举报

8#
ID:668004 发表于 2020-7-13 17:34 | 只看该作者
xxpp2011 发表于 2020-7-13 17:13
_nop_();是空操作,延时用的,一个nop为1个指令周期

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

使用道具 举报

9#
ID:636538 发表于 2020-7-13 17:56 | 只看该作者
串行输入子函数不就是定义的吗,
回复

使用道具 举报

10#
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 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

使用道具 举报

12#
ID:668004 发表于 2020-7-14 09:02 | 只看该作者
路人748号 发表于 2020-7-13 19:38
void In_595()
{
        uchar i;

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

使用道具 举报

13#
ID:426143 发表于 2020-7-14 09:12 | 只看该作者

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

使用道具 举报

14#
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() 的原函数。
回复

使用道具 举报

15#
ID:426861 发表于 2020-10-23 09:14 | 只看该作者
先声明,后调用
回复

使用道具 举报

16#
ID:635332 发表于 2020-10-23 14:06 | 只看该作者
对函数缺少声明
回复

使用道具 举报

17#
ID:668004 发表于 2021-10-27 17:47 | 只看该作者
长风007 发表于 2020-10-23 08:56
//串行输入子程序
void In_595()
{

高手   谢谢  做什么产品
回复

使用道具 举报

18#
ID:975491 发表于 2021-10-27 18:52 | 只看该作者
QWE4562012 发表于 2020-7-13 16:56
你好   _nop_();_nop_();  这条语句啥意思

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

使用道具 举报

19#
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 单片机教程网

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