继电器,蜂鸣器
这节得目标是了解点亮继电器的led灯与蜂鸣器。
学之前还是得先看看原理图,主要是熟悉38译码器所控制的几个模块,多写几次代码就记住了,不需要可以去记。
蜂鸣器与led都由ULN2003控制所以需要38译码器需要Y5
#include <STC15F2K60S2.H>
void buzz()//蜂鸣器
{
P06=1;
}
void b_led()//继电器led
{
P04=1;
}
void main()
{
P2=(P2&0xa0|0x1f);//P2其他口无影响,设置选用Y5
while(1)
{
buzz();
b_led();
}
}
数码管
下面开始数码管
看原理图得知,数码管主要由Y7段选,Y6位选
按赛点资源包(网上找的)显示数码管是共阳极数码管,且给出了段码表
0 – 0xC0
1 – 0xF9
2 – 0xA4
3 – 0xB0
4 – 0x99
5 – 0x92
6 – 0x82
7 – 0xF8
8 – 0x80
9 – 0x90
这个应该不用记住资源包里面有0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
静态显示
#include <STC15F2K60S2.H>
unsigned int tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<1000;i++)
{
for(j=0;j<t;j++)
{
}
}
}
void hc38(int a)//38译码器的选择
{
if(a==4)
{
P2=(P2&0x1f)|0x80;
}
else if(a==5)
{
P2=(P2&0x1f)|0xa0;
}
else if(a==6)
{
P2=(P2&0x1f)|0xc0;
}
else if(a==7)
{
P2=(P2&0x1f)|0xe0;
}
}
void nixie_duan(unsigned int num)
{
hc38(7);
P0=tab[num];
}
void nixie_wei(unsigned int num)
{
hc38(6);
P0=0x01<<num;
}
void nixie(unsigned int num,unsigned int pos)//num是要显示的数,pos要显示的位置
{
nixie_wei(pos);
nixie_duan(num);
}
void main()
{
while(1)
{
nixie(1,0);//第0个位置显示1
delay(1);//不加延时会乱
}
}
动态显示
动态显示相当于再快速依次的亮起不同位置的灯,运用视觉停留,让人以为同时亮起。
void nixie(unsigned int num,unsigned int pos)//num是要显示的数,pos要显示的位置
{
P0=0xff;//全部关闭,消影
nixie_wei(pos);
nixie_duan(num);
}
void main()
{
while(1)
{
nixie(1,0);//第0个位置显示1
delay(1);//不加延时会乱
nixie(2,1);//第1个位置显示2-
delay(1);//不加延时会乱
}
}
第一天就学到这儿。