赞
踩
STC89C52单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、VO接口、EEPROM、看门狗等模块。
注:编号相同的地方代表它们之间有线相连
1.电阻大小确认方式:最后一位为10的n次方 eg.2308 230*10^8
2.电阻作用:限流电阻,防止LED因电流过大而烧毁
3.电源正负极:**++不亮,+ - 亮。**因此 控制单片机引脚输出高低电频
TTL: 高电频 5V,低电频 0V,控制单片机的P2口输出高低电频
#include <REGX52.H>
void main()
{
P2=0x55;//1111 1110
while(1)
{
}
}
然后再将代码保存,用软件stc-isp对接单片机,控制单片机点亮。
记得设定系统频率与定时长度,然后生成C代码,复制代码到keil中使用。
加头文件#include< INTRINS.H>;
#include <REGX52.H> #include <INTRINS.H> void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1) { P2=0xFE; Delay500ms(); P2=0xFF; Delay500ms(); } }
#include <REGX52.H> #include <INTRINS.H> void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1) { P2=0xFE;//1111 1110 Delay500ms(); P2=0xFD;//1111 1101 Delay500ms(); P2=0xFB;//1111 1011 Delay500ms(); P2=0xF7;//1111 0111 Delay500ms(); P2=0xEF;//1110 1111 Delay500ms(); P2=0xDF;//1101 1111 Delay500ms(); P2=0xBF;//1011 1111 Delay500ms(); P2=0x7F;//0111 1111 Delay500ms(); } }
按键消抖方法:1.硬件消除 2.软件程序消抖 延时20ms 等抖动过去再开始执行程序。
#include <REGX52.H>
//长按独立按键,LED点亮
void main()
{
while(1)
{
if(P3_1==0){
P2_0=0;
}
else{
P2_0=1;
}
}
}
#include <REGX52.H> void Delay(unsigned int xms) //@11.0592MHz { unsigned char i, j; while(xms) { i = 2; j = 199; do { while (--j); } while (--i); xms--; } } void main() { while(1) { if(P3_1==0){ Delay(20); while(P3_1==0); Delay(20); P2_0=~P2_0; } } }
#include <REGX52.H> void Delay(unsigned int xms) //@11.0592MHz { unsigned char i, j; while(xms--) { i = 2; j = 199; do { while (--j); } while (--i); } } void main() { unsigned char LEDNum=0; while(1) { if(P3_1==0){ Delay(20); while(P3_1==0); Delay(20); LEDNum++; P2=~LEDNum; } } }
#include <REGX52.H> void Delay(unsigned int xms); unsigned char LEDNum; void main() { P2=0x01; while(1) { if(P3_1==0) { Delay(20); while(P3_1==0); Delay(20); LEDNum++; if (LEDNum>=8) LEDNum=0; P2=~(0x01<<LEDNum); } if(P3_0==0) { Delay(20); while(P3_0==0); Delay(20); if (LEDNum==0) LEDNum=7; else LEDNum--; P2=~(0x01<<LEDNum); } } } void Delay(unsigned int xms) //@11.0592MHz { unsigned char i, j; while(xms--) { i = 2; j = 199; do { while (--j); } while (--i); } }
COM共阴极,GRN共阳极。
一、一位数码管:
左图: 由八个LED组成(ABCDEFG DP 段),对应一个字节八位,上面一个图是共阴极连接,下面是共阳极连接。
右图:十个引脚,3,8号为共级引脚,就近引出。
控制数码管显示数字:
例:显示数字6:需要将ACDEFG点亮,其余熄灭。
共阴极:公共端 (负极)接地 位选端 0,ACDEFG高电平,其余低电平。
共阳极:公共端接VCC,ACDEFG低电平,其余高电平。
二、四位一体数码管:(开发板)
1.引脚序号12个,上面图为共阴极连接,下面图为共阳极连接。
2 .四位数码管分为四个单元,公共端单独引出,所有相同字母的LED连在同一个引脚 8+4=12。
静态一位数字显示
例:第三位显示数字1:共阴极
公共端第三个单元给0(正负极相接短路,单元永远不会亮),其余公共端给1;BC段引脚给1,其余给0。
缺点:同一时刻只能有一个数码管被点亮,即使有多个被点亮,显示的数据也是相同的。
优点:引脚数较少,操作方便。
动态数码管显示
想要点亮多个不同数字,利用人眼暂留,数码管显示余辉效应,
很块地在不同单元出现数字,循环,就可以显示。
作用:将8条线转化为3条线(数码管上8个公共端8条线,利用进制转化为ABC上的三条线)
CBA ----- Y
0 0 0 ---- Y0
二进制—十进制 (000 到 111 ,0~7)
#include <REGX52.H>
//在LED6上输出一个数字6
void main()
{
P2_4=1;
P2_3=0;
P2_2=1;
P0=0x7D;
while(1)
{
}
}
#include <REGX52.H> unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void NixieTube(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() { NixieTube(7,2); while(1) { } }
循环在123位上分别显示123,利用人眼余辉效应看起来像静态123
while(1)
{
NixieTube(1,1);
NixieTube(2,2);
NixieTube(3,3);
}
位选 段选 位选 段选(段选与位选之间时间过短,导致数字串位,需要段选后先清零)用Delay函数。
P0=NixieTable[number];
Delay(1);
P0=0x00;
注意Delay函数的频率为11.059
#include <REGX52.H> unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void Delay(unsigned int xms) { unsigned char i, j; while(xms--) { i = 11; j = 190; do { while (--j); } while (--i); } } void NixieTube(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]; Delay(1); P0=0x00; } void main() { while(1) { NixieTube(1,1); NixieTube(2,2); NixieTube(3,3); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。