找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个程序有个地方不懂 求助

[复制链接]
跳转到指定楼层
楼主
ID:55268 发表于 2013-9-21 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include "51hei.H"
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit laba=P2^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

   unsigned char ch;a;
   
   bit read_flag= 0 ;
   
   void init_serialcom( void )
   {
       SCON = 0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr
           TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
           PCON |= 0x80 ; //SMOD=1;
           TH1 = 0xFA ;   //Baud:9600 fosc=11.0592MHz
           IE |= 0x90 ;   //Enable Serial Interrupt
           TR1 = 1 ;     // timer 1 run
           TI=1;
          
        }

unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;


void delay(uchar i)
{
  uchar j,k;
   P0=0xFF; //消隐
   wela=1;
   wela=0;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void display()
{
   
   P0=table[show[0]];
   dula=1;
   dula=0;
   
   
   P0=0xfe;
   wela=1;
   wela=0;
   delay(1);
   
   P0=table[show[1]];
   dula=1;
   dula=0;
   
   P0=0xfd;
   wela=1;
   wela=0;
   delay(1);
}


//串口接收中断函数
void serial () interrupt 4 using 3
{
    if (RI)
           {  
                   RI = 0 ;
                   ch=SBUF;                   
                   read_flag= 1 ; //就置位取数标志
                }
}



/*演示主程序*/
void main(void)
{
    unsigned int  a;
        guandz();
            init_serialcom(); //初始化串口
        while ( 1 )   
              {
               if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
                      {
                       read_flag= 0 ; //取数标志清0
                  Im[2]=ch;
                       }
          show[1]=Im[2] & 0x0F;     //取键码的低四位
            show[0]=Im[2] >> 4;
            for(a=10;a>0;a--)
               {
                display();
                }
                          }


}
红色部分不是很懂,  假设  Im[2] =0xf0;    show[1]=Im[2] & 0x0F = ??   show[0]=Im[2] >> 4=??
显示为什么是循环10次?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:55268 发表于 2013-9-22 10:40 | 只看该作者
游客 124.112.116.x 发表于 2013-9-22 08:11
看来你不仅仅是“红色部分不是很懂”,估计你会很多地方都不甚懂。
show[1]=Im[2] & 0x0F;     语句中的 & ...

谢谢你啊!确实我有很多地方不懂, display();为什么要循环显示10次,而不是只显示一次,或者说a是任意去的?麻烦了
回复

使用道具 举报

板凳
ID:7485 发表于 2013-9-24 07:57 | 只看该作者
游客 183.167.229.x 发表于 2013-9-23 17:36
这个要根据硬件,也不一定必须这样。

这里是否为了增加亮度?

没有登录也可以发帖?
回复

使用道具 举报

地板
ID:53032 发表于 2013-10-16 09:35 | 只看该作者
show[1]=Im[2] & 0x0F 是把Im[2]的高4位清零 低4位与1相与还是本身 所以叫取低四位
回复

使用道具 举报

5#
ID:53032 发表于 2013-10-16 09:37 | 只看该作者
show[0]=Im[2] >> 4 这个是Im[2]右移4位
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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