- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机工作总结
编程综述单片机编程其实就是对寄存器的操作,更多的是用流程控制语句来决定寄存器对应行为的先后时间顺序。什么时候该让寄存器干什么,什么时候停止。Keil-c 也可以使用指针来定义字符串。uchar *trdata=hello,RS232\n;send_char(trdata[i]);unsigned char *puchMsg ;while (usDataLen--) /* 传输消息缓冲区*/{uIndex = uchCRCHi ^ *puchMsg++ ;}while(TI==0);//直到TI==0才往下执行。尽量在子程序中少用while(1) //死循环。voidsendchar(void){while(1) //死循环。{if(RI)//如果接收到数据。{RI = 0;//软件清0dat = SBUF;//将接收到的数据赋给之前定义的变量。SBUF = dat;//将接收到的数据又发送出去。while(!TI);// 等特数据传送, 查询是否发送完毕。TI = 0;//对发送标志位清0。}}}当其他程序调用sendchar(void)时将不能跳出死循环,所以在写子程序时要严格使用死循环。标志位、控制位的对应一般将标志位作为判断条件来执行对应程序。结合中断使用的频率较高。例如SendFlag = 0就必须有对应置1的条件,而控制位更是要有对应的切换过程。例如RS485E=1; // RS5485E=0为接收状态 RS5485E=1为发送状态if(TI == 1) {TI = 0;SendFlag = 0; } if(RI == 1) //RI接受中断标志 {RI = 0; //清除RI接受中断标志Data = SBUF; //SUBF接受/发送缓冲器SendFlag = 1; } if (SendFlag==1) // 如果中断程序响应了,即就是单片机接收到数据这时就将接收到的数据进行回显,发送到PC { RS485E=1; // RS5485E=0为接收状态 RS5485E=1为发送状态 SBUF=Data; //发送数据delay(50); }else { RS485E=0; //接收状态 }TM1629地址写的不对导致显示字符不对。display2( 0xc0, LED14Num[0]);display2( 0xc1, LED14Num[1]);display2( 0xc2, LED14Num[2]);display2( 0xc3, LED14Num[3]);往后在编程过程中一定要注意写地址命令的地址格式。TM1629数码管字符显示乱码const unsigned char LED14Num[]={// Number Encode0xa1,// 0 LSB0x07,// 0 MSB0x01,// 1 LSB0x01,// 1 MSB0x4A,// 2 LSB0x1C,// 2 MSB原因就在于焊接数码管引脚时没有按照顺序来,而导致编码没办法进行统一编码。下次可以根据编码推理出管脚位置然后再焊接引脚。I++导致的编码错误switch(*pt) {case 0: disdata[i] =LED14Num[0];disdata[i+1] =LED14Num[1]; break;case 1: disdata[i] =LED14Num[2];disdata[i+1] =LED14Num[3]; break;}i++;导致每次显示都会将i+1覆盖;i+1和i++重复了。改为i=i+2;小数点的错位for(k=0;k6;k++) {if(disdata[j]==LED14Num[7]) {display2( LED_GRID[j-2], 0x40|disdata[j-2]) ;k=j-1;j++;//让下一个数据得到正确显示。 } display2( LED_GRID[k], disdata[j]);j++; }在没有小数点时要显示的数据正好和显示的位置对应但一旦有了小数点则将会使要显示的数据和显示的位置错了一位,所以选择k,j两个变量来进行位和数据的选择。注意j++;//让下一个数据得到正确显示。的位置。对寄存器的操作进行打包成为固定函数,直接对该函数进行调用#define PORT_KEY1 (PTC_BASE_PTR)#define PIN_KEY1 (5u)#define KEY1_OUTPUT() (PORT_KEY1-PDDR |= SHIFT_DATA PIN_KEY1)#define KEY1_INPUT() (PORT_KEY1-PDDR = ~
您可能关注的文档
最近下载
- 第六章 应激与心身.ppt VIP
- 专硕简况表-10292-常州大学-0854电子信息2020年学位授权申报材料.pdf
- 大学生国防教育PPT.pptx VIP
- The Simpsons《辛普森一家》第一季第一集完整中英文对照剧本.docx VIP
- 国家优质工程奖实体质量核查要点(建筑工程)(2022年版).docx
- 小学四年级美术(人美版)《快快乐乐扭秧歌》-教学设计、课后练习、学习任务单.docx VIP
- 不锈钢排水沟施工方法.docx VIP
- 国有大型银行行业研发费用投入比例对比2022-03.pptx
- 人教版英语八年级下册Unit 8 Have you read Treasure Island yet大单元整体教学设计.doc
- 人工智能与大模型通论.pptx
文档评论(0)