如何快速学会单片机编程并应用?

举报
zhangrelay 发表于 2021/07/15 05:35:16 2021/07/15
【摘要】 如何快速学会单片机编程并应用? 先上一些参考资料,主要来源知乎: 1 -怎样学会单片机?- 2 -arduino、arm、树莓派、单片机四者有什么不同?- 3 -单片机可以替代PLC么?- 4 -单片机有没有必要用汇编讲?- 5 -相关课程- 单片机和C语言,是自动化(机器人)学科重要的基础内容。 如果对机器人感兴趣,可参考机器人工程师学习计划。 课程学习动机~Why?为什么...

如何快速学会单片机编程并应用?

先上一些参考资料,主要来源知乎:

1 -怎样学会单片机?-

2 -arduino、arm、树莓派、单片机四者有什么不同?-

3 -单片机可以替代PLC么?-

4 -单片机有没有必要用汇编讲?-

5 -相关课程-

单片机和C语言,是自动化(机器人)学科重要的基础内容。

如果对机器人感兴趣,可参考机器人工程师学习计划

课程学习动机~Why?为什么学习单片机编程?

单片机方向就业?把握市场需求!

软硬件能力的综合训练,电路原理图+软件编程(C语言)。


课程学习内容~What?单片机编程包括哪些内容?

目录和大纲,归纳和总结能力训练



课程学习方法~How?如何学习单片机编程?

在掌握基础知识后,仿真与实验。

Linux平台:MCU 8051 IDE

Windows平台:uVision+Proteus

扩展提升:在学完51单片机后,能够快速自学更为通用主流的嵌入式系统,如下:

C51--(Arduino、MSP430)--(2812、28335)--(STM32、ARM9)--(TK1、BeagleBone、Raspberry Pi)

那么问题来了,我们为什么不直接学习STM32等,而是要学习51呢?

入门简单、上手容易,欲知详情点击查看。

 

其他参考资料:

单片机技术理论与实践课程相关资料,课件、资料和工具软件等。

-新更新考核材料和参考报告-

编程语言

单片机泥石流负能量!

 

在美国大学计算机专业都学什么?

2016 年最受欢迎的编程语言是什么?

凭兴趣求职80%会失败,为什么?



视频短片:

STEM教育 1 2 3 | ROS | 智慧家居 | 智能驾驶

 

 

模块化,低耦合 参考软件工程学

示例1 51+arduino


  
  1. #include<reg51.h> //寄存器定义
  2. #include<stdio.h> //一般I/O口定义
  3. /***以下是全局变量定义*********/
  4. sbit LED=P1^0; //LED灯连接在P1.0上
  5. int data i; //定义一个整型全局变量
  6. /*********主程序开始***************/
  7. void main(void)
  8. { while(1)
  9. { LED=0; //LED灯点亮
  10. for(i=0;i<1000;i++); //延时
  11. LED=1; //LED灯熄灭
  12. for(i=0;i<1000;i++); //延时
  13. }
  14. }
  15. #include<reg51.h> //寄存器定义
  16. #include<stdio.h> //一般I/O口定义
  17. /***以下是全局变量定义*********/
  18. sbit LED=P1^0; //LED灯连接在P1.0上
  19. int data i; //定义一个整型全局变量
  20. LED_demo() //LED函数
  21. { LED=0; //LED灯点亮
  22. for(i=0;i<1000;i++); //延时
  23. LED=1; //LED灯熄灭
  24. for(i=0;i<1000;i++); //延时
  25. }
  26. /*********主程序开始***************/
  27. void main(void)
  28. { while(1)
  29. {
  30. LED_demo();
  31. }
  32. }
  33. /*
  34. Blink
  35. Turns on an LED on for one second, then off for one second, repeatedly.
  36. Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  37. it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  38. the correct LED pin independent of which board is used.
  39. If you want to know what pin the on-board LED is connected to on your Arduino model, check
  40. the Technical Specs of your board at https://www.arduino.cc/en/Main/Products
  41. This example code is in the public domain.
  42. modified 8 May 2014
  43. by Scott Fitzgerald
  44. modified 2 Sep 2016
  45. by Arturo Guadalupi
  46. modified 8 Sep 2016
  47. by Colby Newman
  48. */
  49. // the setup function runs once when you press reset or power the board
  50. void setup() {
  51. // initialize digital pin LED_BUILTIN as an output.
  52. pinMode(LED_BUILTIN, OUTPUT);
  53. }
  54. // the loop function runs over and over again forever
  55. void loop() {
  56. digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
  57. delay(1000); // wait for a second
  58. digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
  59. delay(1000); // wait for a second
  60. }


 

 

