作业

  • 实际编程前画个流程图好还是写伪代码好
      • 单片机c常用关键字,标识符详解
    • 第一次作业
    • 第二次作业
      • pwm
      • Q: 如何用51单片机控制DAC0832产生不同频率正弦波,键盘改变频率,求具体的C语言程序
    • 第三次左右
      • Q:通信串口.c(49): error C249: 'DATA': SEGMENT TOO LARGE
      • Q: error C247: non-address/-constant initializer
      • Q:keil里面怎么加长长的字符串。
      • Q:怎么把句子等转成ASCLL码
      • Q:有时候不适合把定义放在函数内,或循环里 为啥
      • Q:为啥卡住了呢,还有如果现实占用串口,拔掉再插上

**

实际编程前画个流程图好还是写伪代码好

**

画图是真实业务抽象设计bai成程序模型的能力,这个du能力培养起zhi来,可以走架构的路dao。类图,可以把复杂的业务关系梳理成业务对象之间的关系,再抽象到程序设计上。时序图,可以把用户交互到服务端处理的完整调用链规划清楚,对于复杂的业务非常适用,还可以用这个时序图直接生成代码(EA)数据流,可以把业务对象之间的数据扭转关系梳理清楚,方便开发和沉淀产物。这些图,主要面向负责的业务逻辑或者技术难点。如果是简单的增删改,没啥复杂功能,是没有必要去画的,顶多就是画一个数据结构。再说说伪代码相较于画图的难度,伪代码可能更容易被入门程序员接受,因为比较具象了。每个方法级别输入输出,方法体内需要的逻辑设想好,写好就行。伪代码也是代码规划的一种,比较适合入门。但是缺点就是没办法从宏观交付看整体结构、成员之间的关系,设计产出的内容变动会比较频繁。

如何写好伪代码
如何写程序流程图

单片机c常用关键字,标识符详解

单片机c常用关键字,标识符详解

第一次作业

**第一次基础测试
题目:设计一个单片机程序,控制LED灯,每5s闪烁一次,每次点亮时间1s
完成要求:
(1)熟悉单片机(51或stm32)的基本配置,(2)会控制单片机端口的高低电平(3)同时会实用单片机内部的计时器中断进行计时(4)并且计时要求严格准确
提交时间:2020年7月14日21点前


