今天学的不多,内容为:静态、动态数码管的控制,模块化编程和lcd1602调试工具
数码管的控制
由于内部电路的设计,数码管每次只能显示一个位置的一个数字,动态的实现是基于不同位置的闪烁频率高。
P2_4,P2_3,P2_2控制位置(与led模块共用接口)
显示数字,顺时针旋转依次为ABCDEFG DP,0为灭,按顺序写出后由右向左读出,例如6为 1011 1110(对应ABC...),为7D(0111 1101)
静态
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];}
void main()
{Nixie(5,9);while(1){}
}
动态
我们可以将delay的时间由高到低观察,发现确实是闪烁
(但是不进行delay清零,否则上次的会串到当前的,导致乱码)
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms) //@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}}void Nixie(unsigned char Location,Number)//????,????????ABCDEFG DP,0??,????????????//??6? 1011 1110,?7D
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];Delay(1);//数码管消影,位选 段选 清零 位选 段选P0=0x00;
}
void main()
{while(1){Nixie(1,1);Nixie(2,2);Nixie(3,3);}
}
模块化编程
模块化编程就是将函数单独生成两个文件一个.c一个.h,达到和头文件类似的效果。
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
.h文件的固定声明格式
这是达成的效果,使代码更加简洁,同时也方便在后续的使用。后续再用可以将相应的文件粘贴到对应的文件夹里
lcd1602调试工具
lcd1602主要学习了会使用的函数
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
int Result=0;
void main()
{LCD_Init();/*LCD_ShowChar(1,1,'A');LCD_ShowString(1,3,"HELLO");LCD_ShowNum(1,9,521,3);LCD_ShowSignedNum(1,13,-66,2);LCD_ShowHexNum(2,1,0xA8,2);LCD_ShowBinNum(2,4,0xAA,8);*/while(1){Result++;Delay(1000);LCD_ShowNum(1,1,Result,3);}
}
今天学习的内容不是很多,主要是数码管的硬件原理听了好长时间,虽然还是似懂非懂,但是感觉挺有用的。