- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
源程序 #includereg51.h #define uchar unsigned char #define uint unsigned int /*必要的全局变量定义*/ uchar code seg7[ ]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x00}; //注意数组中多了0x00 uchar disp[8]; //定义显示数组 /*无符号整型量显示函数*/ void unintdisp(uint m) //m为待显示的数据 { uint j; //用于延时 signed char i; //作用是使0-10,拆分时结束for循环 uint shang=m; //定义变量shang用于拆分 disp[7]=shang%10;//shang个位数送入disp[7],shang=0时显示0 shang=shang/10; //修改shang for(i=6;i0;i--) //连续拆分7次,拆分除个位外的其他位数码 { if(shang!=0) //shang≠0时,继续拆分 { disp[i]=shang%10; //拆分shang(修改后)的个位数码送入disp[i] shang=shang/10; //修改shang } else disp[i]=10; //修改后shang=0时,为无效0不显示,10送disp[i] } 位码的发送较灵活,顺序结构编程时,可以根据动态扫描的方向,依次将8个位码送至P2口。 循环结构编程时,适用范围较广的一种方法是定义位码表,位码表中位码的排列次序一般与扫描次序一致,如果从DS7~DS0扫描,位码就按7F~FE的次序存放,定义位码表时也需要加入关键字“code”,使位码表存于程序存储器ROM中;如果各位码之间存在特殊规律时,可以不定义位码表,依据存在的规律修改位码。由表3-2可知,将前一个位码右移一位就得到下一个新的位码,利用头文件intrins.h中的循环移位函数,就可以实现位码的更新,扫描时先发送位码控制字的初,点亮DS7;利用_cror_( )对位码控制字循环右移1位,控制字修改,点亮DS6;……;也实现了对8个数码管字位口的控制。相比来说定义位码表的方式更直观。 2. 段码的发送 在数码管上显示数码“1”时,可以直接用语句“P0=seg[1]”发送“1”的段码至P0口;显示“2”时,语句为“P0=seg[2]”,……。这种方法虽然直观,但不利于功能扩展,一般只适用于顺序结构。 循环结构中通过语句“P0=seg[i]”发送i 的段码,显示i。通过自增、自减运算修改i后,可以使数码管上显示出按递增或递减规律变化的数值,但是要显示这种没有任何规律的数据时,就无能为力了。 循环结构中通用的一种方法是定义显示数组,该数组用于存放将要显示在数码管上的数码,且显示数组的长度与数码管的位数相同。例如显示1~8时,显示数组的各元素应为{1,2,3,4,5,6,7,8};反之如显示数组中的元素为{9,6,4,5,0,3,5,2}时,8个数码管上一定显示。由此可见,显示数组中的元素与数码管上的显示值是一一对应的。与段码表、位码表不同的是,显示数组一般存于数据存储器中,以便写入新的数据,更新数码管显示的信息。 定义显示数组disp[]={9,6,4,5,0,3,5,2}后,可通过语句“P0=seg[disp[i]];”循环发送序号为i 的元素的段码至P0口,从而在数码管上显示元素disp[i]。改变显示数组的元素,就可以更新数码管上的显示值。 3. 顺序结构 采用顺序结构编写动态扫描程序时,可以直接将位码送至I/O口,因此只需定义段码表。 1) 显示 主函数中顺序执行8次“发送位码、发送段码、显示1 ms”,从DS7~DS0对8个数码管扫描一遍;然后再重新开始,扫描第二遍;……;直至无数遍。主函数流程图如图3-11所示。 源程序 #include reg51.h #define uchar unsigned char #define uint unsigned int /*必要的全局变量定义*/ uchar code seg7[ ]={
您可能关注的文档
- 单片机原理与应用-KFIL C项目教程(西电版)项目二 霓虹灯控制系统.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目八 串行口通信.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目九 DA和AD转换.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目六 99 s倒计时.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目七 液晶显示器及其应用.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目三 数码管显示电路.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目十 基于51单片机的时钟.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目四 键盘原理及应用.ppt
- 单片机原理与应用-KFIL C项目教程(西电版)项目五 中断系统及其应用.ppt
文档评论(0)