切换到宽版
  • 2675阅读
  • 7回复

[C51]这个C语言的代码是什么意思 [复制链接]

上一主题 下一主题
离线huixing122
 

发帖
466
M币
2117
专家
2
粉丝
25
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2017-03-26
~(*(p[0] + 2*(k+j) + 1)) 这个程序的这个 是什么意思  我看程序那个j 的变量一直是0为什么改成K+0却不好使那?哪位能给我分析分析 谢谢



/*******************************************************************************
*                
*                                
--------------------------------------------------------------------------------
* 实 验 名         : 汉字移动显示
* 实验说明       :
* 连接方式       : 见接线图
* 注    意         :
*******************************************************************************/

#include <REG51.H>
#include <intrins.h>
#include "array.h"

//--重定义函数变量--//
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

//--定义SPI要使用的 IO--//
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;

//--全局函数声明--//
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
                                                                                            
/*******************************************************************************
* 函 数 名         : main
* 函数功能           : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main(void)
{  
    int k, j, ms;
    
    //--定义一个指针数组指向每个汉字--//
    uchar *p[] =
                {tab17, tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8,
                 tab9, tab10, tab11, tab12, tab13, tab14, tab15, tab16};                        
    while(1)
    {

        for(ms = 20; ms > 0; ms--)    //移动定格时间设置
        {
            for(k = 0; k < 16; k++)    //显示一个字
            {                            
                HC595SendData(~(*(p[0] + 2*(k+j) + 1)),~(*(p[0] + 2*(k+j) )),tab0[2*k],tab0[2*k + 1]); //因为字模软件取的数组是高电平有效,所以列要取反            
            }
            
            //--清屏--//
            HC595SendData(0xff,0xff,0,0);                                           //清屏        
        }

        
        j++;
        if(j == (17*15) )
        {
            j = 0;
        }
        
    }                                          
}

/*******************************************************************************
* 函 数 名         : HC595SendData
* 函数功能           : 通过595发送四个字节的数据
* 输    入         : BT3:第四个595输出数值
*                  * BT2: 第三个595输出数值
*                  * BT1:第二个595输出数值
*                  * BT0:第一个595输出数值
* 输    出         : 无
*******************************************************************************/

void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
{  
    uchar i;
    
    //--发送第一个字节--//
    for(i=0;i<8;i++)
    {
        MOSIO = BT3 >> 7 ;    //从高位到低位
        BT3 <<= 1;

        S_CLK = 0;
        S_CLK = 1;        
    }

    //--发送第一个字节--//
    for(i=0;i<8;i++)
    {
        MOSIO = BT2 >>7;        //从高位到低位
        BT2 <<= 1;

        S_CLK = 0;
        S_CLK = 1;    
    }

    //--发送第一个字节--//
    for(i=0;i<8;i++)
    {
        MOSIO = BT1 >> 7;        //从高位到低位
        BT1 <<= 1;
        S_CLK = 0;
        S_CLK = 1;    
    }

    //--发送第一个字节--//
    for(i=0;i<8;i++)
    {
        MOSIO = BT0 >> 7;        //从高位到低位
        BT0 <<= 1;
        S_CLK = 0;
        S_CLK = 1;
    }
  
    //--输出--//
    R_CLK = 0; //set dataline low
    R_CLK = 1; //片选
}





离线xht0421

发帖
285
M币
24
专家
0
粉丝
14
只看该作者 1楼 发表于: 2017-03-26
请登录后查看
离线wxharry1031

发帖
255
M币
1483
专家
0
粉丝
10
只看该作者 2楼 发表于: 2017-03-26
请登录后查看

发帖
765
M币
366
专家
0
粉丝
10
只看该作者 3楼 发表于: 2017-03-26
请登录后查看
离线aihe
发帖
562
M币
2322
专家
10
粉丝
22
只看该作者 4楼 发表于: 2017-03-27
请登录后查看
离线huixing122

发帖
466
M币
2117
专家
2
粉丝
25
只看该作者 5楼 发表于: 2017-03-27
离线龙猫

发帖
638
M币
170
专家
5
粉丝
29
只看该作者 6楼 发表于: 2017-04-22
回 huixing122 的帖子
请登录后查看
离线mack13013

发帖
852
M币
269
专家
5
粉丝
26
只看该作者 7楼 发表于: 2017-04-23
回 huixing122 的帖子
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个