《单片机C语言编程基础及实例》由会员分享,可在线阅读,更多相关《单片机C语言编程基础及实例(58页珍藏版)》请在金锄头文库上搜索。
1、第一节:单数码管按键显示第二节:双数码管可调秒表第三节:十字路口交通灯第四节:数码管驱动第五节:键盘驱动第六节: 低频频率计第七节:电子表第八节:串行口应用基础知识:51单片机编程基础单片机的外部结构:1 . 40双列直插;2 . P0, P1, P2, P3四个8位准双向引脚;(作为输入时, 要先输出高电平)3 .电源(40)和地线(20);4 .高电平复位(9) ; (10电容接与,即可实现上电复位)5 .内置振荡电路,外部只要接晶体至 X1 (18)和X0 (19); (频率为主频的12倍)6 .程序配置(31)接高电平;(运行单片机内部中的程序)7 . P3支持第二功能:、 0、1、T
2、0、T1单片机内部部件:(所为学习单片机,实际上就是编程控制以下部件,完成指定任务)1 .四个8位通用端口,对应引脚 P0、P1、P2和P3;2 .两个16位定时计数器;(,0, 0, 1, 1)3 . 一个串行通信接口;(,)4 .一个中断控制器;(,)针对89C52单片机,头文件89x52给出了特殊功能寄存器所有端 口的定义。C语言编程基础:1 .十六进制表示字节 0x5a:二进制为 01011010B; 0x6E为 01101110。2 .如果将一个16位二进数赋给一个8位的字节变量,则自 动截断为低8位,而丢掉高8位。3 .表示对变量先增一;一表示对变量后减一。4 . x 0x0f;
3、表示为 x = x | 0x0f;5 . = ( & 00 ) | 0x05;表示给变量的低四位赋值 0x5,而不改变的高四位。6 . ( 1 );表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是;在某引脚输出高电平的编程方法:(比如 P1.3 (4)引脚)代码1 .该头文档中有单片机内部资源的符号化定义,其中包含P1.32 .()表示没有输入参数,也没有函数返值,这入单片机运行的复位入口4. P1_3 = 1; 给P1_3赋值1,引脚P1.3就能输出高电平5. ( 1 );死循环,相当 : LOOP;6. 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至电源。
4、在某引脚输出低电平的编程方法:(比如 P2.7引脚)代码1 .该头文档中有单片机内部资源的符号化定义,其中包含P2.72 .()表示没有输入参数,也没有函数返值,这入单片机运行的复位入口$ 4. P2_7 = 0; 给P2_7赋值0,引脚P2.7就能输出低电平5. ( 1 );死循环,相当 : LOOP;6. 在某引脚输出方波编程方法:(比如 P3.1弓I脚)代码1. 该头文档中有单片机内部资源的符号化定义,其中包含P3.12. ()表示没有输入参数,也没有函数返值,这入单片机运行的复位入口3. 4. ( 1 )非零表示真,如果为真则执行下面循环体的语句5. 6. P3_1 = 1; 给P3_
5、1赋值1,引脚P3.1就能输出高 电平7. P3_1 = 0; 给P3_1赋值0,引脚P3.1就能输出低电平8. 由于一直为真,所以不断输出高、低、高、低,从而形成方波9. 将某引脚的输入电平取反后,从另一个引脚输出:(比如P0.4=(P1.1)代码1. 该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.12. ()表示没有输入参数,也没有函数返值,这入单片机运行的复位入口3. 4. P1_1 = 1;初始化。P1.1作为输入,必须输出高电平5. ( 1 )非零表示真,如果为真则执行下面循环体的语句6. 7. (P1_11 ) 读取P1.1 ,就是认为P1.1为输入,如果P1.1
6、输入高电平8. P0_4 = 0; 给 P0_4 赋值 0,弓 I脚 P0.4就能输出低电平9. 否则P1.1输入为低电平10. P0_4=0;给 P0_4赋值0,弓I脚P0.4就能输出低电平11. P0_4=1;给 P0_4 赋值1,弓 I脚P0.4就能输出高电平12. 由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平13. 将某端口 8个引脚输入电平,低四位取反后,从另一个端口 8个 引脚输出:(比如P2 = ( P3 )代码1 .该头文档中有单片机内部资源的符号化定义,其中包含P2和P32 .()表示没有输入参数,也没有函数返值,这入单片机运行的复位入口$ 4. P3
7、 = 0;初始化。P3作为输入,必须输出高电平,同时给P3 口的8个引脚输出高电平5. ( 1 )非零表示真,如果为真则执行下面循环体的语句6. 取反的方法是异或1,而不取反的方法则是异或07. P2 = P3八0x0f 读取P3,就是认为P3为输入,低四位 异或者1,即取反,然后输出8. 由于一直为真,所以不断将 P3取反输出到P29. 注意:一个字节的 8位D7、D6至D0,分别本出到P3.7、P3.6 至 P3.0,比如 P3=0x0f,则 P3.7、P3.6、P3.5、P3.4 四个引脚 都输出低电平,而 P3.3、P3.2、P3.1、P3.0四个引脚都输出高 电平。同样,输入一个端口
8、 P2,即是将P2.7、P2.6至P2.0,读 入到一个字节的 8位D7、D6至D6共 9 页:上一页 1 23456789下一页第一节:单数码管按键显示单片机最小系统的硬件原理接线图:1. 接电源:(40)、( 20)。加接退耦电容 0.12. 接晶体:X1 (18)、X2 (19)。注意标出晶体频率(选 用12),还有辅助电容303. 接复位:(9)。接上电复位电路,以及手动复位电路, 分析复位工作原理4. 接配置:(31) O说明原因。发光二极的控制:单片机输出将一发光二极管的正极(阳极)接 P1.1,的负极(阴极)接地。 只要P1.1输出高电平,就正向导通(导通时上的压降大于1V),
9、有电流流过,至发发亮。实际上由于P1.1高电平输出电阻为10K, 起到输出限流的作用,所以流过的电流小于(51V) /10K = 0.4 o只要P1.1输出低电平,实际小于0.3V,就不能导通,结果不亮开关双键的输入:输入先输出高一个按键接在P1.6与之间,另一个按键接P1.7与之间,按后亮, 按后灭。同时按下半亮,保持后松开键的状态,即亮灭。代码2. P1A13. P1A64. P1A75. ()1.用符号代替P1_1用符号代替P1_6用符号代替P1_7表示空,无单片机复位后的执行入口 , 输入参数,无返回值7. = 1;作为输入,首先输出高,接下,P1.6则接地为0,否则输入为18. =
10、1;作为输入,首先输出高,接下,P1.7则接地为0,否则输入为19. (1 ) 永远为真,所以永远循环执行如下括号内所有语句10. 11. (0)1;是接下,所示P1.1输出高,亮12. (0)0;是接下,所示P1.1输出低,灭13. 松开键后,都不给赋值,所以保持最后按键状态。14. 同时按下时,不断亮灭,各占一半时间,交替频率很快, 由于人眼惯性,看上去为半亮态15. 数码管的接法和驱动原理一支七段数码管实际由8个发光二极管构成,其中7个 组形构成数字8的七段笔画,所以称为七段数码管,而余下的 1 个发光二极管作为小数点。 作为习惯,分别给8个发光二极管标 上记号:。对应8的顶上一画,按顺
11、时针方向排,中间一画为g, 小数点为ho我们通常又将各二极与一个字节的8位对应,a(D0)(D1)(D2)(D3)(D4)(D5)(D6)(D7),相应 8 个发光二极管正好与单片机一个端口的8个引脚连接,这样单片机就可以通过引 脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字 和符号;对应字节,引脚接法为:a(.0) , b(.1) , c(.2) , d(.3), e(.4) , f(.5) , g(.6) , h(.7)。如果将8个发光二极管的负极(阴极)内接在一起,作 为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极
12、(阳 极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为 共阳极,8个负极则为段极。以单支共阴数码管为例,可将段极接到某端口,共阴极接,则可编写出对应十六进制码的七段码表字节数据如右图:易示字警大阴槌段选码关阳极四选同显示字符式阴桢殴选码其阳极取选科03FHCOHC39HC6H106HF9nD5EHA1HSDH*4HE加H渐mBOHF71H34H466H99HP73HW56DH92HU3EHC1H6了 DH82HI3LHCEH7GTHF3HyfiEH91H7FH )EDMsFFHDOH96FHg叫“则OOHFFHA77H券HB7CH芯3H16键码显示的程序我们在P1端口接一支共阴数码管,
13、 在P2、P3端口接16个按键, 分别编号为0、1至L操作时只能按一个键,按键后显示对应键 编号。代码1. 2. P13. 0P2八。4. 1P2A15. 2P2A26.3P2A37.P2八48.P2八59.P2八610.P2八7ii.P3八012.P3A113.P3A214.P3A315.P3A416.P3A517.P3A618.P3A719.716=用十六进数作为数组下标,可直接取得22.()对应的七段编码字节20.21.0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,5e,0x79,0x71;0x07,0x7f,0x6f,0x77,0x7c,0x39, 0x23. 24. 0;作为数组下标25. P2 = 0;2作为输入,初始化输出高26. P3 = 0;3作为输入,初始化输出高27. (1)28. 6. 29.30.31.32.33.34.35.36.37.=7 i ; 开始时显示0,根据i取应七段编(00)0;(20)2;(40)4;(60)6;(80)8;(0)0;(0)0;(0)0;(1