收藏 分享(赏)

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

上传人:精品资料 文档编号:9946420 上传时间:2019-09-22 格式:DOC 页数:30 大小:130.50KB
下载 相关 举报
单片机听课笔记1-8课 (金沙滩2014年更新).doc_第1页
第1页 / 共30页
单片机听课笔记1-8课 (金沙滩2014年更新).doc_第2页
第2页 / 共30页
单片机听课笔记1-8课 (金沙滩2014年更新).doc_第3页
第3页 / 共30页
单片机听课笔记1-8课 (金沙滩2014年更新).doc_第4页
第4页 / 共30页
单片机听课笔记1-8课 (金沙滩2014年更新).doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、单片机听课笔记 1-8 课- 金沙滩工作室 2014 年更新Lesson 1:1、 用公司用的单片机/视频用的单片机2、 书是用来查的。3、 单片机方面不怎么需要软件仿真4、 KEIL 软件安装 (keil c51)30 分钟-35 分钟双击nextnext默认路径next1,2,3,email 格式 next自动安装去掉三个选项的finish 。桌面上出现 KEIL 快捷方式。5、 文字大小,文字颜色的设定:editconfigurationcoloursbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sb

2、it 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、低频纹波,稳定电源作用。铝电解电容、钽电容(有色标的一端为正极,性能好) 、陶瓷电容。3、 高频滤波电容:对高频短路,可滤去高频干扰。 (104 = 0.1uF)4、 电容选取两个主要参数:耐压值、容值。5、 三极管的功能:开关控制(100IbIe,则工作在饱和状态) 、信号放大、电平转换。6、 三八译码器: 74HC138 地址输入端 c/b/a 及 E3 使能端接 4.7K 电阻上拉。A1 B2C3E14 E25E36Y0 15Y1 14Y2 13Y3 12Y4 11Y5 10Y6 9Y7 7U?74HC138ENLEDADDR3ADDR0ADDR1ADDR27、 双向缓冲器:74HC24

4、5 DIR 为高,AB;输入端接 4.7K 上拉电阻。8、 保存过后的 c 文件,文件名旁边没有。作业:4、能够独立点亮开发板上的每一个小灯,并且可以实现小灯亮和灭以及闪烁。Lesson 4 C 语言基础以及流水灯实现1、进制2、 C 语言变量类型及范围Unsigned char 0-255 signed char -128127Unsigned int 0-65535 signed int -32768-32767Unsigned long 0-4294967275 signed long -2147483648-2147483647Float -3.410-383.410-38 doubl

