文档详情

数码管的闪烁显示.doc

发布:2017-01-31约3.19千字共8页下载文档
文本预览下载声明
目录 一. 系统功能简介 2 二. 硬件电路设计 2 1.Proteus原理图: 2 2.元件清单: 3 三. 软件设计 3 1. 流程图: 3 2. 程序: 4 四.系统调试 6 4.1仿真: 6 4.1.1步骤: 6 4.1.2 仿真图片: 6 4.1.3 结果: 7 4.2硬件电路调试: 7 4.2.1 步骤: 7 4.2.2运行结果照片: 8 4.2.3结论: 9 4.2.4系统使用说明: 9 五.系统设计感受 9 系统功能简介 由P2口将所要显示的七段显示码直接输出到4位数字七段LED数码管模块,再由P1口的低四位将扫描信号直接送到七段显示模块的4个公共端,使这个七段LED数码管模块闪烁“2008”3次,再闪烁“0315”3次,如此循环不停。 硬件电路设计 1.Proteus原理图: 2.元件清单: 名称 型号 数量(个) 电阻 3WATT100R 8 电阻 3WATT1K 4 LED数码管 7SEG-MPX1-CA 4 三极管 2N3905 4 芯片 AT89C51 1 软件设计 流程图: 程序: /* ch05-4-2.c - 直接驱动4位七节显示器实验,P1.0~3为扫描信号 P2接七节显示器 */ //==声明区==================================== #include reg51.h // 定义8051暂存器之标头档,P2-17~19 #define SCANP P1 // 定义扫瞄码由Port 1输出 #define SEG7P P2 // 定义七节显示码由Port 2输出 char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0-4 0x92, 0x83, 0xf8, 0x80, 0x98 }; //数字5-9 char code disp[2][4]={ {2,0,0,8}, // 显示资料(第0组) {0,3,1,5}}; // 显示资料(第1组) void delay1ms(int); // 声明延迟函数 void scanner(char); // 扫瞄函数 //==主程序==================================== main() // 主程序开始 { char i,j; // 声明变数i,j while(1) // 无穷循环,程序一直跑 { for(i=0;i2;i++) // 显示第0,1行字组,for循环(字组i)开始 for(j=0;j3;j++) // 闪烁三次 { scanner(i); // 扫瞄第i行字组 SCANP=0xff; // 全灭 delay1ms(480); // 延迟480 1m=0.48s } } // while循环结束 } // 主程序结束 //==子程序==================================== /* 延迟函数,延迟约x 1ms */ void delay1ms(int x) // 延迟函数开始 { int i,j; // 声明整数变数i,j for (i=0;ix;i++) // 计数x次,延迟x 1ms for (j=0;j120;j++); // 计数120次,延迟1ms } // 延迟函数结束 /* 扫瞄字组函数,显示第x组数字 */ void scanner(char x) // 扫瞄字组函数开始 { char i,j,BCD,scan; // 声明变数 for (i=0;i30;i++) // 扫瞄30次i循环 { scan=0xf7; // 扫瞄信号初值1111 0111 for (j=0;j4;j++) // 扫瞄4个数字j循环 { SEG7P=0xff; // 关闭七段显示器(防止闪动) SCANP=scan; // 输出扫瞄信号(低4位元) BCD=disp[x][j]; // 读取第x组第j个数字之BCD码 SEG7P=TAB[BCD]; // 输出至七节显示器 delay1ms(4); // 延迟4ms scan=1;
显示全部
相似文档