02数码管模块.doc_第1页
02数码管模块.doc_第2页
02数码管模块.doc_第3页
02数码管模块.doc_第4页
02数码管模块.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR单片机入门学习 上海市金山中学 葛华峰硬件模块02: 数码管一、 原理和电路图:图1 外观形态图2图1中,a h描述了数码管的低位至高位,可用图2进行类比,低位至高位(D0 D7)。图3 内部电路图图3 为数码管内部电路图,采用共阳极的设计。因为是共阳极,若要点亮数码管中的灯,需要给其低电平,故置“0”点亮!若 PORTA的信号控制数码管中灯的亮灭,以下语句将显示数字3PORTA = 0b10110000或 PORTA = 0xB0 控制数码管与控制发光二极管原理类似,主要区别为:1. 亮灭信号不一样,正好相反。2. 数码管有四组,流水灯只有一组。3. 每组八个灯的位置不一样,流水灯在一行上,数码管逆时针排列。 数码管硬件连线:(参考) 每组数码管显示控制 数码管组选择控制假设实验中按如下连线:(自己可根据情况灵活接插)1. C1C4 接在PORTC的0 3 号针脚上,用以控制选择哪组数码管。 2. a dp 接在PORTA上,用以控制数码管的显示。二、 实验任务:在最右边的数码管中,反复显示数字0 9, 数字变化间隔为500 ms 。三、 算法分析:1. 如何让最右边的数码管亮呢? 最右边的数码管对应的是C1针脚,只要该针脚上给高电平,就可使其数码管处于开通状态。故可用如下语句实现:PORTC = 0b00000001; /端口值 初始化 接C1的PORTC0针脚置 1 DDRC = 0b11111111; /端口方向 初始化 针脚全部定义为信号输出2. 最右边的数码管可以点亮的情况下,如何按要求显示数字09 呢?步骤1 : 显示 数字0 PORTA = 0b11000000;步骤2 : 显示 数字1 PORTA = 0b11111001; 步骤3 : 显示 数字2 PORTA = 0b10100100; 按此顺序,直至数字9为止,并且反复循环。 关键点:找到所要显示数字字形的电平对应序列。切记:亮 0 , 暗 1 。推荐用二进制或十六进制表示。四、 程序实现:在最右边的数码管中,反复显示数字0 9, 数字变化间隔为500 ms 。示例程序1: #include #include void main(void) PORTC = 0b00000001; /端口C的值初始化 选择数码管组 DDRC = 0b11111111; /端口C的方向初始化 信号输出 PORTA = 0b11111111; /端口A的值初始化 全暗 DDRA = 0b11111111; /端口A的方向初始化 信号输出while (1)PORTA = 0b11000000; /显示数字 0delay_ms(500);PORTA = 0b11111001; /显示数字 1delay_ms(500);PORTA = 0b10100100; /显示数字 2delay_ms(500);PORTA = 0b10110000; /显示数字 3delay_ms(500);PORTA = 0b10011001; /显示数字 4delay_ms(500);PORTA = 0b10010010; /显示数字 5delay_ms(500);PORTA = 0b10000010; /显示数字 6delay_ms(500);PORTA = 0b11111000; /显示数字 7delay_ms(500);PORTA = 0b10000000; /显示数字 8delay_ms(500);PORTA = 0b10010000; /显示数字 9delay_ms(500); 五、 课堂实践:1请完成上述一位数码管控制的实验任务。2修改上述程序,分别使第二组、第三组、第四组数码管反复显示数字0 9(以右侧为基准)。六、 深入学习:1完成了上述课堂实践任务后,请再仔细体会一下。不知你是否感觉“循环显示数字0 9 ”的代码有些繁琐冗长,希望用一种更加巧妙的方法让其能够更精简一些。用位运算符的左移或右移能实现我们的愿望吗?回答:不能!因为要显示的数字转换后的电平信号二进制是不连续、无规则的,所以只能另想办法。此处将用C语言中的 数组 来使程序代码更加精简。 知识点链接: 数组的定义 例: unsigned char num10 = 1,2,3, ; 数据类型 数组名及大小 具体数据说明: 数据类型有很多,此处选用的是无符号字符型,表示值范围:【0,255】 C语言中数组下标从0开始,所以规模为10的数组,下标范围: 0, 9 数组中要存放的数据直接在 中给出,用逗号分隔。因为数组的下标是连续的,所以先将数据存放在数组中,然后通过循环结构控制下标变化,读取相应的数据,通过该方法可使代码更加精简。 具体如下所示:示例程序2:#include #include void main(void) unsigned char num10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /* 定义数组,存放数字 09 ,此处用十六进制表示 */ unsigned char i; /控制循环的变量 PORTC = 0b00000001; /端口C的值初始化 选择数码管组DDRC = 0b00000001; /端口C的方向初始化 PORTC0针脚信号输出 PORTA = 0b11111111; /端口A的值初始化 全暗DDRA = 0b11111111; /端口A的方向初始化 所有针脚信号输出 while (1) for (i=0;i10;i+) /控制数组下标变化 PORTA = numi; /读取相应数组下标中的值赋给端口A delay_ms(500); /延时500毫秒 实践提高: 完成上述示例程序2,体会其中设计特点,掌握数组的应用。 利用数组与循环结构完成以下任务:从数字9至0进行倒计时,最终显示字母H停止。 2之前介绍了一位数码管的控制,现要控制后两位数码管(以右基准)显示数字00 99,每1秒跳动一次,该如何实现呢?算法分析:虽然肉眼感觉两位数同时出现在眼前,但单片机在实际处理时还是有先后交替的过程,只要交替的过程频率足够快,肉眼就感觉是静止状态。可用如下伪代码描述: 开通C1组数码管,关闭C2组数码管,显示数字。 延时10ms 开通C2组数码管,关闭C1组数码管,显示数字。 延时10ms 为了让肉眼看清显示的数字,并符合1秒跳动一次的要求,重复上述步骤50次。 为什么? 因为这两步共延时20ms,执行50次,正好是1秒。具体如下所示:示例程序3:#include #include void main(void) unsigned char num10 = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /上述语句,定义数组,并存放数字09 unsigned char i; /控制低位 unsigned char j; /控制高位 unsigned char c; /计数器,控制进位 DDRC = 0b00000011; PORTA = 0b11111111;DDRA = 0b11111111; while (1) for (j=0;j10;j+) /高位取值的范围 for (i=0;i10;i+) /低位取值的范围 for (c=0;c50;c+) /此循环控制数码管数字跳动为1秒 /低位10ms, 高位10ms, 50次 共1000ms PORTC = 0b00000001; /先选择最右边一组数码管(低位) PORTA = numi; /得到数据 delay_ms(10); PORTC = 0b00000010; /再选择右边第二组数码管(高位) PORTA = numj; /得到数据 delay_ms(10); 实践提高: 完成上述示例程序3,体会其中设计特点,掌握两位数码管的控制方法。 设计程序完成以下任务:从数字00至25进行计数,每隔1秒数字变化,最终显示字母H停止。 设计程序,控制四位数码管进行数字计数。(选做)七、 模块小结:1掌握点亮控制数码管的基本原理。(先选中数码管组,再控制)2掌握C语言中数组的应用3掌握两位数码管静态图像显示的实质。(快速刷新)附:历届上海市单片机竞赛数码管项目 赛题1 在D口从1计数并显示到9,然后倒计数到0结束。最后显示字母“F”。计数速度为1秒钟加1或减1。2 在B口动态显示,从35倒计数到1结束,结束后显示字母“H”。计数速度为1秒钟减1。3 在B口从20倒计数到1结束,结束后显示字母“E”。计数速度为1秒钟减1。4 在D口用数码管的个位按次序轮流显示A、B、C、D、E、F笔划段。再按次序轮流显示F、E、D、C、B、A笔划段,速度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论