项目4 数码管广告牌设计_第1页
项目4 数码管广告牌设计_第2页
项目4 数码管广告牌设计_第3页
项目4 数码管广告牌设计_第4页
项目4 数码管广告牌设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

数码管广告牌设计项目4

任务1简易广告牌设计:在一个数码管上顺序显示‘H’、‘E’、‘L’、‘L’、‘O’跟我学-------认识8段LED数码管

1.数码管的结构共阳极

共阴极

VCCGND共阳极数码管显示注意Com端接Vcc,低电平点亮数码管共阴极数码管显示注意Com端接GND,高电平点亮数码管2.LED数码管的字型编码字型00011111共阳极

VCC字型码dpgfedcba10010010动手做1——画出硬件电路图

单片机有4组8位的I/O口P0、P1、P2、P3,任意一个I/O口都可以用来控制一个数码管工作(P0口要外接上拉电阻),该任务采用P1口,用单片机控制一个数码管工作的电路如图所示。图中采用的是共阳极数码管。如果是共阴极数码管,则将COM端接地。

动手做2——程序分析设计

在一个数码管上顺序显示多个字符,则需向P1口多次传送字符对应的二进制字型码数据,并在每次传送完一个数据后都要加一段延时函数,因此我们可以考虑把多个字符的字型码建一个一维数组:unsignedcharled[]={0x89,0x86,0xc7,0xc7,0xc0};通过定义LED数组的语句来存放字符‘H’、‘E’、‘L’、‘L’、‘O’的显示字型码。再用如下语句:P1=led[i];(i的取值范围为0~5)将显示字型码通过P1口送到LED段控制端,显示相应的数字。将数组元素的下标作为循环控制变量是最常见的数组应用方法。#include<reg51.h>voiddelay1s();//采用定时器1实现1秒延时子函数voiddisp1();//顺序显示字符‘H’、‘E’、‘L’、‘L’、‘O’一次的子函数voidmain() //主函数{while(1){disp1();}}//函数名:disp1//函数功能:顺序显示字符‘H’、‘E’、‘L’、‘L’、‘O’一次//形式参数:无//返回值:无disp1(){unsignedcharled[]={0x89,0x86,0xc7,0xc7,0xc0};//定义数组led存放字符‘H’、‘E’、‘L’、‘L’、‘O’的字型码unsignedchari;for(i=0;i<5;i++){P1=led[i];//字型显示码送段控制口P1delay1s(); //延时1秒}}//函数名:delay1s//函数功能:采用定时器1、工作方式1实现1s延时,晶振频率12MHz//形式参数:无//返回值:无voiddelay1s(){unsignedchari;TMOD=0x10; //设置定时器1工作于方式1for(i=0;i<0x14;i++){ //设置20次循环次数

TH1=0x3c; //设置定时器初值为3CB0HTL1=0xb0;TR1=1; //启动T1while(!TF1);//查询计数是否溢出,即定时50ms时间到,TF1=1TF1=0; //50ms定时时间到,将T1溢出标志位TF1清零

}}动手做3——proteus仿真从PROTEUS中选取如下元器件:(1)AT89C51,单片机;(2)RES、RX8,电阻、排阻;(3)CAP、CAP-ELEC,电容、电解电容;(4)CRYSTAL,晶振;BUTTON,按键(5)7SEG-COM-AN-BLUE,共阳极数码管。

任务2小王的生日是91年08月12号,用单片机控制六个LED数码管固定显示“910812”。用单片机控制6个数码管

单片机P1.0P1.7abcdefgdpP2.0P2.1P2.5。。。LED2LED6。。。LED1每个数码管的COM端接另一个并行口中的一位所有数码管的段选端共用一个并行口动手做1——画出硬件电路图

观察电路,我们采用P2口加六反相器74LS04控制共阳数码管的位选端,采用P1加八同相三态缓冲器/线驱动器74LS245驱动,那么P2口相应的引脚要输出低电平,P1口并送出相应的字型显示编码才能点亮相应的数码管,而最简易的编程语句就是:P2=0xfe;P1=0x90;同理,要显示第二、三……第六个数码管,也是类似的编程。以下列出显示六个字符P2、P1口依次要输出的数据如表3.5所示,我们查找规律,简化程序。下表显示六个字符P2、P1口依次输出的数据动手做2——程序分析设计显示字符91081 2P211111110B11111101B11111011B11110111B11101111B11011111BP10x900xf90xc00x800xf90xa4#include<reg51.h>//函数名:delay10ms//函数功能:采用定时器1、工作方式1实现10ms延时,晶振频率12MHz//形式参数:无//返回值:无voiddelay10ms(){TMOD=0x10; //设置定时器1工作于方式1TH1=0xd8; //置定时器初值

TL1=0xf0; TR1=1; //启动定时器1while(!TF1);//查询计数是否溢出,即定时到,TF1=1TF1=0; //10ms定时时间到,将定时器溢出标志位TF1清零}//函数名:disp2//函数功能:实现六个数码管动态扫描一次,显示数字“910812”//形式参数:无//返回值:无voiddisp2(){unsignedcharled[]={0x90,0xf9,0Xc0,0x80,0xf9,0xa4};//设置数字“910812”的字型码unsignedchari,w;w=0x01; //位选码初值为01Hfor(i=0;i<6;i++){P2=~w;//位选码取反后送位控制口P2口

w<<=1; //位选码左移一位,选中下一位LEDP1=led[i];//显示字型码送P1口

delay10ms(); //延时10ms}}main() //主函数{while(1){disp2();}}二维数组的定义和引用二维数组定义的一般形式是:

类型说明符数组名[常量表达式1][常量表达式2];

其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的长度

intnum[3][4];说明了一个三行四列的数组,数组名为num,该数组共包括3×4个数组元素,即:num[0][0],num[0][1],num[0][2],num[0][3]num[1][0],num[1][1],num[1][2],num[1][3]num[2][0],num[2][1],num[2][2],num[2][3]二维数组的存放方式是按行排列,放完一行之后顺次放入第二行。

二维数组的初始化二维数组初始化赋值可按行分段赋值,也可按行连续赋值。例如对数组a[3][4]进行赋值:(1)按行分段赋值可写为:

inta[3][4]={{80,75,92,61},{65,71,59,63},{70,85,87,90}};

(2)按行连续赋值可写为:

inta[3][

温馨提示

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

评论

0/150

提交评论