• 赞助网站
  • 您的位置:  首页 >> 技术交流区 >> MCU技术 >> 想学单片机的来
    想学单片机的来
    2012年05月24日 点击: 编辑: hxjlm
    /*********************************************************************************************
    * 程序名 * 数码管亮
    * 公司名 * 石家庄同行科技
    * 编写人 * 何新建 QQ:494902952
    * 日 期 * 2012年4月26日
    * 支 持 * STC12LE5608AD 外部12MHZ晶振
    * 接 口 * 3位共阳极数码管
    * 说 明 * P2口2.7\2.6\2.5位采用推挽输出,P1口标准I/O口,练习板实验通过
    *********************************************************************************************/
    #include <reg52.h>
    #include <intrins.h>

    #define uint unsigned int
    #define uchar unsigned char
    uchar k,m;
    uint j;
    sfr P2M0=0x96;
    sfr P2M1=0x95;  
    #define PA   P2//定义位选赋予P2口
    #define PB   P1//定义段选赋予P1口
    uchar code DSY_CODE[]=
    {0xc0,0xf9,0xa4,0xb0,0x99,
    0x92,0x82,0xf8,0x80,0x90};
    //定义段码表0-9
    void Delay_ms(uint x)//毫秒延时子程序
    {
      uint t;
      while(x--)
      {
      for(t=120;t>0;t--);
      }
    }

    void main()
    {
      P2M0=0xe0;//P2口定义推挽输出
      P2M1=0x00;
      m=0x01;//m=0x01;//定义无符号字符型变量并给数码管位选赐初值0000 0001=01
    while(1)
      {
          for(j=0;j<3;j++){
            m=_cror_(m,1);//m是数码管位,循环一次右移1位1000 0000
            PA=m;//移位后的值赋予PA
            for(k=0;k<10;k++)//k是数码管8段(0-9)10个数,循环10次
            {

                PB=DSY_CODE[k];//循环一次,调用一个段码
                Delay_ms(500);//延时2次
              }
     
            if(PA==0x20){//PA=0x80时,只有P2.5位亮,并有1个警告
                m=0x01;
                }
            }
      }
    }
    赞助网站 | 关于我们 | 版权声明 | 站点导航 | 收藏本站 | 设为首页