```java
#include <reg52.h> //引入单片机头文件,频率是11.0592Mhz#define unit unsigned int//无符号整形
#define uchar unsigned char//无符号字符型
sbit LED1=P2^0;//这里P一定要大写,发光二极管 led1 接 P1口 0 位端,用以控制 led1 的亮灭。sbit是定义特殊功能寄存器的位变量。
uchar num;
void main()
{TMOD=0x01;//设置定时器0工作模式1,16位TH0=(65536-45872)/256;//50msTL0=(66536-45872)%256;LED1=0;EA=1;ET0=1;//打开定时器0中断TR0=1;//启动定时器0
while(1)
{if(num==20)//20次,说明到了1秒
{LED1=1;//1秒后,灭}
if(num==100)//100次,5秒
{LED1=0;num=0;
}
}
}
void T0_time() interrupt 1{TH0=(65536-45872)/256;TL0=(66536-45872)%256;num++;}

TH0=(65536-1000)/256;将先求括号内的差,然后取这个差的高八位(通过除以2的八次方得到,除以一次2相当于右移一位)
TL0=(65536-1000)%256;将先求括号内的差,然后取这个差的低八位,即低字节放入TL0
计数器初值的决定

第二次作业

题目:设计一个单片机程序,在单片机内部产生6个频点的正弦波
基础完成要求:
(1) 利用单片机产生6个频点的正弦波,频点要求分别是(1:do的频率为bai261.6HZ,2:re的频率为zhi293.6HZ,3:mi的频率为329.6HZ,4:fa的频率为349.2HZ,5:so的频率为392HZ,6:la的频率为440HZ,7:si的频率为493.8HZ),六个频点的幅度都可以自由控制和调节
(2) 选取合适的时钟频率,让产生的时钟偏差不超过5Hz
(3) 可以通过按键在以上几个频率的正弦波之间进行切换,按键每按下次,频率切换一次
(4) 可以通过按键改变频率输出的幅度
(5) 控制DA输出到各个频率的正弦波,并且验证相关频点的正弦波是否正确
提交时间:2020年7月25日21点前

高级完成要求:
利用产生的频率,去控制DA输出下面的这首曲子
准备:
目标:产生六个频点的正弦波
1正弦采样点,一共有256个点。通过DA转换bai输出信du号的。
用示波器看,就是正弦信号,其实是一种曲zhi线阶梯型的信号而已

2、
**

pwm

TIM2的PWM

占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。占空比(Duty Ratio)在电信领域中有如下含义:例如:脉冲宽度1μs,信号周期4μs的脉冲序列占空比为0.25。

Q: 如何用51单片机控制DAC0832产生不同频率正弦波,键盘改变频率,求具体的C语言程序

如何用51单片机控制DAC0832产生不同频率正弦波,键盘改变频率,求具体的C语言程序

如何用51单片机控制DAC0832产生不同频率正弦波,键盘改变频率,求具体的C语言程序
https://zhidao.baidu.com/question/453041357.html?qbl=relate_question_0&word=%C8%E7%BA%CE%BF%D8%D6%C6DA%CA%E4%B3%F6%B5%BD%B8%F7%B8%F6%C6%B5%C2%CA%B5%C4%D5%FD%CF%D2%B2%A8%20%B3%CC%D0%F2

#include<reg52.h>       //时钟周期是12Mhz
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_DIG P0//通用baiIO口,就是普通的输入输du出引zhi脚。,数码管连接P0口
#define GPIO_KEY P1//矩阵键盘用P1口。矩形按键控制数码管
uint i;
uint K;
uchar KeyValue; //用来存放读取到的键值
uint xiaoshu;
unsigned char code sin_tab[] = //正弦bai波输du出表zhi
{0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,
0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,
0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,
0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,
0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,
0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,
0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,
0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,
0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,
0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,
0x51,0x55,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x7E
};
sbit WRI=P3^4;
sbit CS=P3^5;uint code TIME_US[] = {15,13,12,11,10,9,8};//255个间隔。每个间隔对应的微秒数void delay_1us(K) //1us延时函数
{uint i;for(i=0;i<=K;i++)
_nop_(); //这一个语句表示1us延时
}//DA转换
void DAConvert(uchar Data)//注意 这里的data 还没有给与
{EA =0;CS=1;WRI=1;delay_1us(2);CS=0;WRI=0;P0=Data;CS=1;WRI=1;EA = 1;
}// 共阳极数码管编码char code DSY_Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0,1,2,3,4,5,6,7,8//9,A,B,C,D,E,F,-// 各音符对应的延时
uint code Tone_Delay_Table[] = { 63625,63883,64019,64104,64260,64400,64523,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178 }; //
sbit BEEP = P1^5; // 蜂鸣器
uchar KeyValue; // 按键序号//共阳
uchar code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值/*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(uint i)
{while(i--);
}void DelayMS(uchar x)
{uchar i;while ( x-- ) for(i = 0;i < 120; i++);}/*******************************************************************************
* 函 数 名         : KeyDown
* 函数功能         : 检测有按键按下并读取键值
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
uint KeyDown(void)
{char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下{delay(1000);//延时10ms进行消抖if(GPIO_KEY!=0x0f)//再次检测键盘是否按下{    //测试列GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07):    KeyValue=0;break;case(0X0b):   KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}//测试行GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0):    KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}}}while((a<50)&&(GPIO_KEY!=0xf0))  //检测按键松手检测{delay(100);a++;}return KeyValue;
}uint fudu()
{if(KeyValue<=6)//控制幅度{xiaoshu=1;}else if(KeyValue==7){xiaoshu=0.75;}else if(KeyValue==8){xiaoshu=0.5;}else if(KeyValue==9){xiaoshu=0.25;}
return xiaoshu;
}/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************///------------------------------------------------
// 定时器 0 中断程序,不同频率的声音由该中断产生
//------------------------------------------------
void Play_Tone() interrupt 1
{TH0 = Tone_Delay_Table[ KeyValue ] / 256;TL0 = Tone_Delay_Table[KeyValue ] % 256;BEEP = ~BEEP;}
//--------------------------------------------
// 主程序
//--------------------------------------------void main()
{WRI=0;
CS=0;P0 = 0x00; // 初始显示“ - ”TMOD = 0x01;IE = 0x82;while(1){P1 = 0xF0; // 发送扫描码if (P1 != 0xF0) // 如果有键按下{KeyDown(); // 扫描键盘矩阵if(KeyValue<=6){GPIO_DIG=~smgduan[KeyValue];}P0 = DSY_Table[ KeyValue ]; //  显示按键  TR0 = 1; // 启动定时器,根据 KeyNo 发音}else {TR0 = 0; // 停止播放}DelayMS(2);fudu();if(xiaoshu!=1){KeyDown();}if(KeyValue<=6)//使只输出7个频率,其他键只用来{      K=TIME_US[KeyValue];//注意顺序,回来检查 只包含0-6}for(i=0;i<256;i++){DAConvert(sin_tab[i]*xiaoshu);if(i==256)
{i=0;
}delay_1us(K);  //控制正弦波每个点的输出时间以产生一定的频率}}}```bash
在这里插入代码片

来今天把第三次作业放到这里 ,开心的不得了,完成第三次的时候,我有了TEAM来帮忙,虽然一点都不专,不过他们能触类旁通。也算是帮到了我的忙。昨天看《三十而已》,看到王漫妮跳槽想找新的工作,可惜呀不如愿,无法再得到高薪,那个猎头说了一句话是真的一语中的,就是他们的工作都不具备不可替代性,哎,趁春光明媚,用全力去追,青春多宝贵,没机会,去浪费。好好体会。

第三次左右

@所有人
第三次题目:
题目:设计一个单片机程序,通过串口ASCII码表
基础完成要求:
(1) 熟练使用串口通信的接口
(2) 选择合适的波特兰进行串口通信
(3) 将ASCII码表进行编码
(4) 传输英语新概念2的第一课课文到另外一个单片机上
主要考察大家的串口通信和ASCII码表的编码
截止的时间是2020年8月1日下午六点

Q:通信串口.c(49): error C249: ‘DATA’: SEGMENT TOO LARGE

答:如果你bai定义的数组不用更改就用 uchar code XX[10]=
很长的一组 就加code

Q: error C247: non-address/-constant initializer

不能通过引用数组元素的方式给变量赋初值。
WORD J=TIME[I] 这个赋值语句可以加在程序里,而不是在变量声明时引用数组元素。
答:你这几个变量声明是外部变量,那么他们应该在别的程序头文件中定义过的。你看看是不是定义了。

Q:keil里面怎么加长长的字符串。

答:char str[ ] = “china”;
char str[ ] = {‘c’,‘h’,‘i’,‘n’,‘a’};
上面的两种形式都可以,结尾没有加上’\0’结束符,编译时编译器会默认帮我们加。

Q:怎么把句子等转成ASCLL码

答:

Q:有时候不适合把定义放在函数内,或循环里 为啥

Q:为啥卡住了呢,还有如果现实占用串口,拔掉再插上



