单片机听课笔记1-8课-(金沙滩2014年更新)

上传人:泽*** 文档编号:69909126 上传时间:2022-04-06 格式:DOC 页数:56 大小:585KB
返回 下载 相关 举报
单片机听课笔记1-8课-(金沙滩2014年更新)_第1页
第1页 / 共56页
单片机听课笔记1-8课-(金沙滩2014年更新)_第2页
第2页 / 共56页
单片机听课笔记1-8课-(金沙滩2014年更新)_第3页
第3页 / 共56页
点击查看更多>>
资源描述
单片机听课笔记 1-8 课-( 金沙滩2014 年更新 )单片机听课笔记1-8 课-金沙滩工作室 2014 年更新Lesson 1:1、 用公司用的单片机 / 视频用的单片机2、 书是用来查的。3、 单片机方面不怎么需要软件仿真4、 KEIL 软件安装(keil c51)30 分钟 -35 分钟双击 next next 默认路径 next 1,2,3 ,email格式 next 自动安装去掉三个选项的finish。桌面上出现 KEIL 快捷方式。5、 文字大小,文字颜色的设定:edit configurationcolour&font: editorc files只需要修改 text,textselection,number,keyword,string即可。6、 下载软件stc-isp-v480.se win7系统第一次打开 , 右键,以管理员身份运行一次。7、 三傻大闹好莱坞 :追求卓越,成功就会在不经意间追上你。Lesson2:1、51 单片机:兼容 intel的 MCS-51体系架构的一系列单片机2、STC89C52RC-学习板上的第一个单片机。3、单片机最小系统:电源电路、晶振电路( 20PF 起振电容,帮助晶振起振,并维持震荡信号的稳定) 、复位电路( 0.1uF, 18R, 4.7K)。4、单片机复位一般用三种:上电复位,手动复位,程序自动复位。5、单片机原理图引脚位置与封装图可以不一样。6、贴片发光二极管限流电阻的选用。7、sfr P0 = 0X80,告诉我们编程软件P0 在 0X80的位置上,查手册可得。8、打开 KEIL 软件 project new project 选择路径写工程名,不需写扩展名旧:选择单片机型号 NXPP89V51 copy,否新建文件 filenew保存给文件起名led.c 新:选择单片机型号 intel随便一个copy,是新建文件 file new保存给文件起名 led.c 9、#include 及函数名后不需要加分号。10、单片机编程是根据硬件编程,不同的板子,程序可能不一样。11、target 1 右边的 target options target 11.0592M, output creat hex 选项框选中,点击 ok, 编译,连接就可生成 hex 文件。12、hex 文件大小的看法:在编译连接之后, build output 对话框里看。Program size: data = 9.0 xdata = 0 code = 29表示:其中 data,xdata指 RAM,两项加起来就是内存的值:0+9=9 字节。code 指占程序存储空间的值:29 个字节。13、点亮小灯的程序# include sbit LED = P00; sbit ADDR0 = P10; sbit ADDR1 = P11; sbit ADDR2 = P12; sbit ADDR3 = P13; sbit ENLED = P14;void main()ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;LED = 0;while(1);14、安装 usb- 串口的驱动;查找 COM口。我的电脑设备管理器。选择单片机型号打开hex 文件选择使用的COM口波特率默认下次冷启动选择:与下载无关(STC89C52RC冷启动单片机)先点下载后上电。作业:3. 了解 KEIL 软件 的基本用法和单片机编程流程,能够独立完成编程下载等基本操作。Lesson 3 :硬件基础学习1、 电磁干扰 EMI, 电磁兼容 EMC2、 低频滤波电容:去除电源低频纹波,稳定电源作用。铝电解电容、钽电容(有色标的一端为正极,性能好) 、陶瓷电容。3、 高频滤波电容:对高频短路,可滤去高频干扰。(104 =0.1uF )4、 电容选取两个主要参数:耐压值、容值。5、 三极管的功能:开关控制(100IbIe ,则工作在饱和状态)、信号放大、电平转换。6、 三八译码器 : 74HC138地址输入端 c/b/a及 E3 使能端接 4.7K 电阻上拉。U ?ADD R0115ADD R1AY 0214ADD R2BY 1313CY 212Y 3114Y 410ENLE DE1Y 559ADD R3E2Y 667E3Y 774HC 13 8U ?218A 0B 0317A 1B 1416A 2B 2515A 3B 3614A 4B 4713A 5B 5812A 6B 6911A 7B 719E1D IR74 HC 2457、 双向缓冲器: 74HC245 DIR 为高, AB;输入端接 4.7K 上拉电阻。8、 保存过后的 c 文件,文件名旁边没有。作业:4、能够独立点亮开发板上的每一个小灯, 并且可以实现小灯亮和灭以及闪烁。Lesson 4 C语言基础以及流水灯实现1、进制2、C语言变量类型及范围Unsignedchar0-255signedchar-128 127Unsignedint0-65535signedint-32768-32767Unsignedlong0-4294967275signedlong-2147483648-2147483647Float -3.410-38 3.4 10-38double:C51里等同于 float能用一个字节的变量能完成的工作,不要用两个字节变量。3、C语言基本运算符+-*/%(取余)+-=!=4、for 语句的用法 ( 作延时,作循环运算 )一、 for( 表达式 1; 表达式 2; 表达式 3)(需要执行的语句)执行顺序:1,2,4,3, 2,4,3, 2,4,3二、 for(i= 0 ; i30000; i+)相当于执行语句为不执行。三、 for(;)相当于 while(1); 是用法一的特殊情况,5、while 语句的用法一、 while( 条件表达式)循环语句;6、函数名的类型,就是 return 值的类型。Void main() void 表示函数名,无返回值, int main (),返回值为整型。7、变量在使用之前,先定义。8、51 单片机延时常用方法:非精确延时: for(I = 0 ; i100; i+);I = 100; while(i-);精确延时:用定时器定时利用库函数 -nop-();9、肉眼分辨率: 20ms一下看不到闪烁; 50ms间隔能清楚看见亮灭。10、软件仿真: 先设置 target options target 11.0592M, debug选中 use simulator ok点击 start debug session图标,进入仿真界面。设置 断点 : 双击 ,若 设置 不了 target options C51level, 设置优化登记一般选 8。RST复位run全速运行。然后看时间情况。(50 分钟附近)11、程序一:小灯的闪烁(视频位置与笔记顺序不一致)# includesbit LED = P00;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main()unsigned int i = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;LED = 0;for(;)/while(1)LED = 0;for(i = 0; i20000; i+);LED = 1;for(i = 0; i20000; i+);12、程序二:流水灯程序( 法一 )# includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main()unsigned int i = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;while(1)P0 = 0XFE;for(i = 0; i30000; i+);P0 = 0XFD;for(i = 0; i30000; i+);P0 = 0XFB;for(i = 0; i30000; i+);P0 = 0XF7;for(i = 0; i30000; i+);P0 = 0XEF;for(i = 0; i30000; i+);P0 = 0XDF;for(i = 0; i30000; i+);P0 = 0XBF;for(i = 0; i30000; i+);P0 = 0X7F;for(i = 0; i30000; i+);13、移位指令( )、取反指令 () 。14、程序二:流水灯程序( 法二 )# includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main()unsigned char cnt = 0; unsigned int i = 0; ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;while(1)P0 = (0x01cnt+);for(i = 0; i= 8)cnt = 0;作业:4、独立完成流水灯右移操作。5、独立完成左移到头,接着右移,右移到头,接着左移的程序。Lesson 5定时器和数码管基础1、逻辑运算逻辑与: &逻辑或: |逻辑非:! 按位与:& 按位或: |按位取反: 按位异或: 0b11001100 |0b11110000等于 0b111111002、数字电路常用符号3、机器周期是定时器的计数周期, 打开定时器后, 每经过一个机器周期,定时器“存储寄存器”的值加 1。8 位定时器存储的值的范围:0-22516位定时器0-655354、标准 51 里有两个定时器: T0 和 T1 。5、定时器 / 计数器模式示意图。5、使用定时器的方法2一、设置 TMOD(模式寄存器 M1、M0位,常用模式自动重装) , 配置好工作模式 例如: TMOD = 1;1、模式二、设计数寄存器TH0 、TL0 的初值。例如: TH0= 0XB8;TL0 = 0X00; 定时 20ms TH0 = 0XB8; TL0 = 0X00;定时 1ms三、设 TCON(控制寄存器 TF 位,TR位) ,通过 TR0置 1 来让定时器开始计数 例如: TR0 = 1;四、判断 TCON寄存器的 TF0 位,检测定时器的溢出情况。计算计数寄存器初值的方法: 12*(65536-X)/11059200 = 20ms6、1s 闪烁一次的小灯程序#includesbit LED = P00;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main()unsigned char cnt = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;TMOD = 0x01;TH0 = 0XB8;TL0 = 0X00;TR0 = 1;while(1)if(TF0 = 1)TF0 = 0;TH0 = 0XB8;TL0 = 0X00;/定时 20mscnt+;if(cnt = 50)cnt = 0;LED = LED;7、数码管分 :位、段( A/B/C/D/E/F/G/DOP )两个概念8、第一个数码管显示“ 1”的程序#includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main()unsigned char cnt = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;P0 = 0XF9;while(1);9、 1 位数码管从 1-F( 每隔 1 秒加 1)#includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;unsigned char code ledchar = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void main()unsigned char cnt = 0;unsigned char sec = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;TMOD = 1;TH0 = 0XB8;TL0 = 0X00;TR0 = 1;while(1)if(TF0 = 1)TF0 = 0;TH0 = 0XB8;TL0 = 0X00;cnt+;if(cnt= 50)cnt = 0;P0 = ledcharsec;sec+;if(sec= 16)sec = 0;作业:1、 熟练掌握单片机定时器的原理和应用方法2、 通过研究定时器模式 1 的示意图,自己打开 STC89C52RC 手册的定时器部分,独立研究模式 0,模式 1,模式 2, 和模式 3 的示意图,锻炼研究示意图的能力。3、 使用定时器实现延时,完成左右移动的流水灯程序。4、 了解数码管的原理,掌握数码管的真值表计算方法。5、 编程实现数码管静态显示秒表的倒计时。Lesson 6中断与数码管动态显示1、 if语句的用法( 1) if ( 条件表达式 )语句 1; 只判断一次,只执行一次,然后执行下面的程序。(2) if ( 条件表达式 )语句 1;else语句 2;(3) if( 表达式 1) 语句 1;elseif(表达式 1) 语句 1; elseif( 表达式 1) 语句 1;else 语句 n 一旦有一个为真, 执行完相应语句后,跳出 if 语句。2、 switch 语句的用法法一:Switch( 表达式 )Case 常量表达式 1:语句 1;Case 常量表达式 2:语句 2;Case 常量表达式 n:语句 n; Default: 语句 n+1;法二:Switch(表达式 )Case 常量表达式 1:语句 1; break;Case 常量表达式 2:语句 2; break;Case 常量表达式 n:语句 n;break;Default:语句 n+1;break;3、动态显示 利用人肉眼的视觉暂留现象(余晖效应) 10ms 以内必须重新刷新同一个数码管。ENLED ADDR3 选中 ADDR2 ADDR1 ADDR0切换4、6 位显示的秒表程序( if 语句) #includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;unsigned char code ledchar = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;unsignedcharledbuff6=0xff,0xff,0xff,0xff,0xff,0xff;/ 初始值 0XFFvoid main()unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;ENLED = 0;ADDR3 = 1;TMOD = 0X01;TH0 = 0XFC;TL0 = 0X67;TR0 = 1;while(1)if(TF0 = 1)TF0 = 0;TH0 = 0XFC;TL0 = 0X67;cnt+;if(cnt=1000)cnt = 0;sec+;ledbuff0 = ledcharsec%10; ledbuff1 = ledcharsec/10%10; ledbuff2 = ledcharsec/100%10; ledbuff3 = ledcharsec/1000%10; ledbuff4 = ledcharsec/10000%10; ledbuff5 = ledcharsec/100000%10; /if(i = 0)ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i+; P0 =ledbuff0;else if (i = 1)ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i+; P0 =ledbuff1;else if (i = 2)ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i+; P0 =ledbuff2;else if (i = 3)ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i+; P0 =ledbuff3;else if (i = 4)ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i+; P0 =ledbuff4;else if (i = 5)ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i = 0; P0 =ledbuff5;5、6 位显示的秒表程序( switch 语句)#includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;unsigned char code ledchar = 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;unsignedcharledbuff6=0xff,0xff,0xff,0xff,0xff,0xff;/ 初始值0XFFvoid main()unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;ENLED = 0;ADDR3 = 1;TMOD = 0X01;TH0 = 0XFC;TL0 = 0X67;TR0 = 1;while(1)if(TF0 = 1)TF0 = 0;TH0 = 0XFC;TL0 = 0X67;cnt+;if(cnt=1000)cnt = 0;sec+;ledbuff0 = ledcharsec%10; ledbuff1 = ledcharsec/10%10; ledbuff2 = ledcharsec/100%10; ledbuff3 = ledcharsec/1000%10; ledbuff4 = ledcharsec/10000%10; ledbuff5 = ledcharsec/100000%10; /P0 = 0XFF;/消除鬼影操作。switch(i)case 0:ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i+; P0 = ledbuff0; break;case 1:ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i+; P0 = ledbuff1;break;case 2:ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i+; P0 = ledbuff2;break;case 3:ADDR2= 0; ADDR1= 1; ADDR0= 1; i+; P0 = ledbuff3;break;case 4:ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i+; P0 = ledbuff4;break;case 5:ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i = 0; P0 = ledbuff5;break;default:break;6、 使用中断实现秒表程序(中断)#includesbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;unsigned char code LedChar=0xC0, 0x99, 0x92, 0x82, 0xF8,0xF9, 0xA4, 0xB0,0x80,0x90,0x88,0x83,0xC6, 0xA1, 0x86, 0x8E;unsigned char LedBuff6=0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF;unsigned int cnt = 0;void main()unsigned long sec = 0;ENLED = 0;ADDR3 = 1;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x67;TR0 = 1;EA=1;ET0 = 1;while(1)if(cnt = 1000)cnt = 0;sec+;LedBuff0 = LedCharsec%10;LedBuff1 = LedCharsec/10%10; LedBuff2 = LedCharsec/100%10; LedBuff3 = LedCharsec/1000%10; LedBuff4 = LedCharsec/10000%10; LedBuff5 = LedCharsec/100000%10;unsigned char i = 0;void InterruptTimer0() interrupt 1TH0 = 0xFC;TL0 = 0x67;cnt+;P0 = 0xFF;/消隐switch(i)case0:ADDR2=0;ADDR1=0;ADDR0=0;i+;P0=LedBuff0;break;case1:ADDR2=0;ADDR1=0;ADDR0=1;i+;P0=LedBuff1;break;case2:ADDR2=0;ADDR1=1;ADDR0=0;i+;P0=LedBuff2;break;case3:ADDR2=0;ADDR1=1;ADDR0=1;i+;P0=LedBuff3;break;case4:ADDR2=1;ADDR1=0;ADDR0=0;i+;P0=LedBuff4;break;case5:ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff5;break;default:break;7、 数码管不亮的地方发暗,数码管鬼影怎么解决?秒表加1 时,显示抖动怎么解决?消除鬼影:见程序二上面黄色部分。显示抖动:使用中断消除。8、 中断优先级(固有优先级)中断中 断中断标志中 断中 断 向默认函数使 能优先名称位量地址编号位级0外 部IE0EX00x00031( 最中断高)1T0TF0ET00x000B22外 部IE1EX10x00133中断3T1TF1ET10x001B44UARTTI/RIES0x002355T2TF2/EXF2ET20x002B69、中断 58 分钟后。进入中断条件:第一打开中断、符合中断条件、中断入口正确。10、中断使能寄存器: IE 可位寻址。关注: EA、ET0位。11、中断向量地址:决定中断入口号x*8 +3 =中断向量地址。定时器 0:中断入口号 1;定时器 1,中断入口号 3。作业:3、 彻底理解中断的原理和应用方法,关闭教程自己把本章节程序编写完毕,下载实践。4、 尝试修改程序,只显示有效位5、 尝试写一个从 999999 开始倒计时的程序,通过改用定时器 T1 的中断来完成。Lesson 7变量进阶与 LED点阵(点阵部分需要完善)1、 变量的作用域(1)局部变量:只在函数内部使用的变量(2)全局变量:2、 全局变量的副作用:A,降低函数的独立性修改,对任何一个函数的修改,都可能影响其他函数。B,降低函数的通用性不利于函数重复调用C,降低程序的清晰度- 每个函数执行,都可能改变全局变量的值。D,全局变量永久占据内存。3、 原则:能用局部变量,就不用全局变量。全局变量和局部变量同名,在局部变量作用域范围内,局部变量有效。4、 变量的存储类别:自动变量:函数中的局部变量, 如不加 static 关键字修饰,都属于自动变量,也叫做动态变量。静态变量:所有全局函数都属于静态变量,局部变量如果加了 static 关键字修饰,也是静态变量。5、 点阵取模软件的用法A, 新建图像: 8*8 ,B, 模拟动画:放大格点值最大,画图,选中的点为灭,白色的为亮,C,修改图像;黑白反选,确定要显示的内容。D,取模方式: C51格式。E, 参数设置:其他选项选择横向取模+其他默认(选中:字节倒序(点阵第一行左侧 DB0),保留、任何时候都)F, 基本操作:保存图像,打开图像,便于下次操作。6、 显示汉字 : 需要至少 16*16 的显示屏。7、 动态显示:例如,I?u可以新建一个 8*40 行的点阵。(点阵显示部分重看之后待完善)8、 左右移动方法一, 图像侧过来,把板子侧过来就可以了。9、 左右移动方法二:二维数组。10、 Unsigned char a23 = 1,2,3,4,5,6;Lesson 8函数进阶与按键一、单片机最小系统解析1、电源: 5V、3.3V 两种;数字电路电源: 24V、12V、5V、3.3V 、2.5V 、1.8V 2、无源晶振(晶体):需接起振电容,不依赖电源电压,接好电路就工作;有源晶振(振荡器):需接电源,输出端直接接 XTAL1,依赖工作电压,适用高精度场合。3、复位电路上电复位:复位时间t = 1.2RC故:t大于两个机器周期约 2us,故能起到复位作用。手动复位:人手按下按键的时间一般 100ms以上,快的也有几十 ms,故满足复位条件。18 欧的电阻作用是放电时, K、R、C 形成闭合回路,消除干扰。软件复位。二、函数的调用1、例如:利用 voidsecondcount() voidledrefresh()函数优化秒表程序。2、静态变量只第一次有效。3、函数调用时,不加函数类型(无 void 等),加分号;函数调用之前,必须进行定义或声明;函数声明的时候必须加: 函数类型,函数的形参, 最后加一个分号。4、函数体顺序:函数声明 main() 子函数排序中断函数。5、实参,形参 27-32 分钟。三、独立式按键V CC+5RR4. 7 kMC U 的i/ o 口U 1 AQ ?k 1内部输出 12N PNN OT内部输入准双向I/O 口只有内部输出为高电平, MCU的 I0 口就为高电平,才能读键。故有 P2 = 0XF7;程序一:#include /用 K1-K4 控制 LED6-9 的亮灭sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;sbit LED9 = P07;sbit LED8 = P06;sbit LED7 = P05;sbit LED6 = P04;sbit KEY1 = P24;sbit KEY2 = P25;sbit KEY3 = P26;sbit KEY4 = P27;main()ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;P2 = 0XF7; /KEY1=4接高电平、 KEYOUT4接低电平while(1)LED9 = KEY1; / 把读的 KEY1的值赋给 LED9;LED8 = KEY2;LED7 = KEY3;LED6 = KEY4;( 法二)Main 程序#include#includekey.hmain()ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;P0 = 0Xff;KEYOUT1 = 0;while(1)P0 = (P24)|0xf0;头文件#ifndef _KEY_H_#define _KEY_H_sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;sbit KEY1 = P24;sbit KEY2 = P25;sbit KEY3 = P26;sbit KEY4 = P27;sbit KEYOUT1 = P23;sbit KEYOUT2 = P22;sbit KEYOUT3 = P21;sbit KEYOUT4 = P20;#endif程序二: K1、K2 控制数字加减的程序,防抖动#include #include key.hvoid delay()unsigned int i = 2000;while(i-);main()unsigned char n = 0;P0 = 0XFF;KEYOUT1 = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; /控制最右边数码管 DS1亮P0 = ledchar0;while(1)if(!KEY1) /相当于 if(KEY1 = 0)判断键是否按下delay();if(!KEY1)/再判断健是否按下if(n = 9)n = 0;elsen+;P0 = ledcharn;while(!KEY1);/等待按键 1 松开的语句。if(!KEY2)delay();if(!KEY2)if(n = 0)n = 9;elsen-;P0 = ledcharn;while(!KEY2);程序三、用小灯构成的5 位二进制数表示16 个按键,1-1,2-2,16-0;#include #include key.hvoid delay();main()ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;P0 = 0xFF;while(1)KEYOUT1 = 0;KEYOUT2 = 1;KEYOUT3 = 1;KEYOUT4 = 1;if(KEY1 = 0)delay();if(KEY1 = 0)P0 = 1;if(KEY2 = 0)delay();if(KEY2 = 0)P0 = 2;if(KEY3 = 0)delay();if(KEY3 = 0)P0 = 3;if(KEY4 = 0)delay();if(KEY4 = 0)P0 = 4;while(KEY1= 0)|(KEY2= 0)|(KEY3= 0)|(KEY4= 0);/ 第一行检测完KEYOUT1 = 1;KEYOUT2 = 0;KEYOUT3 = 1;KEYOUT4 = 1;if(KEY1 = 1)delay();if(KEY1 = 0)P0 = 5;if(KEY2 = 0)delay();if(KEY2 = 0)P0 = 6;if(KEY3 = 0)delay();if(KEY3 = 0)P0 = 7;if(KEY4 = 0)delay();if(KEY4 = 0)P0 = 8;while(KEY1 = 0)|(KEY2 = 0)|(KEY3 = 0)|(KEY4 = 0);/ 第二行检测完KEYOUT1 = 1;KEYOUT2 = 1;KEYOUT3 = 0;KEYOUT4 = 1;if(KEY1 = 1)delay();if(KEY1 = 0)P0 = 9;if(KEY2 = 0)delay();if(KEY2 = 0)P0 = 10;if(KEY3 = 0)delay();if(KEY3 = 0)P0 = 11;if(KEY4 = 0)delay();if(KEY4 = 0)P0 = 12;while(KEY1= 0)|(KEY2= 0)|(KEY3= 0)|(KEY4= 0); / 第三行检测完 KEYOUT1 = 1; KEYOUT2 = 1;KEYOUT3 = 1;KEYOUT4 = 0;if(KEY1 = 1)delay();if(KEY1 = 0)P0 = 13;if(KEY2 = 0)delay();if(KEY2 = 0)P0 = 14;if(KEY3 = 0)
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!