ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:20.59KB ,
资源ID:3730895      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3730895.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机.docx

1、单片机第1讲 C语言基础及发光二极管的点亮1.1 单片机C程序的基本组成部分#include /头文件sbit LED = P00; /引脚定义int main(void) /主函数,有且仅有一个 /初始化语句或函数 subfunctionN( Parameter1,) /子函数参数 while(1) /死循环 1.2 单片机C语言的关键词简介1.2.1 数据类型表1 数据类型及相关说明符号功能备注符号功能备注bit定义位变量0,1unsigned int整型16 bitsbit特殊位类型,位寻址0,1unsigned char字符型8 bitsfr特殊功能寄存器8位,1Bytelong长32

2、 bitsfr16特殊功能寄存器16位,2Byte1.2.2 运算符& 位与 | 位或 异或 取反;& | 条件判断的与或; n 左移位n,右移位n;1.5 发光二极管的点亮#include sbit LED=P00;int main(void)unsigned int n; while(1) LED=0; n=10000; while(n-); LED=1; n=10000; while(n-);第2讲 单片机中断系统及独立按键输入2.1 单片机中断系统介绍2.1.1 51单片机的中断源参考 8051中断源参考中断系统内部结构图2.1.1与单片机中断有关的寄存器名称说明MSBLSBTCON定

3、时器/计数器控制寄存器TF1TR1TF0TR0IE1IT1IE0IT0SCON串行中断控制寄存器SM0SM1SM2RENTB8RB8TIRIIE中断允许控制EAXET2ESET1EX1ET0EX0IP中断优先级XXPT2PSPT1PX1PT0PX0TMOD定时器模式 T1,T0GATEC/TM1M0GATEC/TM1M0TH,TLT1T02.2 单片机C语言中断系统编程2.2.1 与中断有关的关键字ORG 0000HLJMP MAINORG 000BHLJMP INT02BORG 0030HMAIN: MOVINT0: MOV RETI1 interrupt minterrupt是C51函数说

4、明中非常重要的一个修饰符,用它修饰过的函数就是中断中断函数,这时,C51自动为函数加上汇编代码中断程序头段和尾段,并填写好中断向量表中对应的表项。在实际程序开发中,使用中断函数是实现系统实时性、提高程序效率的重要手段。m的取值可以为031,0外部中断0;1定时器0;2外部中断1; 3定时器1;4串行中断。m*8+32 using nn指中断函数使用的工作寄存器组,51里面一般有4个(R0R7)寄存器,如果终端函数和别的程序用的不是同一个寄存器组则进入中断的时候就不会将寄存器组压入堆栈,返回时也不会弹出来。Void delay(unsigned int)Void Timer0(void) int

5、errupt 1 using 0 Delay(500);2.2.2 中断服务程序的语法规则中断服务程序的语法规则如下:函数的返回值 函数名(参数) interrupt m using n 函数体; 对中断程序而言,函数的返回值和参数必须为void。interrupt m中m的取值为031的常数,不允许用表达式,表示中断向量的编号。using n中n的取值为03的常数,不允许用表达式表示内部RAM中的工作寄存器。外部中断INT0:void intsvr0(void) interrupt 0 using 0定时/计数器T0:void timer0(void) interrupt 1 using 0

6、外部中断INT1:void intsvr1(void) interrupt 2 using 0定时/计数器T1:void timer1(void) interrupt 3 using 0串口中断: void serial0(void) interrupt 4 using 02.2.3 定时中断服务例程利用定时中断T0的方式1,让P0.0口的发光二极管亮1秒灭1,单片机晶振为12MHz。定时时间的计算一个机器周期为1us,1S=1us*106=20*5*104us=20*50ms,通过定时中断定时50ms,然后软件计数器计数20次即可。初值为216-5*104=65536-50000=15536

7、转化成十六进制为3CB0 TH0=3C,TL0=B0;GATA = 0;C/T = 0;M1M0 = 00;GATA = 0;C/T = 0;M1M0 = 01;TMOD=0X01ET0; EA;TR0;/=/ 定时器0操作实验/文件描述:对P0口外接的1个LED灯进行操作,使其亮1秒灭1秒/文件名: Time.c/硬件连接:LED0P0/作者: Sandy/时间: 2010.06.07/说明: 利用定时方式实现LED灯亮1秒灭1秒/备注: 单片机晶振12MHz/=#include #define Num 20Void INT_Initial(void);sbit LED = P00;unsi

