⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianzhenxianshi.c

📁 单片机.你想学好吗?里面附有15个实例---加keil源代码和proteus仿真电路图...想不学会都难
💻 C
字号:
//使用AT89C52单片机,12MHZ晶振,P0口输出一行数据,P2口作列扫描,共阳LED管
//P1口接6个按键,用于逐字闪烁、向上、下、左、右、显示和暂停备用
#include "reg51.h"
#define char unsigned char
#define int unsigned int
char key,keytmp;
char code distaba[]=
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2(各数字的阳码)
 0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
 0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
 0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,//7
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//黑屏,表示一次显示完毕
};
char code distabb[]=
{0x00,0x39,0x45,0x45,0x45,0x27,0x00,0x00,//2
 0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
 0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
 0x00,0x70,0x4f,0x40,0x40,0x40,0x00,0x00,//7
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//黑屏,表示一次显示完毕
};
char code distabc[]=
{0xff,0xc7,0xbb,0xbf,0xbf,0xc3,0xfb,0x83,//2(各数字的阳反码)
 0xff,0xc7,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,//0
 0xff,0xc7,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,//0
 0xff,0x83,0xbf,0xdf,0xdf,0xdf,0xdf,0xdf,//7
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//黑屏,表示一次显示完毕
};
char code distabd[]=
{0x83,0xfb,0xc3,0xbf,0xbf,0xbb,0xc7,0xff,//2(各数字的阳反码)
 0xc7,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff,//0
 0xc7,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff,//0
 0xdf,0xdf,0xdf,0xdf,0xdf,0xbf,0x83,0xff,//7
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//黑屏,表示一次显示完毕
};
//
char code scan_cona[8]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列扫描控制字
char code scan_conb[8]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//列扫描控制字
//******按键扫描函数********//
void keyscan()
{
 key=(~P1)&0x0ff;//读入键值
 if(key!=0)
 {
  keytmp=key;//键值存放

 }
}
//***1ms延时子程序****
delay1ms(int t)
{
 int i,j;
 for(i=0;i<t;i++)
     for(j=0;j<120;j++)
     keyscan();
}
//******功能程序*******
//******逐字闪烁显示*******
fun0()
{
 int m,n,h;
 for(h=0;h<40;h=h+8)
    {for(n=0;n<16;n++)
        {   if(0<n<=8)
			 {for(m=0;m<8;m++)
			  {P2=scan_cona[m];P0=distaba[m+h];delay1ms(3);continue;}}
			if(8<n<=16)
			 {for(m=0;m<8;m++)
			  {P2=0xff;P0=distaba[m+h];delay1ms(3);}continue;}	
        }
    }
}
//******向左滚动显示******
fun1()
{
 int m,n,h;
 for(h=0;h<32;h++)//控制显示字数(32/8=4个)
    {for(n=0;n<25;n++)//控制帧移动速度
        {for(m=0;m<8;m++)//显示1帧扫描(分8行,每行亮1ms)
            {P2=scan_cona[m];P0=distaba[m+h];delay1ms(1);}
        }
    }
}
//****向右滚动显示****
fun2()
{
 int m,n,h;
 for(h=0;h<32;h++)//控制显示字数(32/8=4个)
    {for(n=0;n<25;n++)//控制帧移动速度
        {for(m=0;m<8;m++)//显示1帧扫描(分8行,每行亮1ms)
            {P2=scan_cona[7-m];P0=distabb[m+h];delay1ms(1);}
        }
    }
}
//********向上滚动显示**********
fun3()
{
 int m,n,h;
 for(h=0;h<32;h++)//控制显示字数(32/8=4个)
    {for(n=0;n<25;n++)//控制帧移动速度
        {for(m=0;m<8;m++)//显示1帧扫描(分8行,每行亮1ms)
            {P0=scan_conb[7-m];P2=distabc[m+h];delay1ms(1);}
        }
    }
}
//*********向下滚动显示*********
fun4()
{
 int m,n,h;
 for(h=0;h<32;h++)//控制显示字数(32/8=4个)
    {for(n=0;n<25;n++)//控制帧移动速度
        {for(m=0;m<8;m++)//显示1帧扫描(分8行,每行亮1ms)
            {P0=scan_conb[m];P2=distabd[m+h];delay1ms(1);}
        }
    }
}
//******主程序********
main()
{
 keytmp=1;//上电自动演示功能(逐字显示)
 while(1)
  {
   keyscan();
   switch(keytmp)
    {
     case(1):{fun0();break;}
     case(2):{fun1();break;}
     case(4):{fun2();break;}
     case(8):{fun3();break;}
     case(16):{fun4();break;}
	 case(32):{keyscan();P2=0xff;break;}//备用(暂停黑屏)
	 default:{break;}
    }
  }
}
//*******************结束************************* //  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -