飞道的博客

51单片机自学笔记

383人阅读  评论(0)

1,程序安装与运行

2,常见错误

1,main.c(2): error C100: unprintable character 0xA0 skipped

原因:keil里面出现了中文输入法时写的标点,例如: //lcm_w_word("abc您好");  不能出现全角的任何字符,包括空格在内 任何标点符号和空格都只能在英文的状态下输入,提示这个错误的话 把全角的字符或者标点替换一下即可。

全角字符和半角字符之间的区别:

一个汉字字符在电脑上要占两个英文字符的位置,当输入符号的时候全角的字符也是要占两个英文字符的位置,半角的只占一个字符也就是半个汉字的位置。这就是全角和半角的区

3,小案例程序

1,青花瓷歌曲


   
  1. #include <REG51.H>
  2. #define uchar unsigned char
  3. sbit beepIO=P1^5; //定义蜂鸣器端口为p1^5,根据单片机实际蜂鸣器实际接口改变
  4. uchar m,n; //定义4个八度 每八度12分音律 共48音律
  5. uchar code T[49][2]= {{ 0, 0}, //定义音律49个二维数组
  6. { 0xF9, 0x1F},{ 0xF9, 0x82},{ 0xF9, 0xDF},{ 0xFA, 0x37},{ 0xFA, 0x8A},{ 0xFA, 0xD8},{ 0xFB, 0x23},{ 0xFB, 0x68},{ 0xFB, 0xAA},{ 0xFB, 0xE9},{ 0xFC, 0x24},{ 0xFC, 0x5B},
  7. { 0xFC, 0x8F},{ 0xFC, 0xC1},{ 0xFC, 0xEF},{ 0xFD, 0x1B},{ 0xFD, 0x45},{ 0xFD, 0x6C},{ 0xFD, 0x91},{ 0xFD, 0xB4},{ 0xFD, 0xD5},{ 0xFD, 0xF4},{ 0xFE, 0x12},{ 0xFE, 0x2D},
  8. { 0xFE, 0x48},{ 0xFE, 0x60},{ 0xFE, 0x78},{ 0xFE, 0x86},{ 0xFE, 0xA3},{ 0xFE, 0xB6},{ 0xFE, 0xC9},{ 0xFE, 0xDA},{ 0xFF, 0xEB},{ 0xFE, 0xFA},{ 0xFF, 0x09},{ 0xFF, 0x17},
  9. { 0xFF, 0x24},{ 0xFF, 0x30},{ 0xFF, 0x3C},{ 0xFF, 0x47},{ 0xFF, 0x51},{ 0xFF, 0x5B},{ 0xFF, 0x64},{ 0xFF, 0x6D},{ 0xFF, 0x75},{ 0xFF, 0x7D},{ 0xFF, 0x84},{ 0xFF, 0x8B}
  10. } ;
  11. uchar code music[][2]= {{ 0, 4}, //定义曲谱数组,前数为音律,后数为音符节拍 ,要换歌改变简谱对应的音律号即可
  12. { 0, 1},{ 1, 1},{ 3, 1},{ 5, 1},{ 6, 1},{ 8, 1},{ 10, 1},{ 12, 1},{ 13, 1}, //演示超低音八度 123457671
  13. { 0, 1},{ 13, 1},{ 15, 1},{ 17, 1},{ 18, 1},{ 20, 1},{ 22, 1},{ 24, 1},{ 25, 1}, //演示低音八度12345671
  14. { 0, 1},{ 25, 1},{ 27, 1},{ 29, 1},{ 30, 1},{ 32, 1},{ 34, 1},{ 36, 1},{ 37, 1}, //演示中音八度12345671
  15. { 0, 1},{ 37, 1},{ 39, 1},{ 41, 1},{ 42, 1},{ 44, 1},{ 46, 1},{ 48, 2}, //演示高音八度 1234567
  16. { 0, 4},{ 24, 4},{ 24, 4},{ 21, 4},{ 19, 4},{ 21, 4},{ 14, 8},{ 19, 4},{ 21, 4},{ 24, 4},{ 21, 4},{ 19, 16}, //记录菊花台简谱歌词:0553236 23532 天青色等烟雨 而我在等你
  17. { 0, 4},{ 24, 4},{ 24, 4},{ 21, 4},{ 19, 4},{ 21, 4},{ 12, 8},{ 19, 4},{ 21, 4},{ 24, 4},{ 19, 4},{ 17, 16}, //简谱歌词:0553235 23521 炊烟袅袅升起 隔江千万里
  18. { 0, 4},{ 17, 4},{ 19, 4},{ 21, 4},{ 24, 4},{ 26, 4},{ 24, 4},{ 22, 4},{ 24, 4},{ 21, 4},{ 21, 4},{ 19, 4},{ 19, 16}, //简谱歌词:01235654 53322 在平地书刻你房间上的飘影
  19. { 0, 4},{ 17, 4},{ 19, 4},{ 17, 4},{ 17, 4},{ 19, 4},{ 17, 4},{ 19, 4},{ 19, 4},{ 21, 8},{ 24, 4},{ 21, 4},{ 21, 12}, //简谱歌词:就当我为遇见你伏笔
  20. { 0, 4},{ 24, 4},{ 24, 4},{ 21, 4},{ 19, 4},{ 21, 4},{ 14, 8},{ 19, 4},{ 21, 4},{ 24, 4},{ 21, 4},{ 19, 16}, //简谱歌词:0553236 23532 天青色等烟雨 而我在等你
  21. { 0, 4},{ 24, 4},{ 24, 4},{ 21, 4},{ 19, 4},{ 21, 4},{ 12, 8},{ 19, 4},{ 21, 4},{ 24, 4},{ 19, 4},{ 17, 16}, //简谱歌词:0553235 23521 月色被打捞起 掩盖了结局
  22. { 0, 4},{ 17, 4},{ 19, 4},{ 21, 4},{ 24, 4},{ 26, 4},{ 24, 4},{ 22, 4},{ 24, 4},{ 21, 4},{ 21, 4},{ 19, 4},{ 19, 12}, //简谱歌词:0123 5654 5332 25 322 11 如传世的青花瓷在独自美丽
  23. { 12, 4},{ 21, 8},{ 19, 8},{ 19, 4},{ 17, 20}, //简谱歌词:你眼带笑意
  24. { 0xFF, 0xFF}
  25. } ; //歌曲结尾标识
  26. void delay(uchar p) //延时函数 无符号字符型变量
  27. {
  28. uchar i, j; //定义无符号字符型变量J和I
  29. for(; p>0; p--) // 此处P值即主函数的n值节拍个数
  30. for(i=181; i>0; i--) //延时181*181个机器周期约35毫秒,即一个1/16节拍
  31. for(j=181; j>0; j--);
  32. }
  33. void T0_int() interrupt 1
  34. {
  35. beepIO=!beepIO; //蜂鸣器翻转发声
  36. TH0=T[ m][ 0] ;
  37. TL0=T[ m][ 1] ;
  38. //音律延时周期次数码表赋给定时寄存器作为计数初始值, 每TH0TL0个机器周期触发蜂鸣器端口翻转,演奏出不同音符
  39. }
  40. void main()
  41. {
  42. uchar i=0; //定义无符号字符型变量i, 初始值为0
  43. TMOD=0x01;
  44. EA=1;
  45. ET0=1; //开启T0定时16位方式,总中断开启,开启T0外部中断请求
  46. while(1) //开始曲谱演奏,循环无限重复
  47. {
  48. m=music[ i][ 0] ; //将音律号赋值给m
  49. n=music[ i][ 1] ; //将节拍号赋值给n
  50. if(m==0x00) //如果音律号为0,
  51. {
  52. TR0=0;
  53. delay(n);
  54. i++;
  55. } //关闭计时器,延迟n拍,将循环数I加1 ,准备读下一个音符
  56. else if(m==0xFF) //否则如果音律数为FF
  57. {
  58. TR0=0;
  59. delay(30);
  60. i=0;
  61. } //开启节拍延时30个1/16节拍, 歌曲停顿2秒, 将循环数I置0
  62. else if(m==music[ i+1][ 0] ) // 否则如果把下一个音律号数给变量m
  63. {
  64. TR0=1;
  65. delay(n);
  66. TR0=0;
  67. i++;
  68. } //定时器0打开延迟n拍,关闭定时器T0,读下一个音符,循环数加1读下一个音律
  69. else //音符若不为零
  70. {
  71. TR0=1;
  72. delay(n);
  73. i++;
  74. } //打开定时器,延时n个1/16拍,循环数I加1 , 准备演奏下一个音符
  75. }
  76. }

 


转载:https://blog.csdn.net/qq_41593124/article/details/115939692
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场