单片机例子43个,配套开发板(4)

2019-04-10 09:49

void main() { while(1) { if(!kaiguan) { uint m; for(m=800;m>0;m--) //持续时间0.5ms*800 { beep=~beep; delay(); //2000HZ的信号。 } for(m=500;m>0;m--) //持续时间0.5ms*2*500 { beep=~beep; delay(); delay(); //1000HZ的信号。 } } } }

28. 模拟简易门铃;且有关闭门铃功能。 当按下HJ-3G上的S2键后,蜂鸣器会发出十次短暂的“嘟嘟”声作为呼叫。 S3用于关闭或者打开门铃。 当门铃处于关闭时,按下S2不会有呼叫效果。 #include

#define uchar unsigned char

uchar k,ok=1;//默认开机后,门铃开。 unsigned int j; sbit s2=P3^4; sbit s3=P3^5; sbit beep=P2^3;

void delay(unsigned int i) { for(j=i;j>0;j--) for(k=125;k>0;k--); }

void main() { while(1) { if(ok==1)

{ if(s3==0) { while(s3==0); ok=0; } } else { if(s3==0) { while(s3==0); ok=1; } } if((s2==0)&(ok==1)) { uchar i=5; for(i=5;i>0;i--) { beep=0; delay(800); beep=1; delay(800); beep=0; delay(1200); beep=1; delay(1300); } } } }

29. 实验板唱歌实验 #include

#define uchar unsigned char

bit flag; //标志音乐输出脚电平的高低 uchar ptr = 0x00; //取音符 uchar high; //计数器高位 uchar low; //计数器低位

// 本曲谱为 \新年好\前两个十六进制表示发声频率,后一个表示发声时间,0xFF,0xFF 表示休止符 // 0x00 表示结束 // 1 _ 1_ 1 .5

uchar code music[] = {

0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF, // 3 _ 3_ 3 1

0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, // 1_ 3_ 5 5

0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF, // 4_ 3_ 2 -

0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF, // 2_ 3_ 4 4

0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF, // 3_ 2_ 3 1

0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, // 1_ 3_ 2 .5

0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF, // .7_ 2_ 1 -

0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF, 0x00//结束 };

void Init(void); //初始化函数

void DelayMs(unsigned int time); //毫秒级延时函数

void main() { uchar time; Init(); TH0 = high; TL0 = low; while (1) { if (music[ptr] != 0xFF && music[ptr] != 0x00)//判断是否是正常音符 { TR0 = 0; P2_3 = 1; DelayMs(10); //间歇 TR0 = 1; high = music[ptr]; //取设置频率数值的高8 位 low = music[ptr + 1]; //取设置频率数值的低8 位 time = music[ptr + 2]; //取发声时间 DelayMs(time); ptr += 3; }

else if (music[ptr] == 0xFF) //判断是否是休止符 { time = music[ptr + 2]; DelayMs(time); ptr += 3; } else //结束符,停止2 秒后继续 { TR0 = 0; P2_3 = 1; DelayMs(2000); ptr = 0; } } }

/********************************************************************************* * 名称:Count1(void) interrupt 1

* 功能:设置计时器0 溢出中断,每中断一次改变P2_3 引脚电平

*********************************************************************************/ void Count1(void) interrupt 1 { TH0 = high; TL0 = low; if (flag == 0) //改变P2_3 引脚电平 { P2_3 = 0; flag = 1; } else { P2_3 = 1; flag = 0; } }

/********************************************************************************* * 名称:Init() * 功能:设置计数器0 工作方式,16 位计数,溢出中断方式

**********************************************************************************/ void Init()

{ TMOD = 0x01; //定时器0 处于计时方式,16 位 EA = 1; ET0 = 1; //定时器0 溢出中断 }

/********************************************************************************* * 名称:DelayMs(unsigned int time) * 功能:延时time * 1ms 时间

*********************************************************************************/ void DelayMs(unsigned int time) { unsigned int i; unsigned int j; for (j =0; j < time; j++) //每个循环 约 3ms { for (i =0; i < 363; i++) {;} } }

30. LCD1602通过标准程序静态显示字符 #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include

sbit RS = P1^0; //定义端口 sbit RW = P1^1; sbit EN = P2^5; sbit DU = P2^0; sbit WE = P2^1;

#define RS_CLR RS=0 #define RS_SET RS=1

#define RW_CLR RW=0 #define RW_SET RW=1

#define EN_CLR EN=0 #define EN_SET EN=1

#define DataPort P0

void cmg88()//关数码管,点阵函数 {

DU=1; P0=0X00; DU=0; }

/*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

------------------------------------------------*/ void DelayUs2x(unsigned char t) {

while(--t); }

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/ void DelayMs(unsigned char t) {

while(t--) {

//大致延时1mS DelayUs2x(245); DelayUs2x(245); } }

/*------------------------------------------------ 判忙函数

------------------------------------------------*/ bit LCD_Check_Busy(void) {

DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET;

return (bit)(DataPort & 0x80); }

/*------------------------------------------------ 写入命令函数

------------------------------------------------*/ void LCD_Write_Com(unsigned char com) {

while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET;

DataPort= com; _nop_(); EN_CLR; }

/*------------------------------------------------ 写入数据函数

------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) {

while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET;

DataPort= Data; _nop_(); EN_CLR; }

/*------------------------------------------------ 清屏函数

------------------------------------------------*/ void LCD_Clear(void) {

LCD_Write_Com(0x01); DelayMs(5); }

/*------------------------------------------------ 写入字符串函数

------------------------------------------------*/

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else

{

LCD_Write_Com(0xC0 + x); //表示第二行

} while (*s) { LCD_Write_Data( *s); s ++; } }

/*------------------------------------------------ 写入字符函数

------------------------------------------------*/

void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) {

LCD_Write_Com(0x80 + x); } else

{

LCD_Write_Com(0xC0 + x); }

LCD_Write_Data( Data); }

/*------------------------------------------------ 初始化函数

------------------------------------------------*/ void LCD_Init(void) {

LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5);

LCD_Write_Com(0x38); DelayMs(5);

LCD_Write_Com(0x38); DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/

LCD_Write_Com(0x06); /*显示光标移动设置*/

DelayMs(5);

LCD_Write_Com(0x0C); /*显示开及光标设置*/ }

/*------------------------------------------------ 主函数

------------------------------------------------*/ void main(void) {

cmg88();//关数码管,点阵函数 LCD_Init();

LCD_Clear();//清屏 while (1) {

LCD_Write_Char(7,0,'o'); LCD_Write_Char(8,0,'k');

LCD_Write_String(1,1,\ while(1); } }

31.LCD渐入显示 #include

#define uchar unsigned char #define uint unsigned int sbit rs=P1^0; sbit rw=P1^1; sbit lcden=P2^5; sbit dula=P2^0; sbit wela=P2^1;

uchar table1[]=\

uchar table2[]=\void delay(uint x) { uint a,b; for(a=x;a>0;a--) for(b=10;b>0;b--); }

void delay1(uint x) { uint a,b; for(a=x;a>0;a--) for(b=100;b>0;b--); }

void write_com(uchar com) { P0=com; rs=0; lcden=0; delay(10); lcden=1; delay(10); lcden=0; }

void write_date(uchar date) { P0=date; rs=1; lcden=0; delay(10); lcden=1; delay(10); lcden=0; }

void init() {

rw=0; dula=0; wela=0; write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口 delay(20); write_com(0x0f); //显示模式设置 delay(20); write_com(0x06); //显示模式设置:光标右移,字符不移 delay(20); write_com(0x01); //清屏幕指令,将以前的显示内容清除 delay(20); }

void main() { uchar a; init(); write_com(0x80+17); //将第一个字符写在向右偏移17个字符处,为后面的由右向左划入做准备。 delay(20); for(a=0;a<13;a++) { write_date(table1[a]); delay(20); } write_com(0xc0+17); delay(50); for(a=0;a<13;a++) {


单片机例子43个,配套开发板(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:1、竣工文件编制范本

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: