C51蜂鸣器和数码管动静态显示

蜂鸣器代码

#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);
	}
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值