蓝桥杯拓展板——数码管

1.目录

## (一)电路分析
## (二)代码解析

2.实操

蓝桥杯拓展板——数码管_第1张图片
蓝桥杯拓展板——数码管_第2张图片
蓝桥杯拓展板——数码管_第3张图片
由于数电中我们已经学过了数据移位数据寄存器
我们写把数据输入,然后,通过移位,再到最后的数据存储。

uc8 Seg7[17] = {
      0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x4f,0x79,0x78,0x00}; 
//数组中的是有序数列,所以当我们要存储数据时,只用自己去定义一维数组的长度即可
void Seg_DisplayValue(u8 Bit1,u8 Bit2,u8 Bit3)//数码管显示的函数
{
     
	u8 i=0;
	u8 com_temp=0;
		com_temp=Seg7[Bit3];
		for(i=0;i<8;i++)//第一个数码管,这是一位一位往后移,所以最后一个输入,第一个出来,8位一个,循环8次。
	{
     
	 	if(com_temp&0x80)//&和&&区别,&就是一位一位相与,&&则是广义的和0,和1直接相与,
		{
     	SER_H;	 }  //74LS595串行数据输入引脚
		else
		{
     	SER_L;	 }
		SCK_H;		 //74LS595串行移位时钟输入引脚
	    com_temp=com_temp<<1;//1000 0000  和0011 1111,左移才能体现最先进在最后面
		SCK_L;
	}

		com_temp=Seg7[Bit2];
	for(i=0;i<8;i++)//第二个数码管的显示
	{
     
	 	if(com_temp&0x80)
		{
     	SER_H;	 }
		else
		{
     	SER_L;	 }
		SCK_H;
	    com_temp=com_temp<<1;
		SCK_L;
	}
		com_temp=Seg7[Bit1];
		for(i=0;i<8;i++)//第一个数码管的
	{
     
	 	if(com_temp&0x80)
		{
     	SER_H;	 }
		else
		{
     	SER_L;	 }
		SCK_H;
	    com_temp=com_temp<<1;
		SCK_L;
	}
 	RCK_H; //74LS595串行存储时钟输入引脚
	RCK_L;

}

疑问:com_temp的赋值为什么不能放入循环里,放进去则检测不到,输出全是0?
如果在外面,每次都要与一下
借鉴一位大哥的博客
关于在循环中和在循环外定义变量的区别的思考

shiyonghm 2016-09-22 18:14:22 2584 收藏 1
展开
变量的声明是在栈中进行的,而实例化则是在堆中,故栈中只有基础数据与实例的引用。
故上面程序的不同点:
1、在外面的定义的变量,只在栈中声明了一次;
2、在里面的定义的变量,循环多少次就在栈中声明了多少次;
3、在内存或说资源节省方面,肯定是在外面定义较好,是摧荐的写法;

对于使用int等基本数据类型作为循环变量,只要你用的优化方面足够给力的主流的编译器,完全不需要关心在循环外还是循环内定义循环变量。

如果循环变量本身是复杂的对象,建议在循环外定义好,并且在for循环的赋值语句、判断语句中,都要避免重复创建对象
————————————————
版权声明:本文为CSDN博主「shiyonghm」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shiyong1949/article/details/52625598

你可能感兴趣的:(c语言,编程语言)