单片机作业 可乐浇汁 “苦乐交织”相关推荐

  1. 基于单片机的自动追日系统设计_基于单片机的自动浇花系统的设计

    龙源期刊网 http://www.qikan.com.cn 基于单片机的自动浇花系统的设计 作者:吴蓓 张阳 来源:<现代信息科技> 2018 年第 03 期 摘 要:为了解决人们生活中由 ...

  2. diy 单片机 自动浇花_基于单片机的自动浇花系统

    摘要 很多家庭都种植有令人赏心悦目的花卉,但是当主人外出几天时,为避免这些花卉处于无人浇水的境地,所以设计一种自动浇花器十分必要的.本系统采用51单片机STC12C5A60S2作为核心控制器,用土壤湿 ...

  3. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  4. 【毕业设计】基于单片机的自动浇花灌溉系统设计 -嵌入式 物联网 stm32 c51

    文章目录 1 简介 2 主要器件 3 实现效果 4 设计原理 5 关键代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目 基于单片机的自动浇花灌溉系统设计 大 ...

  5. diy 单片机 自动浇花_基于单片机的自动浇花器设计

    龙源期刊网 http://www.qikan.com.cn 基于单片机的自动浇花器设计 作者:陈赋铭 来源:<农家科技下旬刊> 2015 年第 04 期 摘 要:本文是基于单片机 AT89 ...

  6. 基于51单片机的自动浇花系统

    目录 一.项目需求 二.仿真 三.程序 四.资料清单 资料下载地址:基于51单片机的自动浇花系统 一.项目需求 1.自动检测土壤湿度.温度.光照强度: 2.土壤湿度过低驱动水泵进行浇花: 3.LCD1 ...

  7. 基于51单片机的智能浇花系统(可做毕设)

    基于51单片机的智能浇花系统(可做毕设) 一.系统介绍 二.仿真展示 三.实物展示 四.仿真过程 五.代码 1.ADC0832 2.LCD1602 3.按键 4.水泵 5.温湿度 6.定时器 7.ma ...

  8. 基于单片机自动智能浇花系统电路设计(毕业设计资料)

    摘要: 1.基于51单片机自动智能浇花系统设计 本设计由STC89C52单片机电路+4位共阳数码管显示电路+ADC0832采样电路+水泵控制电路+土壤湿度传感器电路+按键电路+电源电路组成. 1.数码 ...

  9. c语言数字植物管理系统,基于AT89C52单片机的智能浇花系统(包含程序代码)

    内容简介: 基于AT89C52单片机的智能浇花系统,毕业论文,共50页,18022字,附程序代码.实物图等. 摘要 伴随着经济的快速发展,人们的物质生活水平得到了极大的提高,生活质量越来越为人们关注. ...

最新文章

  1. c语言中二进制用什么字母表示方法,看C语言编码转换--------负数的二进制表示方法...
  2. 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
  3. 全球及中国抓紧器行业十四五发展态势及前景规划建议报告2021-2027年版
  4. 耳机使用说明书 jbl ua_用过JBL耳机后,才知道在运动领域BOSE和BO原来只是个弟弟...
  5. struts2原理分析之反射技术动态获取属性
  6. php include无效,php 两次include后,第一个include里的变量无效了
  7. js取iframe 上级页面_原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法...
  8. win11怎么取消pin码实现自动登陆 windows11取消pin码自动登陆的方法步骤
  9. 设计模式--spring源码中使用策略模式(Strategy Pattern)
  10. rundeck 内存溢出
  11. Spring中的bean是否是线程安全的
  12. rfid水洗电子标签怎么管理洗涤衣物
  13. 软件测试项目案例哪里找?【银行/教育/商城/金融/等等....】
  14. 初学者福利:分享五个免费的 Python 学习网站,抓紧收藏吧
  15. Python语言程序设计 测验6: 组合数据类型 (第3周)
  16. python日期判断星座_Python学习笔记 - 根据出生日期判断你的星座
  17. JAVA复制数组的三种方法
  18. java经典题丨有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?
  19. 南昌专门学计算机的技校,2019南昌技校计算机专业都学什么有哪些专业-江西技校都有什么专...
  20. 2K和XP的CMD命令教程(命令篇)

热门文章

  1. 每节课都是一个项目 手把手用STM32打造联网气象站-4-STM32基础三件套-TIM定时器和SYSTICK初始化
  2. java方法注释都英文_JDK源码中的英文注释翻译(Class)
  3. 高可用集群下的负载均衡(6):haproxy实现访问不同资源的负载均衡(日志、监控、acl访问控制的配置)
  4. 汪国真的八字命理分析
  5. 对单片机通信方式(中断和轮询)的理解
  6. 微信小程序连接阿里云物联网平台——物联网远程控制开发1
  7. Qt如何设置控件字体有下划线
  8. javascript 省市区三级联动 附: json数据
  9. 1.电磁波传播原理,慢衰落、快衰落、阴影效应、多径传播、多普勒效应、塔下黑。
  10. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