一、蜂鸣器
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit BEEP=P2^5; //定义端口 void delay_10us(u166 ten_us){ //延时函数 while(ten_us--); } void main() { u16 i=2000; //控制蜂鸣器响的时间 while(i){ while(i--){ BEEP!=BEEP; //BEEP=0; //改变频率来改变音调 T=(1/f)*2; delay_10us(100); //delay_10us(50); } //BEEP=1; i=0; //delay_10us(150); //周期为50+150=200us; BEEP=0; } }
二、动态数码管
人的肉眼可见的显示的时间是20ms-50ms,要是将动态数码管显示的间隔的时间小于20ms,人的肉眼将会误以为数字 是同时出现的。 如图一所示,如果想让最左边的LED8显示,则根据右边的图可知,就是等于Y7,即P22P23P24=111;同理,让LED7显示,就是等于Y6,即P22P23P24=011; 还有重要的一点就是消除重影。 比如LED8=0,他会有一个LED8=1的重影,所以让数码管清零以此来消影。
图一
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; #define SMG_A_DP_PORT P0 //注意这里是P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x6d,0x7d,0x07,0x7f}; void delay_10us(u16 ten_us){ while(ten_us--); } void smg_display() { u8 i=0; for(i=0;i