51单片机按键控制花样灯

51单片机按键控制花样灯
51单片机按键控制花样灯

51单片机按键控制花样灯

时间:2018-09-10 13:50:11 来源:51hei 作者:

/****************************************************

* 本程序实现用按键控制花样灯。

*

* 当K1按下时,灯从0xfe向左跑一遍;

*

* 当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置;

*

* 当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。 * * 当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。

*

* 当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。

*

******************************************************/

*************************************************

连接方法:P0接独立按键JP5。P2接LED灯接口JP1 *

***********************************************************/

#include //头文件,函数声明

#include

//定义按键所在位

sbit K1=P0^0。

sbit K2=P0^1。

sbit K3=P0^2。

sbit K4=P0^3。

sbit K5=P0^4。

unsigned char led。

unsigned char j。

void delayms(unsigned char ms> // 1ms标准延时

{

while(ms-->

{

for(j=0。j<110。j++>。 //还是无法设置比较标准的延时,如1S等;所以应该用定时器延时才最准确

}

}

void main(>

{ //P2=led。

unsigned int i。

while(1>

{

/*********************************************

* 当K1按下时,灯从0xfe向左跑一遍; *

*********************************************/

if(K1==0>

delayms(10>。 //消除键盘抖动

if(K1==0>

{

led=0xfe。

for(i=0。i<7。i++> //i可以去8的倍数,表示本电路执行多少次

{

//led=0x7f。 // P端口的初定义要在循环外面,不然会使效果错乱

P2=led。 //因为这里已经初设一个灯,所以for里面要加上这一个

delayms(100>。 //起初这里设置500MS,使按键每按一下灯彩走一个,不能达到要求。

led=_crol_(led,1>。

P2=led。

delayms(100>。

}

while(!K1>。 //这里强调松开就没再次执行程序

P2=led。 //说明执行完上面的程序的最后状态

} //P2=led。 // 如果把本行放在这里,虽然在开头中没有说明程序烧写好之后就先显示一个灯,但因为本行在if外面,所有最后还是会显示

/***********************************************************

*当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置 * ***********************************************************/

if(K2==0>

delayms(10>。

if(K2==0>

{

led=0x7f。

for(i=0。i<7。i++>

{

P2=led。

delayms(100>。

led=_cror_(led,1>。

P2=led。

delayms(100>。

}

while(!K1>。

P2=led。

delayms(100>。

for(i=0。i<7。i++>

{

led=_crol_(led,1>。

P2=led。

delayms(100>。 //跑回去怎么就那么快呀?

} //此时led=0x7f

}

/*****************************************************

*当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。 * *************************************************/

if(K3==0>

delayms(10>。 //消除抖动

if(K3==0>

{

led=0xfe。

delayms(200>。

for(i=0。i<7。i++>

{

P2=led。

delayms(200>。

led=led<<1。 // 备注led=_crol_(led,1)等于led<<1||led>>7。

P2=led。

delayms(200>。

if(led==0x00>

break。 //这里一定要有个break,跳出循环,然后别忘了此时的状态是00,

而不是7f

}

while(!K1>。

led=0x7f。

P2=led。

delayms(200 >。

for(i=0。i<7。i++>

{

led=led>>1。

P2=led。

delayms(200>。

}

}

/****************************************************

*当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。*

****************************************************/

if(K4==0>

delayms(10>。 //消除抖动

if(K4==0>

{

for(i=0。i<4。i++> //执行四次

{ led=0xf0。

P2=led。

delayms(500>。

led=0x0f。

P2=led。

delayms(500>。

}

}

/********************************************************

*当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。* ********************************************************/

if(K5==0>

delayms(10>。

if(K5==0>

P2=0xff。

}

}

/**** */

时钟+秒表+流水灯的单片机汇编程序

时间:2018-09-10 13:49:42 来源:作者://HJSMSY-V1.0单片机开发板测试程序

//---------------------------------------------

// <<电脑钟>>

//---------------------------------------------//=======主函数================================== ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T00

// ORG 001BH

// LJMP T11

ORG 0030H

//=======程序初始化============================= MAIN:

MOV TMOD,#11H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV TH1,#0F0H

MOV TL1,#0B0H

SETB EA

SETB ET0

// SETB ET1

SETB TR0

// SETB TR1

CLR P3.4

MOV R7,#00H 。秒值

MOV 30H,#00H 。秒个位值

MOV 31H,#00H 。秒十位值

MOV 32H,#00H 。分个位

MOV 33H,#00H 。分十位

MOV 34H,#00H 。时个位

MOV 35H,#00H 。时十位

MOV 44H,#00H 。秒表毫秒十位

MOV 45H,#00H 。秒表秒毫秒百位

MOV 46H,#00H 。秒表秒个位

MOV 47H,#00H 。秒表秒十位

MOV 48H,#00H 。秒表分个位

MOV 49H,#00H 。秒表分十位

MOV P2,#0F0H 。P2口按键初始化

MOV 40H,#01H 。数码管休眠值 /流水灯/秒表开关数

MOV 41H,#08H 。流水灯循环值

MOV 42H,#00H 。秒表暂停

// ACALL T11

//----------------------------------------------- MAIN1:

MOV P0,#0FFH

MOV P1,#0FFH

MOV R0,40H

CJNE R0,#01H,ACL1

ACALL MAIN2 。时钟显示

ACL1:CJNE R0,#02H,ACL2

ACALL MAIN3 。秒表

ACL2:CJNE R0,#03H,ACL3

ACALL LED 。流水灯

ACL3:ACALL KEY 。按键扫描

// ACALL BAO 。定时报警

LJMP MAIN1

//=======报警子程序============================

BAO:MOV R4,33H

CJNE R4,#03H,YY1

CLR P3.2

ACALL KEY

LJMP YY2

YY1:CJNE R4,#05H,YY2

SETB P3.2

ACALL KEY

YY2:RET

//======时钟扫描子程序=======================

MAIN2:

MOV A,30H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.0

ACALL DELAY

MOV A,31H

MOV DPTR,#TAB

MOVC A,@A+ DPTR

MOV P0,A

CLR P1.1

SETB P1.0

ACALL DELAY

MOV A,32H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.2

SETB P1.1

ACALL DELAY

MOV A,33H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.3

SETB P1.2

ACALL DELAY

MOV A,34H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.4

SETB P1.3

ACALL DELAY

MOV A,35H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.5

SETB P1.4

ACALL DELAY

MOV P0,#7FH

MOV P1,#0EBH

ACALL DELAY

MOV P1,#0FFH

RET

//========秒表扫描子程序========================= MAIN3:

MOV A,44H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.0

ACALL DELAY

MOV A,45H

MOV DPTR,#TAB

MOVC A,@A+ DPTR

MOV P0,A

CLR P1.1

SETB P1.0

ACALL DELAY

MOV A,46H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.2

SETB P1.1

ACALL DELAY

MOV A,47H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.3

SETB P1.2

ACALL DELAY

MOV A,48H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.4

SETB P1.3

ACALL DELAY

MOV A,49H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.5

SETB P1.4

ACALL DELAY

MOV P0,#7FH

MOV P1,#0EBH

ACALL DELAY

MOV P1,#0FFH

RET

//=======定时器T0中断服务======================== T00:MOV TH0,#0D8H

MOV TL0,#0F0H

INC R7

CJNE R7,#64H,AA

MOV R7,#00H

//-------时钟跑值-------------------------------- TK1:INC 30H 。每秒钟秒个位增一

MOV R6,30H

CJNE R6,#0AH,AA

MOV 30H,#00H

TK2:INC 31H

MOV R6,31H

CJNE R6,#06H,AA

MOV 31H,#00H

TK3:INC 32H

MOV R6,32H

CJNE R6,#0AH,AA

MOV 32H,#00H

TK4:INC 33H

MOV R6,33H

CJNE R6,#06H,AA

MOV 33H,#00H

TK5:INC 34H

MOV R5,34H

MOV R6,35H

CJNE R5,#04H,TK6

CJNE R6,#02H,TK6

MOV 34H,#00H

MOV 35H,#00H

TK6:CJNE R5,#0AH,AA

MOV 34H,#00H

INC 35H

//-------秒表跑值----------------------

AA:

MOV R5,42H

CJNE R5,#01H,TK7

INC 44H

TK7:MOV R5,44H

CJNE R5,#0AH,AA1

MOV 44H,#00H

INC 45H

MOV R5,45H

CJNE R5,#0AH,AA1

MOV 45H,#00H

INC 46H

MOV R5,46H

CJNE R5,#0AH,AA1

MOV 46H,#00H

INC 47H

MOV R5,47H

CJNE R5,#06H,AA1

MOV 47H,#00H

INC 48H

MOV R5,48H

CJNE R5,#0AH,AA1

MOV 48H,#00H

INC 49H

MOV R5,49H

CJNE R5,#06H,AA1

MOV 49H,#00H

AA1:RETI

//====定时器T1中断服务子程序====================

//T11:MOV TH1,#0F0H

// MOV TL1,#0B0H

// RETI

//******定时时间调整子程序*************************// TBAO:

MOV 50H,#00H

MOV 51H,#00H

MOV 52H,#00H

MOV 53H,#00H

MOV 54H,#00H

MOV 55H,#00H

MOV R3,50H

DJNZ 30H,RET1

RET1: RET

//======键盘扫描子程序========================== KEY:MOV P2,#0F0H

MOV R3,P2

CJNE R3,#0F0H,KE0

LJMP KK13

KE0:CJNE R3,#0E0H,KE1 。P2.4行

MOV P2,#0EFH

JB P2.3,KK1 //用作调定时时间。K13 秒个位增一

ACALL DELAY1

ACALL TK1

KK1:JB P2.2,KK2 。K14 秒十增一

ACALL DELAY1

ACALL TK2

KK2:JB P2.1,KK3 。K15 分个位增一

ACALL DELAY1

ACALL TK3

KK3:JB P2.0,KE1 。K16 分十位增一

ACALL DELAY1

ACALL TK4

KE1:MOV P2,#0DFH 。P2.5行

JB P2.3,KK4 。K9 时个位增一

ACALL DELAY1

ACALL TK5

KK4:JB P2.2,KK5 。K10 时十位增一

ACALL DELAY1

INC 35H

MOV R3,35H

CJNE R3,#03H,HH0

MOV 35H,#00H

LJMP KK5

HH0:CJNE R3,#02H,HH1

LJMP KK5

HH1:CJNE R3,#01H,HH2

LJMP KK5

HH2:MOV 35H,#00H

KK5:JB P2.1,KK6

ACALL DELAY1 。K11 开/关蜂鸣器

CPL P3.2

KK6:JB P2.0,KE2 。K12 秒表暂停

MOV 42H,#00H

KE2:MOV P2,#0BFH 。P.6行

JB P2.3,KK7 。K5 时钟暂停/取消暂停 ACALL DELAY1

CPL ET0

KK7:JB P2.2,KK8 。K6 显示/休眠/流水灯 ACALL DELAY2

INC 40H

MOV R3,40H

CJNE R3,#04H,KK8

MOV 40H,#01H

KK8:JB P2.1,KK9

// ACALL DELAY3 。K7 秒表清0

MOV 44H,#00H

MOV 45H,#00H

MOV 46H,#00H

MOV 47H,#00H

MOV 48H,#00H

MOV 49H,#00H

KK9:JB P2.0,KE3 。K8 秒表开始跑

MOV 42H,#01H

KE3:MOV P2,#7FH 。P2.7行

JB P2.3,KK10 。K1 秒十位减一

ACALL DELAY1

MOV R3,31H

CJNE R3,#00H,JA1

LJMP KK10

JA1:DEC 31H

KK10:JB P2.2,KK11 。K2 分个位减一

ACALL DELAY1

MOV R3,32H

CJNE R3,#00H,JA2

LJMP KK11

JA2: DEC 32H

KK11:JB P2.1,KK12 。K3 分十位减一

ACALL DELAY1

MOV R3,33H

CJNE R3,#00H,JA3

LJMP KK12

JA3:DEC 33H

KK12:JB P2.0,KK13 。K4 时个位减一

ACALL DELAY1

MOV R3,34H

CJNE R3,#00H,JA4

LJMP KK13

JA4:DEC 34H

KK13:RET

//=====流水灯子程序=========================== LED: MOV A,#0feH

MOV 41H,#08H

MOV P0,#0FFH

LED1:

MOV P1,A

MOV R3,#100

D0: ACALL DELAY

DJNZ R3,D0

MOV R3,41H

DJNZ R3,AAA

LJMP BB

AAA:RL A

MOV 41H,R3

ACALL KEY

LJMP LED1

BB:

MOV 41H,#07H

CC: MOV P1,A

MOV R3,#30

D1: ACALL DELAY

DJNZ R3,D1

MOV R3,41H

DJNZ R3,DD

LJMP LED0

DD:RR A

MOV 41H,R3

ACALL KEY

LJMP CC

LED0:RET

//=====延时子程序============================== DELAY:MOV R1,#250

DEL1:NOP

NOP

NOP

NOP

DJNZ R1,DEL1

RET

//====调用时钟显示作延时======================== DELAY1:MOV R2,#20

DELA3: ACALL MAIN2

DJNZ R2,DELA3

RET

//====调用秒表显示作延时======================== DELAY3:MOV R2,#20

DELA5:ACALL MAIN3

DJNZ R2,DELA5

RET

//====调用延时子程序作延时======================

DELAY2:MOV R2,#100

DELA4:ACALL DELAY

DJNZ R2,DELA4

RET

//======共阳数码管段码表================================= TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87H END

基于单片机的蓝牙传输

简易无线数据收发设计 赛项报告 小组成员: 指导老师: 日期:二〇一五年五月三十一日 摘要 本设计以STC89C52单片机为控制核心。经蓝牙模块实现无线连接,发送数据和接收数据,通过LCD1602显示接收的数据和编辑发送的数据,两个单片机通过内部程序实现实时接收、发送和显示,从而完成相关要求。????? 关键字:控制;无线连接;接收;发送;显示 目录 1方案设定 (4) 1-1电路设计框图 (4) 1-2功能描述 (4) 1-3使用说明 (5) 2系统硬件设计 (6) 2-1主控制模块 (6) 2-2蓝牙收发模块 (8) 2-3液晶显示模块 (9) 2-4矩阵键盘模块 (10) 3系统软件设计 (11) 3-1源程序 (11) 4系统性能分析 (16) 4-1优缺点 (16) 4-2改进方向 (16)

1方案设定 1-1电路设计框图 图 1-2 HC-05数据! 1-3使用说明 在接通电源前,先把蓝牙模块插到单片机上,紧接着启动电源。观察蓝牙模块的指示灯,等待两个单片机之间的连接匹配,待指示灯出现双闪后就匹配连接成功。接下来可根据自己想要发送数据在单片机的按键区域(0~9)按下,按下后显示屏便出现你所要发送的数据,确认无误之后就按下单片机上的发送按钮即马上发送到另一方单片机上(两个单片机可以互相发送)! 使用前:使用时: 2系统硬件设计 2-1主控制模块 图6-1 STC89C52资料: STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash 存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

基于51单片机蓝牙开关控制家电系统

单片机与嵌入式系统 基于A VR单片机的 “智能+手机蓝牙控制开关及相关电器” 专业:电子信息科学与技术 年级:2013级 姓名:王德坤 学号:2013142110

一.摘要 利用所学51单片机基础知识结合自动控制技术和蓝牙2.0通信技术设计完成一套无线遥控开关系统。整个系统以STC89C52单片机为核心,单片机实现HC-05蓝牙指令的解析与继电器开关控制指令的发出。蓝牙通信单元采用工业级的HC-05蓝牙模块来完成,蓝牙模块在整个系统中负责蓝牙指令的接收和传输;家电开关的自动控制部分采用继电器开关来实现,继电器开关是典型的弱电信号控制型开关。 二.设计原理 采用手机蓝牙终端进行遥控控制,系统通过手机蓝牙实现家用电器开关的遥控开启和关闭,采用此方案进行设计的硬件框图如图所示 三.设计过程 采用直流电源同时增加LDO电源管理芯片进行系统的稳压,由于系统单片机需要 直流5V电压供电,HC-05蓝牙模块需要3.3V直流电源供电,因而系统采用单一的电源不能同时满足单片机和蓝牙模块的电压需求,系统电源管理电路需要增加5V 和3.3V的电压管理芯片,系统采用直流9V供电,5V电压输出采用LM7805稳压芯片稳压后输出给单片机及板上的5V电压系统供电,3.3V的电压采用RT9193-3.3V 稳压输出给系统的HC-05蓝牙模块供电。系统电源电路主要包括5V稳压输出电路,5V转3.3V稳压电路,电源滤波电路和电源输出指示电路。系统9V转直流5V电压部分电路如图a所示,5V转3.3V稳压电路如图b所示。

图a 图b 采用HC-05蓝牙模块,HC-05蓝牙模块是一款高性能的蓝牙主从一体串口通信模块,它可以和多种带蓝牙功能的电脑、手机、PAD等智能终端进行配对,该模块支持非常宽的波特率范围:4800-1382400,并且可兼容5V和3.3V单片机系统,使用方便连接灵活具有较高的性价比,同时HC-05为工业级产品,性能稳定、可靠性较高。 图HC-05通信模块电路图

51单片机数码管显示矩阵键盘键入值

51单片机实现数码管显示矩阵键盘键入值 #include #define uchar unsigned char uchar code decode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; void delay(uchar); uchar temp,b,c,d,num; void display(uchar); void main() { while(1) { P0=0xfe; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp)

case 0xe0:num=0;break; case 0xd0:num=1;break; case 0xb0:num=2;break; case 0x70:num=3;break; } } } P0=0xfd; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp) { case 0xe0:num=4;break; case 0xd0:num=5;break; case 0xb0:num=6;break; case 0x70:num=7;break;

} } P0=0xfb; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp) { case 0xe0:num=8;break; case 0xd0:num=9;break; case 0xb0:num=10;break; case 0x70:num=11;break; } } } P0=0xf7; temp=P0;

基于51单片机的USB键盘设计与实现

三江学院 本科生毕业设计(论文)题目基于51单片机的USB键盘设计与实现高职院院(系)电气工程及其自动化专业 学生姓名梁邱一学号 G105071013 指导教师孙传峰职称讲师 指导教师工作单位三江学院 起讫日期 2013年12月10日至2014年4月12日

摘要 随着计算机技术的不断更新和多媒体技术的快速发展,传统的计算机外设接口因为存在许多缺点已经不能适应计算机的发展需要。比起传统的AT,PS/2,串口,通用串行总线USB,具有速度快,使用方便灵活,易于扩展,支持即插即用,成本低廉等一系列优点,得到了广泛的应用。 本论文阐述了51系列单片机和USB的相关内容,详细介绍了系统的一些功能设计,包括硬件设计和软件设计。在程序调试期间用简单的串口通信电路,通过串口调试助手掌握了USB指令的传输过程,这对整个方案的设计起到了很大的指导作用。论文以单片机最小系统配合模拟键盘组成的USB键盘硬件系统,通过对D12芯片的学习与探索,在其基本命令接口的支持下,结合硬件进行相应的固件程序设计,使其在USB协议下,实现USB模块与PC的数据通信,完成USB键盘的功能模拟。 总结论文研究工作有阐述USB总线的原理、对本设计的系统要求作出了分析、根据要求选定元件和具体编程方案、针对系统所要实现的功能对相关芯片作了详细介绍以及在硬件部分设计了原理图。 关键词:USB;D12;PC

Abstract With the rapid development of computer technology and multimedia technology constantly updated, traditional computer peripheral interface because there are many shortcomings have been unable to meet the development needs of the https://www.360docs.net/doc/214849280.html,pared to traditional AT, PS / 2, serial, Universal Serial Bus USB, with fast, flexible and easy to use, easy to expand, support Plug and Play, a series of advantages, such as low cost, has been widely used. This paper describes the 51 series and USB related content, detailing some of the features of the system design, including hardware and software design.During debugging a simple serial communication circuit, through the serial port debugging assistant master USB transfer instructions, which designed the entire program has played a significant role in guiding.Thesis smallest single-chip system consisting of analog keyboard with a USB keyboard hardware system, by learning and exploration D12 chips, with the support of its basic command interface, in conjunction with the corresponding hardware firmware design, making it in the USB protocol, USB module data communication with the PC, the USB keyboard to complete the functional simulation. This paper summarizes research work has elaborated the principle of the USB bus, the system is designed to require the analysis, components and solutions based on the specific requirements of the selected programming for the system to achieve the function of the relevant chips are described in detail in the hardware part of the design as well as the principle of Figure. Keywords:USB;D12;PC

基于51单片机系统设计

基于51单片机的多路温度采集控制系统设计 言: 随着现代信息技术的飞速发展,温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以温度采集控制系统的设计与研究有十分重要的意义。 本次设计的目的在于学习基于51单片机的多路温度采集控制系统设计的基本流程。本设计采用单片机作为数据处理与控制单元,为了进行数据处理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。单片机数据处理之后,发出控制信息改变报警和控制执行模块的状态,同时将当前温度信息发送到LED进行显示。本系统可以实现多路温度信号采集与显示,可以使用按键来设置温度限定值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和继电器的目的。 我所采用的控制芯片为AT89c51,此芯片功能较为强大,能够满足设计要求。通过对电路的设计,对芯片的外围扩展,来达到对某一车间温度的控制和调节功能。 关键词:温度多路温度采集驱动电路 正文: 1、温度控制器电路设计 本电路由89C51单片机温度传感器、模数转换器ADC0809、窜入并出移位寄存器74LS164、数码管、和LED显示电路等组成。由热敏电阻温度传感器测量环境温度,将其电压值送入ADC0809的IN0通道进行模数转换,转换所得的数字量由数据端D7-D0输出到89C51的P0口,经软件处理后将测量的温度值经单片机的RXD端窜行输出到74LS164,经74LS164 窜并转换后,输出到数码管的7个显示段,用数字形式显示出当前的温度值。89C51的P2.0、P2.1、P2.2分别接入ADC0809通道地址选择端A、B、C,因此ADC0809的IN0通道的地址为F0FFH。输出驱动控制信号由p1.0输出,4个LED为状态指示,其中,LED1为输出驱动指示,LED2为温度正常指示,LED3为高于上限温度指示,LED4为低于下限温度指示。当温度高于上限温度值时,有p1.0输出驱动信号,驱动外设电路工作,同时LED1亮、LED2灭、LED3亮、LED4灭。外设电路工作后,温度下降,当温度降到正常温度后,LED1亮、LED2亮、LED3灭、LED4灭。温度继续下降,当温度降到下限温度值时,p1.0信号停止输出,外设电路停止工作,同时LED1灭、LED2灭、LED3灭、LED4亮。当外设电路停止工作后,温度开始上升,接着进行下一工作周期。 2、温度控制器程序设计 本软件系统有1个主程序,6个子程序组成。6个子程序为定时/计数器0中断服务程序、温度采集及模数转换子程序ADCON、温度计算子程序CALCU、驱动控制子程序DRVCON、十进制转换子程序METRICCON 及数码管显示子程序DISP。 (1)主程序 主程序进行系统初始化操作,主要是进行定时/计数器的初始化。 (2)定时/计数器0中断服务程序 应用定时计数器0中断的目的是进行定时采样,消除数码管温度显示的闪烁现象,用户可以根据实际环境温度变化率进行采样时间调整。每当定时时间到,调用温度采集机模数转换子程序ADCON,得到一个温度样本,并将其转换为数字量,传送给89C51单片机,然后在调用温度计算子程序CALCU,驱动控制子程序DRVCON,十进制转换子程序MERTRICCON,温度数码显示子程序DISP。

51单片机矩阵键盘设计

湖南工业大学 课程设计 资料袋 电气与信息工程学院(系、部)2009--2010 学年第 1 学期课程名称单片机应用系统指导教师贺正芸 学生姓名专业班级电子信息科学与技术学号 题目4*4矩阵键盘 成绩起止日期2009 年11 月23 日~2009 年12 月04 日 目录清单 序号材料名称资料数量备注 1 课程设计任务书 2 课程设计说明书 3 课程设计图纸张 4 5 6

湖南工业大学 课程设计任务书 2009 —2010 学年第 1 学期 电气与信息工程学院(系、部)电子信息科学与技术专业班级 课程名称:单片机应用系统 设计题目:4*4矩阵键盘 完成期限:自2009 年11 月9 日至2009 年11 月20 日共 2 周 内容及任务 由P1.0—P1.3(列)和P1.4—P1.7(行)组成4*4矩阵键盘,P0口接LED静态显示电路。由于P0口内部无上拉电阻,因此必须外部接上上拉电阻,其阻值的选择可以根据LED 数码管发光电流及其亮度来决定,参考值为560欧姆。编写4*4键盘的驱动程序。 编写主程序,当按键按下时,能够在数码管显示器与按键的键值对应的数字。 进度安排 起止日期工作内容2009.11.23-2009.11.24 设计内容及基本原理 2009.11.25-2009.11.27 进行系统的软件设计,2009.11.28-2009.12.04 进行系统的硬件设计 主 要 参 考 资 料 [1] 欧伟明.单片机原理与应用. 电子工业出版社,2009年 指导教师(签字):年月日系(教研室)主任(签字):年月日

单片机应用系统 4*4矩阵键盘设计说明书 学生姓名 班级电科072 学号 成绩 指导教师(签字) 起止日期:2009 年11 月23 日至2009 年12 月4 日 电气与信息工程学院(部)

基于51单片机的蓝牙遥控小车

单片机大作业 “基于单片机的蓝牙遥控小车” : 班级:通信工程卓越2014-1 学号: 在班编号:

基于单片机的蓝牙遥控小车 目录 第一章绪论 (1) 1.1 研究背景和意义 (1) 第二章系统框架及软硬件结构设计 (2) 2.1 系统要求 (2) 2.2 系统整体算法流程 (2) 2.3 总体任务设计 (3) 2.4 整体硬件结构设计 (4) 2.5 整体软件结构设计 (4) 第三章模块的详细设计 (5) 3.1 L293D电机驱动模块 (5) 3.1.1模块介绍 (5) 3.1.2 PWM脉冲控制原理 (6) 3.1.3 脉冲控制代码 (6) 3.2 HC05蓝牙模块 (7) 3.2.1 模块简介 (7) 3.2.2 蓝牙串口程序说明 (8)

3.2.3 模块引脚说明 (8) 3.3 USB转TTL模块 (9) 第四章系统功能设计与实现 (11) 4.1 安卓手机蓝牙遥控的设计与实现 (11) 4.1.1 设计基本思路 (11) 4.1.2 遥控任务分配 (11) 4.2.3 蓝牙遥控操作流程 (12) 第五章软硬件调试 (14) 5.1 硬件调试 (14) 5.2 软件调试 (14)

第一章绪论 1.1 研究背景和意义 智能化无处不在。各种智能化设备在不同的领域中发挥着自己的特长,而在家用方面的智能有着相当重要的意义。 本次所设计的智能小车系统包含着对周围环境的检测、舵机控制以及短距离无线遥控等的功能,它需要实现微控制器、多传感器技术、蓝牙遥控、机械结构原理、数字逻辑、自动控制等各学科技术容的渗透融合。智能小车通过其上部搭载的89C52芯片作为核心控制器,通过多种传感器来获取周围环境信息并将采集到的信息输送给CPU,然后由CPU来给各个部分下达相对应的指令。智能小车不仅价格低廉,而且甚至能够担任人类难以从事的任务,它在工业、农业以及社会生产生活等许多领域都起到了重要作用。本次课题设计中所采用到的短距离无线遥控、单片机控制原理、多传感器技术、自动避障技术等等。现在在工业制造、农业生产、国家安全、军事武器,医疗保健、太空探测等许多领域都日益发挥着其作用,在军事侦察、反恐、防暴、防核化等高危任务方面、环境污染检测方面和在恶劣环境中均有着非常好的发展前景,从这些方面可知本课题研究意义非凡。

51单片机矩阵键盘扫描程序

/*----------------------------------------------- 名称:矩阵键盘依次输入控制使用行列逐级扫描 论坛:https://www.360docs.net/doc/214849280.html, 编写:shifang 日期:2009.5 修改:无 内容:如计算器输入数据形式相同从右至左使用行列扫描方法 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//us级延时函数声明 void DelayMs(unsigned char t); //ms级延时 void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数 unsigned char KeyScan(void);//键盘扫描 unsigned char KeyPro(void); void Init_Timer0(void);//定时器初始化 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num,i,j; unsigned char temp[8]; Init_Timer0(); while (1) //主循环 { num=KeyPro();

(完整word版)基于51单片机的温度控制系统设计

基于51单片机的水温自动控制系统 0 引言 在现代的各种工业生产中 ,很多地方都需要用到温度控制系统。而智能化的控制系统成为一种发展的趋势。本文所阐述的就是一种基于89C51单片机的温度控制系统。本温控系统可应用于温度范围30℃到96℃。 1 设计任务、要求和技术指标 1.1任务 设计并制作一水温自动控制系统,可以在一定范围(30℃到96℃)内自动调节温度,使水温保持在一定的范围(30℃到96℃)内。 1.2要求 (1)利用模拟温度传感器检测温度,要求检测电路尽可能简单。 (2)当液位低于某一值时,停止加热。 (3)用AD转换器把采集到的模拟温度值送入单片机。 (4)无竞争-冒险,无抖动。 1.3技术指标 (1)温度显示误差不超过1℃。 (2)温度显示范围为0℃—99℃。 (3)程序部分用PID算法实现温度自动控制。 (4)检测信号为电压信号。 2 方案分析与论证 2.1主控系统分析与论证 根据设计要求和所学的专业知识,采用AT89C51为本系统的核心控制器件。AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器。其引脚图如图1所示。 2.2显示系统分析与论证 显示模块主要用于显示时间,由于显示范围为0~99℃,因此可采用两个共阴的数码管作为显示元件。在显示驱动电路中拟订了两种设计方案: 方案一:采用静态显示的方案 采用三片移位寄存器74LS164作为显示电路,其优点在于占用主控系统的I/O口少,编程简单且静态显示的内容无闪烁,但电路消耗的电流较大。 方案二:采用动态显示的方案 由单片机的I/O口直接带数码管实现动态显示,占用资源少,动态控制节省了驱动芯片的成本,节省了电 ,但编程比较复杂,亮度不如静态的好。 由于对电路的功耗要求不大,因此就在尽量节省I/O口线的前提下选用方案一的静态显示。

基于51单片机蓝牙模块传输数据毕业设计作品

基于51单片机的蓝牙模块数据传输设计(修订版) 摘要 本设计以STC89C52单片机为控制核心。经蓝牙模块实现无线连接,发送数据和接收数据,通过LCD1602显示接收的数据和编辑发送的数据,两个单片机通过内部程序实现实时接收、发送和显示,从而完成相关要求。 1方案设定 1-1电路设计框图 图4-1 注:由于STC89C52芯片串口寄存器的容量限制,每次收发只能一个字节。 1-2功能叙述 本作品通过HC-05主从机一体蓝牙模块实现与带蓝牙的设备先通过OPP蓝牙协议来实现配对连接,实现连接配对可通过电路板上的数字按键来实现输入,经

STC89C52单片机处理后通过HC-05蓝牙无线传送到另一方单片机上,通过STC89C52单片机处理后可在LCD1602液晶显示所接受到的数据! 1-3使用说明 在接通电源前,先把蓝牙模块插到单片机上,紧接着启动电源。观察蓝牙模块的指示灯,等待两个单片机之间的连接匹配,待指示灯出现双闪后就匹配连接成功。接下来可根据自己想要发送数据在单片机的按键区域(0~9)按下,按下后显示屏便出现你所要发送的数据,确认无误之后就按下单片机上的发送按钮即马上发送到另一方单片机上(两个单片机可以互相发送)!

2系统硬件设计 2-1主控制模块 图6-1

2-2蓝牙收发模块 图8-1 2-3液晶显示模块 图9-1 LCD1602资料: 1602采用标准的16脚接口,其中:

第1脚:GND为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳 变时执行指令。 第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电 源。 15脚背光正极。 16脚背光负极。 特性: 3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM 内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM特征应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。操作控制 注:关于E=H脉冲——开始时初始化E为0,然后置E为1。 2-4矩阵键盘模块

51单片机按键控制数码管程序

#define uint unsigned int #define uchar unsigned char uchar c; sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4; sbit p15=P1^5; sbit p16=P1^6; sbit p17=P1^7; void delay(uint z); int b[]={0,1,2,3,4,5,6,7};//设置每一位显示的数字 unsigned char code Tab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳极数码管 int a[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void main() { EA=1; EX0=1; IT0=1; P1=0xff; while(1) { for(c=0;c<8;c++)//数码管扫描显示

P2=a[c]; P0=Tab[b[c]]; delay (1); } } } void delay(uint z) { uint a,b; for(a=z;a>0;a--) for(b=110;b>0;b--); } int_0()interrupt 0 { EA=0; if(p10==0) b[0]=(b[0]+1)%10; if(p11==0) b[1]=(b[1]+1)%10; if(p12==0) b[2]=(b[2]+1)%10; if(p13==0) b[3]=(b[3]+1)%10; if(p14==0) b[4]=(b[4]+1)%10; if(p15==0) b[5]=(b[5]+1)%10; if(p16==0) b[6]=(b[6]+1)%10; if(p17==0) b[7]=(b[7]+1)%10;

基于51单片机的交通灯控制系统设计

目录 一引言 (2) 二概要设计 (2) 2.1 设计思路 (2) 2.2总体设计框图 (2) 三硬件设计 (3) 3.1LED循环电路设计 (3) 3.1.1 89cs51单片机概述 (3) 3.1.2 LED循环说明 (5) 3.2 倒计时显示电路 (5) 3.2.1 74LS164芯片 (5) 3.2.2 共阴极数码显示管 (6) 3.2.3 倒计时电路 (6) 3.2.4 急通车电路 (7) 四软件按设计 (7) 4.1 程序流程图: (7) 4.2 LED红绿灯显示 (8) 4.3倒计时显示 (9) 4.4 急通车控制 (9) 4.5程序代码 (9) 五总结 (9) 参考文献 (9) 附录一: (9) 附录二: (10)

基于51单片机的交通灯控制系统设计 摘要:在日常生活中,交通信号灯的使用,市交通得以有效管理,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。交通灯控制系统由80C51单片机、键盘、LED 显示、交通灯延时组成。系统除具有基本交通灯功能外,还具有时间设置、LED信息显示功能,市交通实现有效控制。 关键词:交通灯,单片机,自动控制 一引言 当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这个技术在19世纪就已经出现了。 1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械般手势信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消! 电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。 信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯时通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非两一种标志禁止某一种转向。左右转弯车辆必需让合法的正在路口内行驶的车辆和过人行横线的行人优先通行。红灯是禁行信号灯,面对红灯的车辆必需在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口! 二概要设计 2.1 设计思路 利用单片机实现交通灯的控制,该任务分以下几个方面: a 实现红、绿、黄灯的循环控制。要实现此功能需要表示三种不同颜色的LED灯分别接在P1个管脚,用软件实现。 b 用数码管显示倒计时。可以利用动态显示或静态显示,串行并出或者并行并出实现。 C 实现急通车。这需要人工实现,编程时利用到中断才能带到目的,只要有按钮按下,那么四个方向全部显示红灯,禁止以诶车辆通行。当情况解除,让时间回到只能隔断处继续进行。 2.2总体设计框图 见图一:

基于51单片机的蓝牙遥控小车

基于51单片机的蓝牙遥控小车

————————————————————————————————作者:————————————————————————————————日期:

单片机大作业 “基于单片机的蓝牙遥控小车” 姓名: 班级:通信工程卓越2014-1 学号:

在班编号:

基于单片机的蓝牙遥控小车 目录 第一章绪论1? 1.1 研究背景和意义.................................................................... 1第二章系统框架及软硬件结构设计 . (2) 2.1 系统要求2? 2.2系统整体算法流程2? 2.3 总体任务设计 (3) 2.4 整体硬件结构设计 (4) 2.5整体软件结构设计4? 第三章模块的详细设计 ........................................ 错误!未定义书签。 3.1 L293D电机驱动模块 (5) 3.1.1模块介绍?5 3.1.2 PWM脉冲控制原理?6 3.1.3 脉冲控制代码6? 3.2HC05蓝牙模块 (7) 3.2.1 模块简介?7 3.2.2蓝牙串口程序说明 (8)

3.2.3 模块引脚说明8? 3.3 USB转TTL模块9? 第四章系统功能设计与实现 (11) 4.1 安卓手机蓝牙遥控的设计与实现...................................... 11 4.1.1 设计基本思路11? 4.1.2 遥控任务分配1?1 4.2.3 蓝牙遥控操作流程 ............. 错误!未定义书签。第五章软硬件调试14? 5.1 硬件调试......................................................................... 14 5.2 软件调试?14

第13讲51单片机按键电路

标题:键盘接口电路 教学目标与要求: 1.键盘去抖动和连接、控制方式 2.独立式按键及其接口电路 3.矩阵式键盘及其接口电路 授课时数:2 教学重点:.矩阵式键盘及其接口电路 教学内容及过程: 一、键盘接口概述 1、按键开关去抖动问题 机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图9-11所示,抖动时间的长短与开关的机械特性有关,一般为5 10 ms 在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路。图9-12是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。 软件上采取的措施是:在检测到有按键按下时,执行一个10 ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。同理,在检测到该键释放后,也应采用相同的步 骤进行确认,从而可消除抖动的影响。

2.编制键盘程序 一个完善的键盘控制程序应具备以下功能: (1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。 (2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。 (3) 准确输出按键值(或键号),以满足跳转指令要求。 二、独立式按键 单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。 1. 独立式按键结构 独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图7.4所示。 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。 2.矩阵式键盘 I/O端线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线发生短路。特点: ①占用I/O端线较少; ②软件结构教复杂。 适用于按键较多的场合。 3.键盘扫描控制方式 ⑴程序控制扫描方式 键处理程序固定在主程序的某个程序段。 特点:对CPU工作影响小,但应考虑键盘处理程序的运行间隔周期不能太长,否则会影响对键输入响应的及时性。 ⑵定时控制扫描方式 利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。 特点:与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。 ⑶中断控制方式 中断控制方式是利用外部中断源,响应键输入信号。 特点:克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。 三、独立式按键及其接口电路 1、按键直接与I/O口连接

51单片机按键控制花样灯

51单片机按键控制花样灯 时间:2018-09-10 13:50:11 来源:51hei 作者: /**************************************************** * 本程序实现用按键控制花样灯。 * * 当K1按下时,灯从0xfe向左跑一遍; * * 当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置; * * 当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。 * * 当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。 * * 当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。 * ******************************************************/ ************************************************* 连接方法:P0接独立按键JP5。P2接LED灯接口JP1 * ***********************************************************/ #include //头文件,函数声明 #include //定义按键所在位 sbit K1=P0^0。 sbit K2=P0^1。 sbit K3=P0^2。 sbit K4=P0^3。 sbit K5=P0^4。 unsigned char led。 unsigned char j。 void delayms(unsigned char ms> // 1ms标准延时 { while(ms--> { for(j=0。j<110。j++>。 //还是无法设置比较标准的延时,如1S等;所以应该用定时器延时才最准确 } } void main(> { //P2=led。 unsigned int i。

基于51单片机的温度控制系统的设计

基于单片机的温度控制系统设计 1.设计要求 要求设计一个温度测量系统,在超过限制值的时候能进行声光报警。具体设计要求如下: ①数码管或液晶显示屏显示室内当前的温度; ②在不超过最高温度的情况下,能够通过按键设置想要的温度并显示;设有四个按键,分别是设置键、加1键、减1键和启动/复位键; ③DS18B20温度采集; ④超过设置值的±5℃时发出超限报警,采用声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。 2.方案论证 根据设计要求,本次设计是基于单片机的课程设计,由于实现功能比较简单,我们学习中接触到的51系列单片机完全可以实现上述功能,因此可以选用AT89C51单片机。温度采集直接可以用设计要求中所要求的DS18B20。报警和指示模块中,可以选用3种不同颜色的LED灯作为指示灯,报警鸣笛采用蜂鸣器。显示模块有两种方案可供选择。 方案一:使用LED数码管显示采集温度和设定温度; 方案二:使用LCD液晶显示屏来显示采集温度和设定温度。 LED数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。LCD显示屏可识别性较好,背光亮度可调,而且比LED 数码管显示更多字符,但是编程要求比LED数码管要高。综合考虑之后,我选用了LCD显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒值设定时同样可以采集并显示当前温度,可以直观的看到实际温度与警戒温度的对比。LCD 显示模块可以选用RT1602C。

3.硬件设计 根据设计要求,硬件系统主要包含6个部分,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD 显示模块、报警与指示模块。其相互联系如下图1所示: 图1 硬件电路设计框图 单片机时钟电路 形成单片机时钟信号的方式有内部时钟方式和外部时钟方式。本次设计采用内部时钟方式,如图2所示。 单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为此放大器的输入端和输出端,其频率范围为~12MHz ,经由片外晶体振荡器或陶瓷振荡器与两个匹配电容一 起形成了一个自激振荡电路,为单片机提供时钟源。 复位电路 复位是单片机的初始化操作,其作用是使CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作,以防止电源系统不稳定造成CPU 工作不正常。在系统中,有时会出现工作不正常的情况,为了从异常状态中恢复,同时也为了系统调试方便,需要设计一个复位电路。 单片机的复位电路有上电复位和按键复位两种形式,因为本次设计要求需要有启动/复位键,因此本次设计采用按键复位,如图3。复位电路主要完成系统 图2 单片机内部时钟方式电路 图3 单片机按键复位电路

51单片机矩阵键盘程序

/*风清云扬*/ # include #define uchar unsigned char #define uint unsigned int void delay(uint i) { uchar x,j; for(j=0;j

} else if(temp0==0x0b) { switch (temp1) { case 0xe0: num=12;break; case 0xd0: num=11;break; case 0xb0: num=10;break; case 0x70: num=9;break; default:num=0;break; } } else if(temp0==0x07) { switch (temp1) { case 0xe0: num=16;break; case 0xd0: num=15;break; case 0xb0: num=14;break; case 0x70: num=13;break; default:num=0;break; } } } } return num; } void main() { char num; while(1) { num=key_scan(); P2=num/10; P3=num%10; } }

相关文档
最新文档