5、e:C51 里等同于 float能用一个字节的变量能完成的工作,不要用两个字节变量。3、 C 语言基本运算符+ - * / %(取余) + - = = !=4、 for 语句的用法(作延时,作循环运算 )A02 A13A24 A35A46 A57A68 A79B0 18B1 17B2 16B3 15B4 14B5 13B6 12B7 11E19 DIR1U?74HC245一、for(表达式 1; 表达式 2; 表达式 3)(需要执行的语句) 执行顺序:1,2,4,3, 2,4,3, 2,4,3二、for(i= 0 ; isbit LED = P00;sbit ADDR0 = P10;sbit

6、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; isbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;void main()unsigned int i

7、= 0;ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;while(1)P0 = 0XFE;for(i = 0; i) 、取反指令()。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 =

8、 1; ADDR0 = 0;while(1)P0 = (0x01= 8)cnt = 0;作业:4、独立完成流水灯右移操作。5、独立完成左移到头,接着右移,右移到头,接着左移的程序。Lesson 5 定时器和数码管基础1、逻辑运算 逻辑与:二、设计数寄存器 TH0 、TL0 的初值。例如:TH0 = 0XB8; TL0 = 0X00;定时 20ms TH0 = 0XB8; TL0 = 0X00; 定时1ms三、设 TCON(控制寄存器 TF 位,TR 位),通过 TR0 置 1 来让定时器开始计数 例如:TR0 = 1;四、判断 TCON 寄存器的 TF0 位,检测定时器的溢出情况。计算计数寄存

9、器初值的方法: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

10、 = 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;

11、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 ch

12、ar 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,模

13、式 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、 swi

14、tch 语句的用法法一: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 位显示的秒表程序(

15、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;unsigned char ledbuff6 = 0xff,0xff,0xff,0xff,0xff,0xff; /初始值 0XFFvoid main()unsigned int cnt

16、 = 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;

17、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

18、= 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 ledcha

19、r = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;unsigned char ledbuff6 = 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

20、= 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; ADD

21、R0 = 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:ADDR

22、2 = 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, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

23、;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/

24、100%10;LedBuff3 = LedCharsec/1000%10;LedBuff4 = LedCharsec/10000%10;LedBuff5 = LedCharsec/100000%10; unsigned char i = 0; void InterruptTimer0() interrupt 1 TH0 = 0xFC;TL0 = 0x67;cnt+;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+

25、; 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;7、 数码管不亮的地方发暗,数码管鬼影怎么解决?秒表加 1 时,显示抖动怎

26、么解决?消除鬼影:见程序二上面黄色部分。显示抖动:使用中断消除。8、 中断优先级(固有优先级)中断函数编号 中断名称 中断标志位 中断使能位 中断向量地址 默认优先级0 外部中断 IE0 EX0 0x0003 1(最高)1 T0 TF0 ET0 0x000B 22 外部中断 IE1 EX1 0x0013 33 T1 TF1 ET1 0x001B 44 UART TI/RI ES 0x0023 55 T2 TF2/EXF2 ET2 0x002B 69、中断 58 分钟后。 进入中断条件:第一打开中断、符合中断条件 、中断入口正确。10、 中断使能寄存器:IE 可位寻址。关注:EA、ET0 位。1

27、1、 中断向量地址:决定中断入口号 x*8 +3 = 中断向量地址。 定时器 0:中断入口号 1;定时器 1,中断入口号 3。作业:3、 彻底理解中断的原理和应用方法,关闭教程自己把本章节程序编写完毕,下载实践。4、 尝试修改程序,只显示有效位5、 尝试写一个从 999999 开始倒计时的程序,通过改用定时器 T1 的中断来完成。Lesson 7 变量进阶与 LED 点阵(点阵部分需要完善)1、 变量的作用域 (1 ) 局部变量:只在函数内部使用的变量(2 ) 全局变量:2、 全局变量的副作用:A, 降低函数的独立性修改,对任何一个函数的修改,都可能影响其他函数。B, 降低函数的通用性不利于函

28、数重复调用C, 降低程序的清晰度-每个函数执行,都可能改变全局变量的值。D, 全局变量永久占据内存。3、 原则:能用局部变量,就不用全局变量。全局变量和局部变量同名,在局部变量作用域范围内,局部变量有效。4、 变量的存储类别:自动变量:函数中的局部变量,如不加 static 关键字修饰,都属于自动变量,也叫做动态变量。静态变量:所有全局函数都属于静态变量,局部变量如果加了 static 关键字修饰,也是静态变量。5、 点阵取模软件的用法A,新建图像:8*8,B,模拟动画:放大格点值最大,画图,选中的点为灭,白色的为亮,C,修改图像;黑白反选,确定要显示的内容。D,取模方式:C51 格式。E,参

29、数设置: 其他选项 选择横向取模+ 其他默认(选中:字节倒序(点阵第一行左侧 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

30、、1.8V2、无源晶振(晶体):需接起振电容,不依赖电源电压,接好电路就工作;有源晶振(振荡器):需接电源,输出端直接接 XTAL1,依赖工作电压,适用高精度场合。3、复位电路上电复位:复位时间 t = 1.2RC 故:t = 1.2*4.7K* 0.1*0.000001F = 564us, 大于两个机器周期约 2us,故能起到复位作用。手动复位:人手按下按键的时间一般 100ms 以上,快的也有几十 ms,故满足复位条件。18 欧的电阻作用是放电时,K、R、C 形成闭合回路,消除干扰。软件复位。二、函数的调用1、例如:利用 void secondcount() void ledrefresh

31、()函数优化秒表程序。2、静态变量只第一次有效。3、函数调用时,不加函数类型(无 void 等) ,加分号;函数调用之前,必须进行定义或声明;函数声明的时候必须加:函数类型,函数的形参,最后加一个分号。4、函数体顺序:函数声明main()子函数排序中断函数。5、实参,形参 27-32 分钟。三、独立式按键1 2U1ANOTQ?NPNR R4.7kVCC +5k1MCU入i/o入入入入入入入入I/O入入入入入只有内部输出为高电平,MCU 的 I0 口就为高电平,才能读键。故有 P2 = 0XF7;程序一:#include / 用 K1-K4 控制 LED6-9 的亮灭sbit ADDR0 = P

32、10;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(

33、1)LED9 = KEY1; /把读的 KEY1 的值赋给 LED9;LED8 = KEY2;LED7 = KEY3;LED6 = KEY4;(法二)Main 程序#include#include“key.h“main()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

34、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.h“void delay()unsigned int i = 2000;while(i-);main()unsigned char n = 0;P0 = 0X

35、FF;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 #include “key.h“void delay();main()EN

36、LED = 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)

37、|(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 =

38、 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 =

39、 0;if(KEY1 = 1)delay();if(KEY1 = 0)P0 = 13;if(KEY2 = 0)delay();if(KEY2 = 0)P0 = 14;if(KEY3 = 0)delay();if(KEY3 = 0)P0 = 15;if(KEY4 = 0)delay();if(KEY4 = 0)P0 = 16;while(KEY1 = 0)|(KEY2 = 0)|(KEY3 = 0)|(KEY4 = 0); /第四行检测完void delay()unsigned int i = 1000;while(i-);8 课未完待续Lesson 12 指针与 LCD1602 初识57 分钟

40、后为 1602程序一:用显示字符的形式在 LCD 上显示 字符串与数字#includesbit RS = P10;sbit RW = P11;sbit EN = P15;sbit BUSY = P07;/等待繁忙标志void wait()P0 = 0XFF;doRS = 0;RW = 1;EN = 0;EN = 1;while(BUSY = 1);EN = 0;void w_dat(unsigned char dat)wait();EN = 0;P0 = dat;RS = 1;RW = 0;EN = 1;EN = 0;void w_cmd(unsigned char cmd)wait();EN

41、 = 0;P0 = cmd;RS = 0;RW = 0;EN = 1;EN = 0;void init_lcd1602(void)w_cmd(0x38);w_cmd(0x0c);w_cmd(0x06);w_cmd(0x01);main()init_lcd1602();w_cmd(0x80);w_dat(65); /w_dat(A);w_dat(66);w_dat(67);w_dat(68);w_dat(69);w_dat(70);w_dat(71);w_cmd(0xc0);w_dat(1+0);w_dat(2+0);w_dat(3+0);w_dat(4+0);w_dat(5+0);w_dat(

42、6+0);w_dat(7+0);while(1);程序二:用发送字符串的形式在 LCD 上显示字符串。#includesbit RS = P10;sbit RW = P11;sbit EN = P15;sbit BUSY = P07;unsigned char code word1 = “ my god!“;unsigned char code word2 = “please touch me.“;/等待繁忙标志void wait()P0 = 0XFF;doRS = 0;RW = 1;EN = 0;EN = 1;while(BUSY = 1);EN = 0;void w_dat(unsigne

43、d char dat)wait();EN = 0;P0 = dat;RS = 1;RW = 0;EN = 1;EN = 0;void w_cmd(unsigned char cmd)wait();EN = 0;P0 = cmd;RS = 0;RW = 0;EN = 1;EN = 0;void init_lcd1602(void)w_cmd(0x38);w_cmd(0x0c);w_cmd(0x06);w_cmd(0x01);void w_string(unsigned char addr_start, unsigned char *p)w_cmd(addr_start);while(*p != 0)w_dat(*p+);main()init_lcd1602();w_string(0x80,word1);w_string(0xc0,word2);while(1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报