找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2330|回复: 2
打印 上一主题 下一主题
收起左侧

求大神解释代码实现的功能 初学者

[复制链接]
跳转到指定楼层
楼主
ID:77317 发表于 2015-4-18 19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
# include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code dp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
u8 code w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
u8 dat,flag,datavalue=0;
sbit beep=P3^7;
sbit LED=P3^6;

/******************************************************

函数名称:    deplay(u16 t)
函数功能:    产生时间延时
入口参数:   t
出口参数:   无
备注:
*******************************************************/

void delay(u16 t)
{
u8 i;
while(t--)
{
for (i=0;i<19;i++);
}
}

/*******************************************************

函数名称:  beepon()
函数功能:    让蜂鸣器短暂发声用来作为发送和接收数据指示
入口参数:   无
出口参数:   无
备注:

******************************************************/

void beepon()
{
beep=0;
delay(500);
beep=1;
}

/********************************************************

函数名称:                 LEDflash()
函数功能;                 让发光二极管闪耀
入口参数:                 无
出口参数:                 无
备注:

********************************************************/

void LEDflash()
{
LED=0;
delay(300);
LED=1;
}

/*******************************************************

函数名称:                   UART_inin()
函数功能;                    串行通信初始化函数,做好发送和接收的准备
入口参数:                        无
出口参数:                        无
备注:

********************************************************/

void UART_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}

/******************************************************

函数名称:            display(u16 k)          
函数功能;                显示向pc发出的数据和pc发来的数据
入口参数:                k
出口参数:                无       
备注:
                                  
*****************************************************/

void display(u16 k)
{
P0=d[k/1000];
P2=w[3];
delay(30);

P0=d[k/100%10];
P2=w[2];
delay(30);

P0=d[k/10%10];
P2=w[1];
delay(30);

P0=d[k%10];
P2=w[0];
delay(30);

P1=0x00;
}

/******************************************************

函数名称:            send()          
函数功能;                向pc发送数据
入口参数:                无
出口参数:                无       
备注:
                                  
*****************************************************/

void send()
{
ES=0;                             //暂时关闭串行中断,否则会又会进入中断服务程序,把a=SBUF;flag=1;
flag=0;
SBUF=datavalue;
while(!TI);                         //如果TI=1,就把它等待
TI=0;                                 //一旦TI=0,就把它清零
ES=1;                                 //闭合串行中断开关
}

/******************************************************

函数名称:            main()          
函数功能;                初始化串口,连续判断遥控器哪个键按下并做相应的处理
入口参数:                无
出口参数:                无       
备注:
                                  
*****************************************************/

main()
{
P1=0xff;
UART_init();                                  //置输入状态
while(1)                                         //串口工作前的准备工作
{
dat=(P1&0x0f);                                //把遥控器按键状态通过P1口送给变量dat
if(dat==0x08)              //遥控器A键按下
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue++;
dat=0;
send();
}
if(dat==0x02)                               
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue=0;
send();
}

if(dat==0x01)                               
{
delay(120);
beepon();
LEDflash();
datavalue--;
send();
}
display(datavalue);                       
}
}

/******************************************************

函数名称:            serial(void) interrupt 4          
函数功能;                通过串行中断服务函数接收从PC发来的数据
入口参数:                无
出口参数:                无       
备注:                 
                                  
*****************************************************/

void serial(void) interrupt 4
{
RI=0;
datavalue=SBUF;               
display(datavalue);       
flag=1;                               
beepon();               
LEDflash();                       
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:469932 发表于 2019-2-3 00:37 | 只看该作者
很好理解啊,咋就不明白了呢

评分

参与人数 1黑币 +35 收起 理由
jinsheng7533967 + 35

查看全部评分

回复

使用道具 举报

板凳
ID:474847 发表于 2019-2-3 16:12 | 只看该作者
具体实现的什么功能你代码的注释里写了。。。。。。
比如你最后一段是这样的
/******************************************************

函数名称:            serial(void) interrupt 4           
函数功能;                通过串行中断服务函数接收从PC发来的数据
入口参数:                无
出口参数:                无        
备注:                 
                                   
*****************************************************/

void serial(void) interrupt 4
{
RI=0;
datavalue=SBUF;               
display(datavalue);        
flag=1;                                
beepon();               
LEDflash();                        
}
那这一段就是用来通过串行中断服务函数接收从PC发来的数据的。
结合单片机的原理图来看代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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