8、gned char TimeNum=0; int main(void) INT_Initial(); while(1);Void INT_Initial(void) TMOD=0x01; /定时器0工作方式1 TH0=0x3C; /T0赋初值,定时50ms TL0=0XB0; ET0=1; /开定时器0中断 EA=1; /开总中断 TR0=1; /开始计数void timer0(void) interrupt 1 using 0 /定时器0中断 TH0=0x3C; /T0赋初值,定时50ms TL0=0XB0; TimeNum +; if(!(TimeNumNum) /判断是否计时到0.5秒

9、TimeNum=0; LED = 1; 2.4 独立按键的检测程序对于独立按键去抖动的方法一般有软件和硬件两种方式,在此只介绍软件方法。/=/ 独立按键操作实验/文件描述:检测独立按键/文件名: KEY.c/硬件连接:DIG1DIG4-P1.0P1.3,KEY1KEY4-P3.3P3.6/作者: Sandy/时间: 2010.06.07/说明: 独立按键,并且利用数码管显示按键值/备注: 单片机晶振12MHz/= #include unsigned char Key=0; /Key全局变量unsigned char display =0xc0,0xf9,0xa4,0xb0,0x99,0x92,

10、0x82,0xf8,0x80,0x90; /09十个数字的LED编码/=/函数名称:void delay(unsigned int N)/函数功能:延时程序/入口参数:N 延时时间的长短/出口参数:无/=void delay(unsigned int N) while(N-) ; /=/函数名称:void key_scan(void)/函数功能:键盘扫描程序/入口参数:无/出口参数:无/=void key_scan(void) 0111 1000 P3 = 0110 0000 0111 0000 if(P3&0x78)!=0x78) delay(1000); /去抖延时 if(P3&0x78)

11、!=0x78) while(P3&0x78)!=0x78) ; Key = P3&0x78; /=/函数名称:int main(void) /函数功能:主程序/入口参数:无/出口参数:无/=int main(void) P1 = 0x00; /4个数码管选通/ P0 = 0x00; while(1) key_scan(); switch(Key) case 0x70: /K1的键值,显示1 P0=display1; break; case 0x68: /K2的键值,显示2 P0=display2; break; case 0x58: /K3的键值,显示3 P0=display3; break;

12、 case 0x38: /K4的键值,显示4 P0=display4; break; default: P0=display0; /无按键时,显示0 break; 2.5 外中断和独立按键程序/=/ 单片机外部中断操作实验/文件描述:对外部中断进行操作,使外部中断控制LED的亮灭/文件名: INT1.c/硬件连接:KEY1-P3.3/作者: Sandy/时间: 2010.06.07/说明: 程序运行后,按一次P3.3外接的K1键,则数码管的状态改变一次/备注: 单片机晶振12MHz/= #include /51芯片管脚定义头文件 #include /内部包含延时函数 _nop_(); unsi

13、gned char Num = 0;unsigned char display =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09十个数字的LED编码int main(void) IT1=1; /负跳变方式产生中断 EX1=1; /开外部中断1 EA=1; /开总中断 P1 = 0x00; P0 = display0; while(1) _nop_(); void int1() interrupt 2 using 0 /外部中断1 Num+; P0 = displayNum; /P0状态标志 Num %= 9; 第3讲 数码管相关编3

14、.1 数码管硬件电路3.2 单个数码管显示3.3.1 延时方式/=/ 单个数码管显示程序/文件描述:对数码管进行操作,使单个数码管从09循环显示/文件名: LEDS.c/硬件连接:无/作者: Sandy/时间: 2010.06.09/说明: 无/备注: 无/=#include /51芯片管脚定义头文件 unsigned char display =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09十个数字的LED编码sbit DIG1 = P10; /定于数码管的片选 void delay(unsigned int N) /延时程序 w

15、hile(N-); void main() unsigned char i; P0=0xff; /端口初始化 P1=0xff; DIG1=0; /数码管片选有效 while(1) / for(i=0;i10;i+) / P0=displayi; i+; i %= 10; delay(30000); /80ms / 3.3.1 定时方式/=/ 数码管操作实验/文件描述:对P0口外接的数码进行操作/文件名: LEDS.c/硬件连接:P0/作者: Sandy/时间: 2010.06.09/说明: 利用定时方式单个数码管显示,10MS点亮一次/备注: 单片机晶振12MHz/=#include #def

