请高手帮我分解一下这个程序

2019-07-16 04:36发布


/*预处理命令*/
#include<reg52.h>    //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
/* 函数申明 -----------------------------------------------*/
void delay(uint z);
void send595(uchar dat);
void out595(void);
void disp(uchar w,uchar d);
void dispoff();      
/* 变量定义 -----------------------------------------------*/
sbit MOSIO=P2^2;//!!!!!!!!!!!!!这个是什么意思?
sbit R_CLKa=P2^3;//!!!!!!!!!!!!!这个是什么意思?

sbit S_CLKa=P2^4;//!!!!!!!!!!!!!这个是什么意思?

uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模

/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main()
{
uchar i;
dispoff();     //先关闭数码管
while(1)
{
  for(i=0;i<8;i++)  //移动显示数码管0-7
  {   
   disp(i,i);
   delay(10);
  }
}
}
void delay(uint z)
{                          
    uint i,j;
    for(i=z;i>0;i--)
        for(j=110;j>0;j--);
}
/*
********************************************************************************
** 函数名称 : send595(uchar dat)
** 函数功能 : 数据输入
********************************************************************************
*/
void send595(uchar dat)    //数据输入
{  
uchar i;  
for(i=0;i<8;i++)
{
  if((dat<<i)&0x80)
   MOSIO=1;
  else MOSIO=0;
  
  S_CLKa=0;
  S_CLKa=1;
}
}
/*
********************************************************************************
** 函数名称 : out595(void)
** 函数功能 : 数据输出
********************************************************************************
*/
void out595(void)   // 数据输出
{
R_CLKa=0;
R_CLKa=1;      //上升沿
}
/*
********************************************************************************
** 函数名称 : disp(uchar w,uchar d)
** 函数功能 : 数码管显示函数
********************************************************************************
*/
void disp(uchar w,uchar d)   //数码管显示函数:w-位码,d-段码
{
send595(wei[w]);    //发送位选
send595(wei[w]);
out595();
send595(duan[d]);    //发送段选
out595();
}
/*
********************************************************************************
** 函数名称 : dispoff()
** 函数功能 : 关闭共阳数码管
********************************************************************************
*/
void dispoff()      //关闭共阳数码管
{
send595(0);     //位选全为0,对共阳极而言即端开
send595(0);
out595();

send595(0xff);    //段选全为1,对共阳极段为0时才有可能点亮,这样就被关闭
out595();
}
51开发板T1.pdf 下载积分: 积分 -1 分
1020.1 KB, 下载次数: 7, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
lovezjf234
1楼-- · 2019-07-16 10:27
本帖最后由 lovezjf234 于 2012-9-19 23:13 编辑

对pin脚的定义,单片机控制时序用的。先对单片机有所了解后再往复杂的深入吧。
ibaoxufriend
2楼-- · 2019-07-16 14:01
sbit MOSIO=P2^2;
位定义,就是凡是遇到P2^2 IO口的程序就用MOSIO代替,方便移植的。

15016978760
3楼-- · 2019-07-16 15:54
去网上看視頻吧
changjiang008
4楼-- · 2019-07-16 20:29
 精彩回答 2  元偷偷看……

一周热门 更多>