蜂鸣器代码
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar temp;
void delay(void) //误差 -0.000000000023us
{
unsigned char a,b;
for(b=221;b>0;b--)
for(a=207;a>0;a--);
}
void main()
{
temp=0xf0;
P1=temp;
while(1)
{
temp=_crol_(temp,1);
P1=temp;
beep=~beep;//~是按位取反,蜂鸣器给0响,给1不响
delay();
}
}
数码管:
数码管由a到dp分别接的是P0.0到P0.7
a是低位dp是高位, 若想输出一则b、c输出高电压,由高位到低位排序二进制是00000110,然后将二进制转换为16进制是0x06。原理就是这样的,下面是数字显示对应16进制的数:
位选和段选:
a~dp是段选,公共脚是位选
静态显示:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
sbit DUAN =P2^6;//数码管段选
sbit WEI=P2^7; //数码管位选
uchar temp;
void main()
{
WEI=1;//打开位选锁存器
P0 = 0xfe;//1111 1110 给第一个数码管接地,让它工作
WEI =0;//关闭位选锁存器,进行段选(显示数字)
DUAN=1;//打开段选锁存器
P0 = 0x06;
DUAN =0;//锁存段选锁存器
}
动态显示:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
sbit DUAN =P2^6;//数码管段选
sbit WEI=P2^7; //数码管位选
uchar temp;
//共阴极数码管段选表0——9,code表示数组中的数据在程序执行过程中不能被修改
//加code存放的是ROM区不加code存放的是RAM区
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(void) //误差 -0.000000000001us
{
unsigned char a,b;
for(b=15;b>0;b--)
for(a=152;a>0;a--);
}
void display(uint i)
{
uint bai,shi,ge;
bai=i/100;
shi=i%100/10;
ge=i%10;
P0=0xff;//清除断码
WEI=1;//打开位选锁存器
P0 = 0xfe;//1111 1110 给第一个数码管接地,让它工作
WEI =0;//关闭位选锁存器,进行段选(显示数字)
DUAN=1;//打开段选锁存器
P0 =table[bai];
DUAN =0;//锁存段选锁存器
delay();
P0=0xff;//清除断码
WEI=1;
P0 = 0xfd;
WEI =0;
DUAN=1;
P0 = table[shi];
DUAN =0;
delay();
P0=0xff;//清除断码
WEI=1;
P0 = 0xfb;
WEI =0;
DUAN=1;
P0 = table[ge];
DUAN =0;
delay();
}
void main()
{
while(1)
{
display(999);
}
}