示例2 51+arduino


  
  1. #include<reg52.h> //预处理命令,reg52.h是一个头文件
  2. #include<stdio.h>
  3. void Function1(void); //自定义函数Function1声明
  4. unsigned int ch;//全局变量声明
  5. void main(void) //主函数
  6. {
  7. SCON=0x50; //SCON:模式1,8bit异步串口通信
  8. TMOD=0x20; //TMOD:定时器1为模式2,8bit自动装载方式
  9. TH1=221; //TH1:1200bit/s的装载值,16MHz
  10. TR1=1; //TR1:timer1运行
  11. TI=1; //TI:设置为1,以发送第一个字节
  12. while(ch<=5)
  13. {
  14. Function1( );//调用自定义函数
  15. printf("char=%d\n",ch);//程序语句
  16. }
  17. while(1);
  18. }
  19. void Function1(void) //自定义函数Function1
  20. {
  21. unsigned char ps; //自定义函数内部变量声明
  22. ps=1;
  23. ch=ch+ps;
  24. }
  25. #include<reg52.h> //预处理命令,reg52.h是一个头文件
  26. #include<stdio.h>
  27. void Function1(void); //自定义函数Function1声明
  28. void Init1(void);
  29. unsigned int ch;//全局变量声明
  30. void main(void) //主函数
  31. {
  32. Init1();
  33. while(ch<=5)
  34. {
  35. Function1( );//调用自定义函数
  36. printf("char=%d\n",ch);//程序语句
  37. }
  38. while(1);
  39. }
  40. void Function1(void) //自定义函数Function1
  41. {
  42. unsigned char ps; //自定义函数内部变量声明
  43. ps=1;
  44. ch=ch+ps;
  45. }
  46. void Init1(void)
  47. {
  48. SCON=0x50; //SCON:模式1,8bit异步串口通信
  49. TMOD=0x20; //TMOD:定时器1为模式2,8bit自动装载方式
  50. TH1=221; //TH1:1200bit/s的装载值,16MHz
  51. TR1=1; //TR1:timer1运行
  52. TI=1; //TI:设置为1,以发送第一个字节
  53. }
  54. /*
  55. Serial Call and Response in ASCII
  56. Language: Wiring/Arduino
  57. This program sends an ASCII A (byte of value 65) on startup
  58. and repeats that until it gets some data in.
  59. Then it waits for a byte in the serial port, and
  60. sends three ASCII-encoded, comma-separated sensor values,
  61. truncated by a linefeed and carriage return,
  62. whenever it gets a byte in.
  63. Thanks to Greg Shakar and Scott Fitzgerald for the improvements
  64. The circuit:
  65. * potentiometers attached to analog inputs 0 and 1
  66. * pushbutton attached to digital I/O 2
  67. Created 26 Sept. 2005
  68. by Tom Igoe
  69. modified 24 Apr 2012
  70. by Tom Igoe and Scott Fitzgerald
  71. This example code is in the public domain.
  72. http://www.arduino.cc/en/Tutorial/SerialCallResponseASCII
  73. */
  74. int firstSensor = 0; // first analog sensor
  75. int secondSensor = 0; // second analog sensor
  76. int thirdSensor = 0; // digital sensor
  77. int inByte = 0; // incoming serial byte
  78. void setup() {
  79. // start serial port at 9600 bps and wait for port to open:
  80. Serial.begin(9600);
  81. while (!Serial) {
  82. ; // wait for serial port to connect. Needed for native USB port only
  83. }
  84. pinMode(2, INPUT); // digital sensor is on digital pin 2
  85. establishContact(); // send a byte to establish contact until receiver responds
  86. }
  87. void loop() {
  88. // if we get a valid byte, read analog ins:
  89. if (Serial.available() > 0) {
  90. // get incoming byte:
  91. inByte = Serial.read();
  92. // read first analog input:
  93. firstSensor = analogRead(A0);
  94. // read second analog input:
  95. secondSensor = analogRead(A1);
  96. // read switch, map it to 0 or 255L
  97. thirdSensor = map(digitalRead(2), 0, 1, 0, 255);
  98. // send sensor values:
  99. Serial.print(firstSensor);
  100. Serial.print(",");
  101. Serial.print(secondSensor);
  102. Serial.print(",");
  103. Serial.println(thirdSensor);
  104. }
  105. }
  106. void establishContact() {
  107. while (Serial.available() <= 0) {
  108. Serial.println("0,0,0"); // send an initial string
  109. delay(300);
  110. }
  111. }



其他參考資料:http://blog.csdn.net/zhangrelay/article/details/52336300


文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/53841916

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。