16、ine Num 100sbit DIG1 = P10;unsigned char TimeNum=0;Show_Num = 0;unsigned char display =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09十个数字的LED编码int main(void) TMOD=0x01; /定时器0工作方式1 TH0=0XD8; /T0赋初值,定时50ms TL0=0XF0; ET0=1; /开定时器0中断 EA=1; /开总中断 TR0=1; /开始计数 DIG1 = 0; while(1);void timer0(void)

17、interrupt 1 using 0 /定时器0中断 TH0=0XD8; /T0赋初值,定时10ms TL0=0XF0; TimeNum +; if(!(TimeNumNum) /判断是否计时到0.5秒 TimeNum=0; Show_Num+; Show_Num %= 10; P0 = displayShow_Num; 3.3 数码管动态扫描/=/ 数码管操作实验/文件描述:对P0口外接的数码进行操作/文件名: LEDS.c/硬件连接:P0/作者: Sandy/时间: 2010.06.09/说明: 利用定时方式单个数码管显示,10MS点亮一次/备注: 单片机晶振12MHz/=#includ

18、e #define Num 20sbit DIG1 = P10;sbit DIG2 = P11;sbit DIG3 = P12;sbit DIG4 = P13;unsigned char TimeNum=0,Time=0,Hour = 0,Min = 0;unsigned int Show_Num = 0;unsigned char Data = 0,0,0,0;unsigned char display =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09十个数字的LED编码int main(void) TMOD=0x01; /定时器

19、0工作方式1 TH0=0X3C; /T0赋初值,定时50ms TL0=0XB0; TH1=0X1E; /T1赋初值,定时3ms TL1=0X0C; ET0=1; /开定时器0中断 ET1=1; /开定时器1中断 TR0=1; /开始计数 TR1=1; /开始计数 EA=1; /开总中断 DIG1 = 0; while(1) ; void timer0(void) interrupt 1 using 0 /定时器0中断 TH0=0X3C; /T0赋初值,定时10ms TL0=0XB0; TimeNum +; if(!(TimeNumNum) /判断是否计时到0.5秒 TimeNum=0; Sho

20、w_Num+; Show_Num %= 10000; Data0 = Show_Num / 1000; Data1 = (Show_Num % 1000)/100; Data2 = (Show_Num %100)/10; Data3 = Show_Num % 10; void timer1(void) interrupt 3 using 0 /定时器0中断 TH1=0X1E; /T0赋初值,定时10ms TL1=0X0C; switch(Time) case 0: DIG4 = 1; DIG1 = 0; break; case 1: DIG1 = 1; DIG2 = 0; break; cas

21、e 2: DIG2 = 1; DIG3 = 0; break; case 3: DIG3 = 1; DIG4 = 0; break; P0 = displayDataTime; Time+; Time %= 4;3.4 基于单片机定时器的数字钟/=/ 数码管操作实验/文件描述:对P0口外接的数码进行操作/文件名: LEDS.c/硬件连接:P0/作者: Sandy/时间: 2010.06.09/说明: 利用定时方式单个数码管显示,10MS点亮一次/备注: 单片机晶振12MHz/=#include #define Num 1200void delay(unsigned int N);void ke

22、y_scan(void);sbit DIG1 = P10;sbit DIG2 = P11;sbit DIG3 = P12;sbit DIG4 = P13;sbit Dot = P07;bit Dot_t;unsigned char Time=0,Key,Hour = 8,Min = 40;unsigned int TimeNum=0,Show_Num = 0;unsigned char Data = 0,0,0,0;unsigned char display =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09十个数字的LED编码int

23、 main(void) TMOD=0x01; /定时器0工作方式1 TH0=0X3C; /T0赋初值,定时50ms TL0=0XB0; TH1=0X0C; /T1赋初值,定时3ms TL1=0X78; ET0=1; /开定时器0中断 ET1=1; /开定时器1中断 TR0=1; /开始计数 TR1=1; /开始计数 EA=1; /开总中断 Data0 = Hour / 10; Data1 = Hour % 10; Data2 = Min / 10; Data3 = Min % 10; while(1) / key_scan(); switch(Key) case 0x70: /K1的键值,显示1 Min+; Min %= 60; break; case 0x68: /K2的键值,显示2 if(Min) Min-;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1