Arduino 入门到精通 例程16-四位数码管
4位数码管实验报告
竭诚为您提供优质文档/双击可除4位数码管实验报告篇一:数码管实验报告篇一:实验八数码管led实验报告苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:数码管led实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。
二.实验内容理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。
由于只有四个数码管,所以只显示mcu运行到目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。
另外,也可以通过pc方的串口通信程序,指定计时的开始值。
三.实验过程(一)原理图图8-2数码管外形dpabcefgdp图8-1数码管(二)接线图图8-3mcu与4连排8段数码管的连接第1页(三)基本原理8段数码管一般由8个发光二极管(llight-emittingdiode,led)组成,每一个位段就是一个发光二极管。
一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h(或记为dp)组成。
根据公共端所接电平的高低,可分为共阳极和共阴极两种。
有时数码管不需要小数点,只有7个位段,称7段数码管。
共阴极8段数码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:要使a段发光,则在发光。
四.编程(一)流程图图8-4数码管led显示流程图(及其中断子程序)(二)所用寄存器名称及其各个位程序中没有使用与led显示相关的控制和状态寄存器,仅仅使用了通用i/o口a口和b口。
(三)主要代码段1第2页第3页2.c第4页第5页篇二:数码管实验报告单片机实验报告一、实验名称数码管动态扫描显示01234567(实验五)二、实验目的(1)掌握数码管显示数字的原理。
(2)通过不同的编程实现灵活运用数码管。
4位拨动开关控制数码管显示系统设计
4位拨动开关控制数码管显⽰系统设计务书设计题⽬4位拨动开关控制数码管显⽰系统设计学⽣姓名设计要求:1.电源电路具有电源开关及指⽰灯,有复位按键;2.⾼4位开关屏蔽;3.⽤4位拨码开关为输⼊,控制数码管显⽰器的输出;4.实现功能:通电复位后数码管全显即显“8”,数码管对应4位DIP开关的⼆进制输⼊显⽰⼗六进制全部字符即从“0”到“F”。
学⽣应完成的⼯作:1.了解单⽚机系统的设计⽅法,设计步骤;2.查找并收集相关资料书籍;3.完成硬件原理图设计;4.完成软件和流程图的设计;5.对系统进⾏仿真;6.焊接电路板,调试系统;7.认真撰写课程设计报告。
8.孙晓界同学主要负责软件设计参考⽂献阅读:[1] 张毅刚,彭喜元,彭宇. 单⽚机原理及应⽤[M]. 北京:⾼等教育出版社,2009.[2] 杜树春. 单⽚机C语⾔和汇编语⾔混合编程实例详解[M]. 北京:北京航空航天⼤学出版社,2006.[3] 童诗⽩,华成英. 模拟电⼦技术基础(第四版)[M]. 北京:⾼等教育出版社,2006.[4] 林志琦. 基于Proteus的单⽚机可视化软硬件仿真[M]. 北京:北京航空航天⼤学出版社,2006. ⼯作计划:5⽉6⽇:查阅相关资料,拟定⽅案;5⽉7⽇:进⾏⽅案论证,完善设计⽅案;5⽉8⽇:完成硬件设计;5⽉9⽇:设计程序流程图;5⽉10⽇:完成软件设计,并进⾏仿真和调试;5⽉13⽇:进⾏焊接;5⽉14⽇:烧写程序;5⽉15⽇:调试电路;5⽉16⽇:与辅导⽼师交流,写课程设计报告;5⽉17⽇:上交课程设计报告及实物。
任务下达⽇期:2013 年5⽉ 6 ⽇任务完成⽇期:2013 年5⽉17 ⽇指导教师(签名):学⽣(签名):4位拨动开关控制数码管显⽰系统设计摘要:⽤AT89S52单⽚机作为核⼼,利⽤晶振,共阳极数码管,7805,桥堆2w10等器件进⾏设计,由电源电路、复位电路、时钟电路、输⼊输出电路等设计⼀个控制电路。
利⽤汇编编写控制程序,程序使⽤查表法进⾏编写。
Arduino认知
Arduino认知这学期我们接触了一个新的课程——Arduino。
看着很难懂的一个名称,其实内容很有趣,过程很精彩,并且与上学期学的C语言有一定的相通之处,这给我们的学习过程减轻了很多难处。
这个学科我们一共做了11个实验,分别是光敏电阻、PWN脉宽调制、火焰传感器、4*4数码矩阵、温度传感器、4位数码管显示、人体传感器、RGB三色基LED、舵机控制、LCD1602、超声波测距。
每一个实验都都有不同的实验结果,会给我们带来不一样的体验,给我们增加了很多新奇的体验。
比如说,光敏电阻会因为光感的强弱来改变电阻的闪动频率;温度传感器可以检测到温度,改变呈现给我们数值;4位数码管显示器也很有意思,在程序上输入你想在数码管上显示的字母、数字,待程序完成并执行后就可以在数码管的液晶屏上看到你想呈现的东西;舵机控制的实验,可以看到舵机的螺旋桨转动;RGB三色基LED会出现红绿蓝三色接替闪烁,等等。
每完成一个实验,看到相应的实验结果就满满的成就感。
这里面的实验每一个都需要对应的程序来实现,所以我们每做一个实验的第一步就是敲程序,程序或多或少会有些枯燥,但一想到可以看不同的实验现象就会活力满满。
接下来就具体介绍以下Arduino的来源、作用及实用工具等。
Arduino是源于意大利的一套开源硬件开发平台,他的的作用是能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。
板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。
特色:可开放源代码的电路图设计,程序开发接口免费下载,也可依个人需求自己修改。
是使用低价格的微处理控制器(AVR系列控制器),可以采用USB接口供电,不需外接电源,也可以使用外部9VDC输入。
Arduino支持ISP在线烧,可以将新的“bootloader”固件烧入AVR芯片。
有了bootloader之后,可以通过串口或者USB to RS232线更新固件。
4位数码管计时器程序
/******************************************************************************************* **/#include<STC12C2052AD.H>//STC头文件/******************************************************************************************* ***///“程序开发调试设置项”#define DY_LI 9 //设置LED显示的亮度(值域:~9)#define DY_DELAY 12 //设置每一个点显示的时间长度(~20)/******************************************************************************************* ***/sbit DY_LED1_H1 =P3 ^ 0; //设置LED点阵屏连接的I/O口sbit DY_LED1_H2 =P3 ^ 1; //设置LED点阵屏连接的I/O口sbit DY_LED1_H3 =P3 ^ 2; //设置LED点阵屏连接的I/O口sbit DY_LED1_H4 =P3 ^ 3; //设置LED点阵屏连接的I/O口sbit DY_LED1_L1 =P1 ^ 0; //设置LED点阵屏连接的I/O口sbit DY_LED1_L2 =P1 ^ 1; //设置LED点阵屏连接的I/O口sbit DY_LED1_L3 =P1 ^ 2; //设置LED点阵屏连接的I/O口sbit DY_LED1_L4 =P1 ^ 3; //设置LED点阵屏连接的I/O口sbit DY_LED1_L5 =P1 ^ 4; //设置LED点阵屏连接的I/O口sbit DY_LED1_L6 =P1 ^ 5; //设置LED点阵屏连接的I/O口sbit DY_LED1_L7 =P1 ^ 6; //设置LED点阵屏连接的I/O口sbit DY_LED1_L8 =P1 ^ 7; //设置LED点阵屏连接的I/O口//sbit DY_BEEP =P2 ^ 2; //扬声器//sbit DY_KEY1 =P0 ^ 2; //按键(M键)(连接在P1.3和P0.2,读P0.2为低时表示有按键动作)//sbit DY_KEY2 =P3 ^ 0; //按键(+键)(连接在P4.6和P3.0,读P3.0为低时表示有按键动作)//sbit DY_KEY3 =P3 ^ 6; //按键(-键)(连接在P2.4和P3.6,读P3.6为低时表示有按键动作)#define DY_P1M0SET 0x00 //设置I/O口工作方式//00000000(左到右,高到低位)#define DY_P1M1SET 0x00 //设置I/O口工作方式//00101000#define DY_P3M0SET 0x00 //设置I/O口工作方式//00000000#define DY_P3M1SET 0xff //设置I/O口工作方式//10010100data unsigned char TIME_DD,TIME_MO,TIME_YY,TIME_WW,TIME_HH,TIME_MM,TIME_SS,ty;//设置日、月、年、周、时、分、秒和温度存放区data unsigned char cou = 0; // 软计数器,对ms时基信号累加到sdata unsigned char bn;//扫描映射全局变量data unsigned char KEY_BIT = 0;//按键值data unsigned char DY_PWM;//显示亮度data unsigned char DY_PWM2;//显示暂存unsigned char code disdata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f //无小数点数码管段码表(0~9)};/******************************************************************************************* **/void delay (unsigned int a){ // 用于点扫描的延时unsigned int i;while( --a != 0){for(i = 0; i < DY_DELAY; i++);}}/******************************************************************************************* **/void delay1ms (unsigned int a){ // 1ms延时程序(MHz 10倍于单片机速度时)unsigned int i;while( --a != 0){for(i = 0; i < 600; i++);}}/******************************************************************************************* **/void dis_off (void){P1 = ~DY_P1M1SET; //关所有显示P3 = ~DY_P3M1SET;delay(10-DY_PWM);}/******************************************************************************************* **/void displayHH1 (unsigned char d){ //第列横向显示程序unsigned char i;i = d & 0x01;if(i == 0x01){DY_LED1_H1 = 1;DY_LED1_L1 = 0;}delay(DY_PWM);dis_off();i = d & 0x02;if(i == 0x02){DY_LED1_H1 = 1;DY_LED1_L2 = 0;}delay(DY_PWM);dis_off();i = d & 0x04;if(i == 0x04){DY_LED1_H1 = 1;DY_LED1_L3 = 0;}delay(DY_PWM);dis_off();i = d & 0x08;if(i == 0x08){DY_LED1_H1 = 1;DY_LED1_L4 = 0;}delay(DY_PWM);dis_off();i = d & 0x10;if(i == 0x10){DY_LED1_H1 = 1;DY_LED1_L5 = 0;}delay(DY_PWM);dis_off();i = d & 0x20;if(i == 0x20){DY_LED1_H1 = 1;DY_LED1_L6 = 0;}delay(DY_PWM);dis_off();i = d & 0x40;if(i == 0x40){DY_LED1_H1 = 1;DY_LED1_L7 = 0;}delay(DY_PWM);dis_off();i = d & 0x80;if(i == 0x80){DY_LED1_H1 = 1;DY_LED1_L8 = 0;}delay(DY_PWM);dis_off();}/******************************************************************************************* **/void displayHH2 (unsigned char d){ //第列横向显示程序unsigned char i;i = d & 0x01;if(i == 0x01){DY_LED1_H2 = 1;DY_LED1_L1 = 0;}delay(DY_PWM);dis_off();i = d & 0x02;if(i == 0x02){DY_LED1_H2 = 1;DY_LED1_L2 = 0;}delay(DY_PWM);dis_off();i = d & 0x04;if(i == 0x04){DY_LED1_H2 = 1;DY_LED1_L3 = 0;}delay(DY_PWM);dis_off();i = d & 0x08;if(i == 0x08){DY_LED1_H2 = 1;DY_LED1_L4 = 0;}delay(DY_PWM);dis_off();i = d & 0x10;if(i == 0x10){DY_LED1_H2 = 1;DY_LED1_L5 = 0;}delay(DY_PWM);dis_off();i = d & 0x20;if(i == 0x20){DY_LED1_H2 = 1;DY_LED1_L6 = 0;}delay(DY_PWM);dis_off();i = d & 0x40;if(i == 0x40){DY_LED1_H2 = 1;DY_LED1_L7 = 0;}delay(DY_PWM);dis_off();i = d & 0x80;if(i == 0x80){DY_LED1_H2 = 1;DY_LED1_L8 = 0;}delay(DY_PWM);dis_off();}/******************************************************************************************* **/void displayHH3 (unsigned char d){ //第列横向显示程序unsigned char i;i = d & 0x01;if(i == 0x01){DY_LED1_H3 = 1;DY_LED1_L1 = 0;}delay(DY_PWM);dis_off();i = d & 0x02;if(i == 0x02){DY_LED1_H3 = 1;DY_LED1_L2 = 0;}delay(DY_PWM);dis_off();i = d & 0x04;if(i == 0x04){DY_LED1_H3 = 1;DY_LED1_L3 = 0;}delay(DY_PWM);dis_off();i = d & 0x08;if(i == 0x08){DY_LED1_H3 = 1;DY_LED1_L4 = 0;}delay(DY_PWM);dis_off();i = d & 0x10;if(i == 0x10){DY_LED1_H3 = 1;DY_LED1_L5 = 0;}delay(DY_PWM);dis_off();i = d & 0x20;if(i == 0x20){DY_LED1_H3 = 1;DY_LED1_L6 = 0;}delay(DY_PWM);dis_off();i = d & 0x40;if(i == 0x40){DY_LED1_H3 = 1;DY_LED1_L7 = 0;}delay(DY_PWM);dis_off();i = d & 0x80;if(i == 0x80){DY_LED1_H3 = 1;DY_LED1_L8 = 0;}delay(DY_PWM);dis_off();}/******************************************************************************************* **/void displayHH4 (unsigned char d){ //第列横向显示程序unsigned char i;i = d & 0x01;if(i == 0x01){DY_LED1_H4 = 1;DY_LED1_L1 = 0;}delay(DY_PWM);dis_off();i = d & 0x02;if(i == 0x02){DY_LED1_H4 = 1;DY_LED1_L2 = 0;}delay(DY_PWM);dis_off();i = d & 0x04;if(i == 0x04){DY_LED1_H4 = 1;DY_LED1_L3 = 0;}delay(DY_PWM);dis_off();i = d & 0x08;if(i == 0x08){DY_LED1_H4 = 1;DY_LED1_L4 = 0;}delay(DY_PWM);dis_off();if(i == 0x10){DY_LED1_H4 = 1;DY_LED1_L5 = 0;}delay(DY_PWM);dis_off();i = d & 0x20;if(i == 0x20){DY_LED1_H4 = 1;DY_LED1_L6 = 0;}delay(DY_PWM);dis_off();i = d & 0x40;if(i == 0x40){DY_LED1_H4 = 1;DY_LED1_L7 = 0;}delay(DY_PWM);dis_off();i = d & 0x80;if(i == 0x80){DY_LED1_H4 = 1;DY_LED1_L8 = 0;}delay(DY_PWM);dis_off();}/******************************************************************************************* **/void diplay_data (unsigned char l,unsigned char d){switch (l){//显示的列位置case 1://displayHH1(d); //将显示数据送入break;//case 2://displayHH2(d); //将显示数据送入break;//case 3://displayHH3(d); //将显示数据送入break;//case 4://displayHH4(d); //将显示数据送入break;//}}/******************************************************************************************* **/void init (void){ //上电初始化P1M0 = DY_P1M0SET;P1M1 = DY_P1M1SET;P3M0 = DY_P3M0SET;P3M1 = DY_P3M1SET;////dis_off();DY_PWM = DY_LI;////TMOD = 0x11; // 定时/计数器,1工作于方式TH0 = 0x3c; // 预置产生ms时基信号EA = 1; // 开总中断ET0 = 1; // 定时/计数器允许中断TR0 = 1; // 开闭定时/计数器//////TIME_DD = 18; //时间在首次使用的值,之后会在EEPROM自动记录上一天的值//TIME_MO = 5; //初始时间:年月日周一,时分秒//TIME_YY = 9;//TIME_WW = 1;//TIME_HH = 22;//TIME_MM = 13;//TIME_SS = 40;}/******************************************************************************************* **/void main (void){ //主程序init();while (1){diplay_data (1,disdata[TIME_MM/10]);diplay_data (2,disdata[TIME_MM%10]);diplay_data (3,disdata[TIME_SS/10]+0x80);diplay_data (4,disdata[TIME_SS%10]+0x80);}}/******************************************************************************************* ***/void tiem0(void) interrupt 1{ // T/C0中断服务程序(产生ms时基信号)cou++; // 软计数器加if(cou > 19){ // 计数值到(1s)cou = 0; // 软计数器清零TIME_SS++; // 秒计数器加(进位ms*100=1s)if(TIME_SS > 59){ // 秒计数值到TIME_SS = 0; // 秒计数器清零TIME_MM++; // 分计数器加(进位s=1m)if(TIME_MM > 59){ // 分计数到TIME_MM = 0; // 分计数器清零TIME_HH++; // 时计数器加(进位m=1h)if(TIME_HH > 23){ // 时计数到TIME_HH = 0; // 时计数器清零}}}}TH0 = 0x3c; // 重置定时常数TL0 = 0xb0;}/******************************************************************************************* ***//*************************************************************/*************************************************************/。
四位数码管接线图
ARK SR420561k SR410561K 四位一体数码管的引脚图判断
市面上卖的数码管一般都不会有DATASHEET或者说明文件,具体我也查了几个厂家,厂家基本都是在该元件的功能和具体电压电流值做些介绍,其他涉及到引脚排列,引脚图和封装图是不会给出的。
原因可能是1 涉及商业机密? 2厂家不屑给出,因为很好判断。
但是这样可难为初学者了,所以为了方便大家查找,在这里ZG工作室会陆续推出各种数码管和点阵管的引脚排列。
4位一体数码管,其内部段已连接好,引脚如图所示(数码管的正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。
数码管正面朝向自己、小数点在下方;然后上方的引脚从左到右为1-2-3-4-5-6 ;
下方的引脚从右到左为7--8-9-10-11-12;(可能和原理图封装脚不一样,本例只是告诉大家如何快速识别)
SEG1 表示控制第一个数码管SEG2表示控制第2个数码管、依此类推。
注意:ARK SR420561k SR410561K的引脚排列是一模一样的!只是ark sr420561k 共阴极
ark sr410561k 共阳极。
Arduino和数码管
图 6‐1 数码管分类 按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有 发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的 阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成 公共阴极(COM)的数码管。共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一
1条
烧录程序
随板子配送
4
杜邦线
若干条
连接组件
5
数码管
1个
显示
6
面包板
可选
6.3 元器件介绍 对于元器件,重点就是数码管,弄懂了数码管的显示原理,做本实验就相对简单。所以
接下重点介绍数码管的原理。 1) 分类 按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元
(多一个小数点显示); 按能显示多少个“8”可分为 1 位、2 位、4 位等等数码管,如图 6‐1 所示;
SmartArduino
我们最好调换正负极的顺序进行测试。直到有数码管灯亮为止。如图 6‐4 是本次用来判断数 码管正负极性所用的实物电路图。需要提醒的是,在测试时,一定要接入线路电阻。不要烧 毁数码管的二极管。在图 6‐4 中,正极(拿在手上的)接 Arduino 主板上的+5V,负极通过 杜邦线的母线接在数码管的公共端口(COM)上。此时,数码管的有个灯亮了(其实是对应 管脚 10)。这说明发光二极管 LED 的正负极性是导通的。所以,阴极是公共的,即共阴极。
0
0
0
1
1
1
0
1
四位数码管自动点亮
数字起航—实验零基础电子设计系列课程
主讲人:范秋华
国家级电工电子实验教学中心(青岛大学)
6.1基础实验
6.1.1 一个LED点亮的控制
6.1.2 一位数码管点亮的控制
6.1.3 四位数码管点亮的控制
6.1.4 一个LED动态闪亮的控制
6.1.5 四位数码管自动点亮
6.1.6 加使能端控制四位数码管点亮6.2复杂实验
6.2.1 流水灯的设计
6.2.2 呼吸灯的设计
6.2.3 音乐基础的设计
6.2.4 简易电子琴的设计
6.2.5 乐曲播放器设计
6.3综合试验
6.3.1 音乐彩灯的设计
6.1.5 四位数码管自动点亮的控制
图数码管硬件接线图
实验任务:有四个共阴极数码管。
通电后4个数码管依次自动循环点亮0,1,…,9,A,B,C,D,E,F。
每个点亮1/3秒参数指标:系统时钟100MHz。
管脚约束
CLK---P17
VHDL 程序编写
设计思路:首先设计以分频器,输出高电平1/3秒。
对分频信号16进制计数,把计数值译码给数码管的相应段码,同时制定数码管的位码。
请看下载演示!
数字启航实验内容4国家级电工电子实验教学中心。
四位数码管
例程19.arduino驱动四位数码管这次我们进行的实验是使用arduino驱动一块共阳四位数码管。
驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。
这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。
另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。
本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。
4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。
左上角为最大的12号管脚。
下图为数码管的说明手册下面是硬件连接图ARDUINO CODECOPY //设置阴极接口int a = 1;int b = 2;int c = 3;int d = 4;int e = 5;int f = 6;int g = 7;int p = 8;//设置阳极接口int d4 = 9;int d3 = 10;int d2 = 11;int d1 = 12;//设置变量long n = 0;int x = 100;int del = 55; //此处数值对时钟进行微调void setup(){pinMode(d1, OUTPUT);pinMode(d2, OUTPUT);pinMode(d3, OUTPUT);pinMode(d4, OUTPUT);pinMode(a, OUTPUT);pinMode(b, OUTPUT);pinMode(c, OUTPUT);pinMode(d, OUTPUT);pinMode(e, OUTPUT);pinMode(f, OUTPUT);pinMode(g, OUTPUT);pinMode(p, OUTPUT);}void loop(){clearLEDs();pickDigit(1);pickNumber((n/x/1000)%10);delayMicroseconds(del);clearLEDs();pickDigit(2);pickNumber((n/x/100)%10);delayMicroseconds(del);clearLEDs();pickDigit(3);dispDec(3);pickNumber((n/x/10)%10);delayMicroseconds(del);clearLEDs();pickDigit(4);pickNumber(n/x%10);delayMicroseconds(del);n++;if (digitalRead(13) == HIGH){n = 0;}}void pickDigit(int x) //定义pickDigit(x),其作用是开启dx端口{digitalWrite(d1, LOW);digitalWrite(d2, LOW);digitalWrite(d3, LOW);digitalWrite(d4, LOW);switch(x){case 1:digitalWrite(d1, HIGH);break;case 2:digitalWrite(d2, HIGH);break;case 3:digitalWrite(d3, HIGH);break;default:digitalWrite(d4, HIGH);break;}}void pickNumber(int x) //定义pickNumber(x),其作用是显示数字x {switch(x){default:zero();break;case 1:one();break;case 2:two();break;case 3:three();break;case 4:four();break;case 5:five();break;case 6:six();break;case 7:seven();break;case 8:eight();break;case 9:nine();break;}}void dispDec(int x) //设定开启小数点{digitalWrite(p, LOW);}void clearLEDs() //清屏digitalWrite(a, HIGH);digitalWrite(b, HIGH);digitalWrite(c, HIGH);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);digitalWrite(p, HIGH);}void zero() //定义数字0时阴极那些管脚开关{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, HIGH);}void one() //定义数字1时阴极那些管脚开关{digitalWrite(a, HIGH);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);}void two() //定义数字2时阴极那些管脚开关{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, HIGH);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, HIGH);digitalWrite(g, LOW);}{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, LOW);}void four() //定义数字4时阴极那些管脚开关{digitalWrite(a, HIGH);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, LOW);digitalWrite(g, LOW);}void five() //定义数字5时阴极那些管脚开关{digitalWrite(a, LOW);digitalWrite(b, HIGH);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, HIGH);digitalWrite(f, LOW);digitalWrite(g, LOW);}void six() //定义数字6时阴极那些管脚开关{digitalWrite(a, LOW);digitalWrite(b, HIGH);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, LOW);}{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);}void eight() //定义数字8时阴极那些管脚开关{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, LOW);}void nine() //定义数字9时阴极那些管脚开关{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, HIGH);digitalWrite(f, LOW);digitalWrite(g, LOW);}把下面代码复制下载到控制板中,看看效果。
Arduino教程及简明例程
数字输出Arduino教程一:11 Comments ?Arduino教程,。
除了管脚的数字Arduino7到管脚2I/O个可用的6I/O被分成两个部分,其中每个部分都包含有管脚,即管脚到管脚8和管脚13I/O1K上接了一个13来对位的数字跑马灯,6上。
ATmega其他各个管脚都直接连接到的电阻之外,我们可以利用一个Arduino数字的输出功能进行验证,以下是相应的原理图:电阻被称为限流电阻,I/O电路中在每个管脚上加的那个1K使用限流电阻可由于发光二极管在电路中没有等效电阻值,以使元件上通过的电流不至于过大,能够起到保护的作用。
该工程对应的代码为:int BASE = 2;int NUM = 6;int index = 0;void setup(){++) BASE; = i (int for i + BASE < i NUM;{pinMode(i, OUTPUT);}}void loop(){for (int i = BASE; i < BASE + NUM; i ++) {digitalWrite(i, LOW);}digitalWrite(BASE + index, HIGH);index = (index + 1) % NUM;delay(100);}2管脚I/O数字Arduino下载并运行该工程,连接在上的发光二极管会依次点亮7到管脚0.1秒,然后再熄灭:1 / 28这个实验可以用来验证数字I/O输出的正确性。
Arduino上一共有十二个数字I/O管脚,我们可以用同样的办法验证其他六个管脚的正确性,而这只需要对上述工程的第一行做相应的修改就可以了:int BASE = 8;01SEPArduino教程二: 数字输入3 Comments ?Arduino, 教程在数字电路中开关(switch)是一种基本的输入形式,它的作用是保持电路的连接或者断开。
Arduino从数字I/O管脚上只能读出高电平(5V)或者低电平(0V),因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成Arduino 能够读取的高/低电平。
四位数码管编程
4位数码管实验产品介绍:四位数码管是由四个共阴数码管组合而成,四位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。
实验器件:■ 4位数码管:1 个■多彩面包板实验跳绳:若干实验连线将代码上传到开发板。
程序代码(直接打开对应例程即可)//静态程序(静态显示1234)实验结论:上电后四位数码管静态显示1234.4位数码管实验产品介绍:四位数码管是由四个共阴数码管组合而成,四位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。
实验器件:■ 4位数码管:1 个■多彩面包板实验跳绳:若干实验连线将代码上传到开发板。
程序代码(直接打开对应例程即可)//静态程序(静态显示1234)int ledCount=8;int segCount=4;long previousMillis = 0;const unsigned chardofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};int ledPins[] = {12,8,5, 3, 2, 11, 6, 4, };int segPins[]={13,10,9,7};unsigned char displayTemp[4];//显示缓冲区void setup() {// 循环设置,把对应的端口都设置成输出for (int thisLed = 0; thisLed < ledCount; thisLed++) {pinMode(ledPins[thisLed], OUTPUT); }for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {pinMode(segPins[thisSeg], OUTPUT);}}void deal(unsigned char value){for(int i=0;i<8;i++)digitalWrite(ledPins[i],bitRead(value,i));//使用了bitWrite 函数,非常简单// !bitRead(value,i)}void loop() {static unsigned int num;//定义一个数据static unsigned long lastTime=0;if (millis() - lastTime >= 1000) {lastTime = millis();//serialOutput();num++;}displayTemp[0]=dofly_DuanMa[1]; //静态显示displayTemp[1]=dofly_DuanMa[2];displayTemp[2]=dofly_DuanMa[3];displayTemp[3]=dofly_DuanMa[4];static int i;unsigned long currentMillis = millis();if(currentMillis - previousMillis > 0) {previousMillis = currentMillis;deal(0);// 清除“鬼影”for(int a=0;a<4;a++)digitalWrite(segPins[a],1);//digitalWrite(segPins[i],0);//deal(displayTemp[i]);//读取对应的段码值i++;if(i==4) //4 位结束后重新循环i=0;}}实验结论:上电后四位数码管静态显示1234.//动态程序int ledCount=8;int segCount=4;long previousMillis = 0;const unsigned chardofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};\ int ledPins[] = {12,8,5, 3, 2, 11, 6, 4, };int segPins[] = {13,10,9,7};unsigned char displayTemp[4];void setup() {// 循环设置,把对应的端口都设置成输出for (int thisLed = 0; thisLed < ledCount; thisLed++) {pinMode(ledPins[thisLed], OUTPUT); }for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {pinMode(segPins[thisSeg], OUTPUT);}}void deal(unsigned char value){for(int i=0;i<8;i++)digitalWrite(ledPins[i],bitRead(value,i));}void loop() {static unsigned int num;//定义一个数据static unsigned long lastTime=0;if (millis() - lastTime >= 1000) {lastTime = millis();//serialOutput();num++;}displayTemp[0]=dofly_DuanMa[num/1000]; //动态显示displayTemp[1]=dofly_DuanMa[(num%1000)/100];displayTemp[2]=dofly_DuanMa[((num%1000)%100)/10];displayTemp[3]=dofly_DuanMa[((num%1000)%100)%10];static int i;unsigned long currentMillis = millis();if(currentMillis - previousMillis > 0) {previousMillis = currentMillis;deal(0);for(int a=0;a<4;a++)digitalWrite(segPins[a],1);digitalWrite(segPins[i],0);//deal(displayTemp[i]);//读取对应的段码值i++;if(i==4) //4 位结束后重新循环i=0;}}实验结论:上电显示0000,然后每次加1,最后加到9999后回到0000。
PIC16f630使用74HC164驱动4位数码管
#DEFINE DAT_A PORTC,5;//数据移位输入端
#DEFINE CLK PORTC,4;;//数据移位时钟
#DEFINE BEEPER PORTC,2;----蜂鸣器输出端
#DEFINE LED_BP PORTC,1;----蜂鸣器报警指示灯
;------------------------------------------------------------
TABLE_TUBE:
ADDWF PCL,1
RETLW 3FH;0
RETLW 06H;1
RETLW 5BH;2
RETLW 4FH;3
RETLW 66H; 4
MOVLW 00H
MOVWF W_ADDR
MOVF TM_TEMPER,0
MOVWF W_DAT
CALL WR_EEP
RETURN
WR01;-------------------------------------写十位
; RC0---------------WEI_2
; RA0----WK1----WEI_3
; RA1----WK2----WEI_4
; RA4----WK3-----WEI_5
; RA3-----WK5----改为数字IO,做输入
;*/
#INCLUDE <P16F630.INC>
RETLW 6DH; 5
RETLW 7DH; 6
RETLW 07H;7
RETLW 7FH; 8
RETLW 6FH; 9
RETLW 00H;----段灭值,消影
arduino入门很简单(中)
O 6.1 使用到的专用器件 O 6.2 驱动单个LED程序 O 6.3 驱动LED点阵 O 6.4 使用74HC595驱动LED O 6.5 使用MAX7219驱动LED O 6.6 RGB三色LED
O 6.7 七段数码管
6.1 使用到的专用器件
O 在本节中只需要使用到一个专用的器件—
6.2.5 LED跑马灯
6.2.6 使用LED模拟交通灯
6.3 驱动LED点阵
O 6.3.1 LED点阵显示表情 O 6.3.2 LED点阵跑马灯 O 6.3.3 回纹灯 O 6.3.4 矩形回缩灯
6.3.1 LED点阵显示表情
6.3.2 LED点阵跑马灯
O 在6.3.5小节中实现了由三个LED组成的简
阵 O 6.5.6 MAX7219级联控制8*40LED点阵
6.5.1 MAX7219LED显示驱动器
O MAX7219是小巧但功能强大的串行输入输
出共阴极显示驱动器。它非常容易驱动七 段LED数码管和LED点阵。
6.5.2 MAX7219的数据格 式
O MAX7219的数据是以16位为一个单位的。
6.5.4 LedControl库
O LedControl函数库是一个可以全面控制
MAX7219的一个第三方库,它可以从 /uploads/Main/Le dControl.zip获取。
6.5.5 Arduino通过 MAX7219控制8*8LED点阵
6.7.1 Arduino直接控制七段数码管
6.7.2 Arduino通过74HC595 控制一个七段数码管
6.7.3 使用两个74HC595驱动4位七段数码 管
O 4位七段数码管通过多路复用技术将4个七
Arduino 入门到精通 例程16-四位数码管
Arduino 入门到精通例程16这次我们进行的实验是使用arduino驱动一块共阳四位数码管。
驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。
这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。
另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。
本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。
4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。
左上角为最大的12号管脚。
下图为数码管的说明手册下面是硬件连接图ARDUINO CODECOPY1.//设置阴极接口2.int a = 1;3.int b = 2;4.int c = 3;5.int d = 4;6.int e = 5;7.int f = 6;8.int g = 7;9.int p = 8;10.//设置阳极接口11.int d4 = 9;12.int d3 = 10;13.int d2 = 11;14.int d1 = 12;15.//设置变量16.long n = 0;17.int x = 100;18.int del = 55; //此处数值对时钟进行微调19.20.void setup()21.{22.pinMode(d1, OUTPUT);23.pinMode(d2, OUTPUT);24.pinMode(d3, OUTPUT);25.pinMode(d4, OUTPUT);26.pinMode(a, OUTPUT);27.pinMode(b, OUTPUT);28.pinMode(c, OUTPUT);29.pinMode(d, OUTPUT);30.pinMode(e, OUTPUT);31.pinMode(f, OUTPUT);32.pinMode(g, OUTPUT);33.pinMode(p, OUTPUT);34.}35.36.void loop()37.{38. clearLEDs();39. pickDigit(1);40. pickNumber((n/x/1000)%10);41.delayMicroseconds(del);42.43. clearLEDs();44. pickDigit(2);45. pickNumber((n/x/100)%10);46.delayMicroseconds(del);47.48. clearLEDs();49. pickDigit(3);50. dispDec(3);51. pickNumber((n/x/10)%10);52.delayMicroseconds(del);53.54. clearLEDs();55. pickDigit(4);56. pickNumber(n/x%10);57.delayMicroseconds(del);58.59. n++;60.61.if(digitalRead(13) == HIGH)62.{63. n = 0;64.}65.}66.67.void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口68.{69.digitalWrite(d1, LOW);70.digitalWrite(d2, LOW);71.digitalWrite(d3, LOW);72.digitalWrite(d4, LOW);73.74.switch(x)75.{76.case1:77.digitalWrite(d1, HIGH);78.break;79.case2:80.digitalWrite(d2, HIGH);81.break;82.case3:83.digitalWrite(d3, HIGH);84.break;85.default:86.digitalWrite(d4, HIGH);87.break;88.}89.}90.91.void pickNumber(int x)//定义pickNumber(x),其作用是显示数字x92.{93.switch(x)94.{95.default:96. zero();97.break;98.case1:99. one();100.break;101.case2:102. two();103.break;104.case3:105. three();106.break;107.case4:108. four();109.break;110.case5:111. five();112.break;113.case6:114. six();115.break;116.case7:117. seven();118.break;119.case8:120. eight();121.break;122.case9:123. nine();124.break;125.}126.}127.128.void dispDec(int x)//设定开启小数点129.{130.digitalWrite(p, LOW);131.}132.133.void clearLEDs()//清屏134.{135.digitalWrite(a, HIGH);136.digitalWrite(b, HIGH);137.digitalWrite(c, HIGH);138.digitalWrite(d, HIGH);139.digitalWrite(e, HIGH);140.digitalWrite(f, HIGH);141.digitalWrite(g, HIGH);142.digitalWrite(p, HIGH);143.}144.145.void zero()//定义数字0时阴极那些管脚开关146.{147.digitalWrite(a, LOW);148.digitalWrite(b, LOW);149.digitalWrite(c, LOW);150.digitalWrite(d, LOW);151.digitalWrite(e, LOW);152.digitalWrite(f, LOW);153.digitalWrite(g, HIGH);154.}155.156.void one()//定义数字1时阴极那些管脚开关157.{158.digitalWrite(a, HIGH);159.digitalWrite(b, LOW);160.digitalWrite(c, LOW);161.digitalWrite(d, HIGH);162.digitalWrite(e, HIGH);164.digitalWrite(g, HIGH);165.}166.167.void two()//定义数字2时阴极那些管脚开关168.{169.digitalWrite(a, LOW);170.digitalWrite(b, LOW);171.digitalWrite(c, HIGH);172.digitalWrite(d, LOW);173.digitalWrite(e, LOW);174.digitalWrite(f, HIGH);175.digitalWrite(g, LOW);176.}177.178.void three()//定义数字3时阴极那些管脚开关179.{180.digitalWrite(a, LOW);181.digitalWrite(b, LOW);182.digitalWrite(c, LOW);183.digitalWrite(d, LOW);184.digitalWrite(e, HIGH);185.digitalWrite(f, HIGH);186.digitalWrite(g, LOW);187.}188.189.void four()//定义数字4时阴极那些管脚开关190.{191.digitalWrite(a, HIGH);192.digitalWrite(b, LOW);193.digitalWrite(c, LOW);194.digitalWrite(d, HIGH);195.digitalWrite(e, HIGH);196.digitalWrite(f, LOW);197.digitalWrite(g, LOW);198.}199.200.void five()//定义数字5时阴极那些管脚开关201.{202.digitalWrite(a, LOW);204.digitalWrite(c, LOW);205.digitalWrite(d, LOW);206.digitalWrite(e, HIGH);207.digitalWrite(f, LOW);208.digitalWrite(g, LOW);209.}210.211.void six()//定义数字6时阴极那些管脚开关212.{213.digitalWrite(a, LOW);214.digitalWrite(b, HIGH);215.digitalWrite(c, LOW);216.digitalWrite(d, LOW);217.digitalWrite(e, LOW);218.digitalWrite(f, LOW);219.digitalWrite(g, LOW);220.}221.222.void seven()//定义数字7时阴极那些管脚开关223.{224.digitalWrite(a, LOW);225.digitalWrite(b, LOW);226.digitalWrite(c, LOW);227.digitalWrite(d, HIGH);228.digitalWrite(e, HIGH);229.digitalWrite(f, HIGH);230.digitalWrite(g, HIGH);231.}232.233.void eight()//定义数字8时阴极那些管脚开关234.{235.digitalWrite(a, LOW);236.digitalWrite(b, LOW);237.digitalWrite(c, LOW);238.digitalWrite(d, LOW);239.digitalWrite(e, LOW);240.digitalWrite(f, LOW);241.digitalWrite(g, LOW);242.}243.244.void nine()//定义数字9时阴极那些管脚开关245.{246.digitalWrite(a, LOW);247.digitalWrite(b, LOW);248.digitalWrite(c, LOW);249.digitalWrite(d, LOW);250.digitalWrite(e, HIGH);251.digitalWrite(f, LOW);252.digitalWrite(g, LOW);253.}把下面代码复制下载到控制板中,看看效果。
四位数码管静态点亮
数字起航—交互实验零基础电子设计系列课程
主讲人:范秋华
国家级电工电子实验教学中心(青岛大学)
6.1基础实验
6.1.1 一个LED点亮的控制
6.1.2 一位数码管点亮的控制
6.1.3 四位数码管点亮的控制
6.1.4 一个LED动态闪亮的控制
6.1.5 四位数码管自动点亮
6.1.6 加使能端控制四位数码管点亮6.2复杂实验
6.2.1 流水灯的设计
6.2.2 呼吸灯的设计
6.2.3 音乐基础的设计
6.2.4 简易电子琴的设计
6.2.5 乐曲播放器设计
6.3综合试验
6.3.1 音乐彩灯的设计
6.1.3 四位数码管点亮的控制
数码管硬件接线图
实验任务:有四个共阴极数码管。
可以手动随意从四个共阴极数码管中选择一个,并让选中的数码管显示0,1 (9)
A,B,C,D,E,F。
参数指标:系统时钟100MHz。
国家级电工电子实验教学中心
管脚约束
VHDL 程序编写
设计思路:
6个拨码开关输入,其中4个译码输出到数码管的7个段码。
另2个有四种组合译码输出控制4个数码管的位码。
请看下载演示!
数字启航实验内容4国家级电工电子实验教学中心
数字启航
国家级电工电子实验教学中心
再见!。
Arduino入门教程(17)—数码管显示
Arduino 入门教程(17)—数码管显示数码管,常见的用来显示数字的,比如像计算器。
这回我们就要来好好研究一下数码管,看看它是如何工作的。
数码管,其实也算是LED 中的一种。
数码管的每一段,都是一个独立的 LED,通过数字引脚来控制相应段的亮灭就能达到显示数字的效果。
这个项目要实现的是循环显示数字0~9。
所需材料1×八段数码管8×220 欧电阻 STEP 1:硬件连接按下图连线图连接,注意数码管各段所对应的引脚。
右边引脚说明图上为什么画这么几个箭头呢?个人觉得,这样看起来更方便。
可以给你作为参考。
我们从上面一排看,红色箭头的方向,从右往左,b a f g 的顺序正好对应,下面红色箭头逆时针顺序b --> a --> f --> g。
蓝色箭头也是表达的同样的意思。
还特意在连接图上,对数码管所连接的引脚做了标示。
这样就能更清楚的知道哪个引脚控制哪一段了。
这 8 个电阻同样是起限流的作用。
STEP 2:输入代码1. void setup(){2. for(int pin = 2 ; pin <= 9 ; pin++){ // 设置数字引脚2~9为输出模式3. pinMode(pin, OUTPUT);4. digitalWrite(pin, HIGH);5. }6. }7.8. void loop() {9. // 显示数字010. int n0[8]={0,0,0,1,0,0,0,1};11. //数字引脚2~9依次按数组n0[8]中的数据显示12. for(int pin = 2; pin <= 9 ; pin++){13. digitalWrite(pin,n0[pin-2]);14. }15. delay(500);16.17. // 显示数字118. int n1[8]={0,1,1,1,1,1,0,1};19. // 数字引脚2~9依次按数组n1[8]中的数据显示20. for(int pin = 2; pin <= 9 ; pin++){21. digitalWrite(pin,n1[pin-2]);22. }23. delay(500);24.25. // 显示数字226. int n2[8]={0,0,1,0,0,0,1,1};27. // 数字引脚2~9依次按数组n2[8]中的数据显示28. for(int pin = 2; pin <= 9 ; pin++){29. digitalWrite(pin,n2[pin-2]);30. }31. delay(500);32.33. // 显示数字334. int n3[8]={0,0,1,0,1,0,0,1};35. // 数字引脚2~9依次按数组n3[8]中的数据显示36. for(int pin = 2; pin <= 9 ; pin++){37. digitalWrite(pin,n3[pin-2]);38. }39. delay(500);40.41. // 显示数字442. int n4[8]={0,1,0,0,1,1,0,1};43. // 数字引脚2~9依次按数组n4[8]中的数据显示44. for(int pin = 2; pin <= 9 ; pin++){45. digitalWrite(pin,n4[pin-2]);46. }47. delay(500);48.49. // 显示数字550. int n5[8]={1,0,0,0,1,0,0,1};51. // 数字引脚2~9依次按数组n5[8]中的数据显示52. for(int pin = 2; pin <= 9 ; pin++){53. digitalWrite(pin,n5[pin-2]);54. }55. delay(500);56.57. // 显示数字658. int n6[8]={1,0,0,0,0,0,0,1};59. // 数字引脚2~9依次按数组n6[8]中的数据显示60. for(int pin = 2; pin <= 9 ; pin++){61. digitalWrite(pin,n6[pin-2]);62. }63. delay(500);64.65. // 显示数字766. int n7[8]={0,0,1,1,1,1,0,1};67. // 数字引脚2~9依次按数组n7[8]中的数据显示68. for(int pin = 2; pin <= 9 ; pin++){69. digitalWrite(pin,n7[pin-2]);70. }71. delay(500);72.73. // 显示数字874. int n8[8]={0,0,0,0,0,0,0,1};75. // 数字引脚2~9依次按数组n8[8]中的数据显示76. for(int pin = 2; pin <= 9 ; pin++){77. digitalWrite(pin,n8[pin-2]);78. }79. delay(500);80.81. // 显示数字982. int n9[8]={0,0,0,0,1,1,0,1};83. // 数字引脚2~9依次按数组n9[8]中的数据显示84. for(int pin = 2; pin <= 9 ; pin++){85. digitalWrite(pin,n9[pin-2]);86. }87. delay(500);88. }89.完成下载后,数码管就会循环显示0~9 的数字。
四位LED数码管编程
设计要求:一个基于单片机89S51的可编程定时器的程序,定时器由4个8段数码管显示,可以设置分和秒定时。
可以同时对四路控制对象进行定时控制,外部控件可以用于选择控制对象,设置定时,对定时进行暂停,重置等控制。
#include <AT89X52.H>//宏定义#define uchar unsigned char#define uint unsigned int#define ulong unsigned long int/****************************************************************************** TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256; ** TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器** 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时** 间为1ms*65536=65.536ms*******************************************************************************/#define V_TMOD 0x01 //工作方式1#define V_TH0 0x3C //50ms延时常数C=50000//0XDC#define V_TL0 0xB0 //50ms延时常数C=50000 /0X58 //#define V_TH1 0xFF //5ms延时常数C=5000 //0XDC//#define V_TL1 0xFB //5ms延时常数C=5000 /0X58#define V_TH1 0xDC //1ms延时常数C=1000 //0XDC#define V_TL1 0x58 //1ms延时常数C=1000 /0X58#define MAXFUN 6 //功能切换,表示最多的功能状态,sbit k10=P1^0;//sbit BEEP = P3^7; //蜂鸣器驱动线----------------请修改为sbit BEEP =P0^4;uchar bee; //蜂鸣器01开关uchar key; //键顺序吗uchar fun=10; //功能状态, <= MAXFUNuchar it0=0,it1; //Timer0中断计数uchar text=0; //数字//uchar text_ctrl[4]={0xFE,0xFD,0xFB,0xF7}; //位选通值uchar text_ctrl[4]={0xE,0xD,0xB,0x7};//位选通值, 00001110, 00001101, 00001011, 00000111//uchar text_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20,0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效//uchar text_code[17]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//数码管代码uchar text_code[11]={ 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0,0xFE, 0xF6,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效uchar text_index=0; //当前显示第几个uchar dis_buf[4]; //显示缓存uchar refresh=0; //刷新否T1蜂鸣uchar min=0; //minutesuchar sec=0; //sccondsuchar hour=0; //sccondsuchar onsetup=0;uchar keydown0=0,keydown1=0;uchar data PWM=0xFf ;//PWM值增加,则占空比减小,LED 灯渐暗。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Arduino 入门到精通例程16这次我们进行的实验是使用arduino驱动一块共阳四位数码管。
驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。
这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。
另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。
本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。
4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。
左上角为最大的12号管脚。
下图为数码管的说明手册下面是硬件连接图ARDUINO CODECOPY1.//设置阴极接口2.int a = 1;3.int b = 2;4.int c = 3;5.int d = 4;6.int e = 5;7.int f = 6;8.int g = 7;9.int p = 8;10.//设置阳极接口11.int d4 = 9;12.int d3 = 10;13.int d2 = 11;14.int d1 = 12;15.//设置变量16.long n = 0;17.int x = 100;18.int del = 55; //此处数值对时钟进行微调19.20.void setup()21.{22.pinMode(d1, OUTPUT);23.pinMode(d2, OUTPUT);24.pinMode(d3, OUTPUT);25.pinMode(d4, OUTPUT);26.pinMode(a, OUTPUT);27.pinMode(b, OUTPUT);28.pinMode(c, OUTPUT);29.pinMode(d, OUTPUT);30.pinMode(e, OUTPUT);31.pinMode(f, OUTPUT);32.pinMode(g, OUTPUT);33.pinMode(p, OUTPUT);34.}35.36.void loop()37.{38. clearLEDs();39. pickDigit(1);40. pickNumber((n/x/1000)%10);41.delayMicroseconds(del);42.43. clearLEDs();44. pickDigit(2);45. pickNumber((n/x/100)%10);46.delayMicroseconds(del);47.48. clearLEDs();49. pickDigit(3);50. dispDec(3);51. pickNumber((n/x/10)%10);52.delayMicroseconds(del);53.54. clearLEDs();55. pickDigit(4);56. pickNumber(n/x%10);57.delayMicroseconds(del);58.59. n++;60.61.if(digitalRead(13) == HIGH)62.{63. n = 0;64.}65.}66.67.void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口68.{69.digitalWrite(d1, LOW);70.digitalWrite(d2, LOW);71.digitalWrite(d3, LOW);72.digitalWrite(d4, LOW);73.74.switch(x)75.{76.case1:77.digitalWrite(d1, HIGH);78.break;79.case2:80.digitalWrite(d2, HIGH);81.break;82.case3:83.digitalWrite(d3, HIGH);84.break;85.default:86.digitalWrite(d4, HIGH);87.break;88.}89.}90.91.void pickNumber(int x)//定义pickNumber(x),其作用是显示数字x92.{93.switch(x)94.{95.default:96. zero();97.break;98.case1:99. one();100.break;101.case2:102. two();103.break;104.case3:105. three();106.break;107.case4:108. four();109.break;110.case5:111. five();112.break;113.case6:114. six();115.break;116.case7:117. seven();118.break;119.case8:120. eight();121.break;122.case9:123. nine();124.break;125.}126.}127.128.void dispDec(int x)//设定开启小数点129.{130.digitalWrite(p, LOW);131.}132.133.void clearLEDs()//清屏134.{135.digitalWrite(a, HIGH);136.digitalWrite(b, HIGH);137.digitalWrite(c, HIGH);138.digitalWrite(d, HIGH);139.digitalWrite(e, HIGH);140.digitalWrite(f, HIGH);141.digitalWrite(g, HIGH);142.digitalWrite(p, HIGH);143.}144.145.void zero()//定义数字0时阴极那些管脚开关146.{147.digitalWrite(a, LOW);148.digitalWrite(b, LOW);149.digitalWrite(c, LOW);150.digitalWrite(d, LOW);151.digitalWrite(e, LOW);152.digitalWrite(f, LOW);153.digitalWrite(g, HIGH);154.}155.156.void one()//定义数字1时阴极那些管脚开关157.{158.digitalWrite(a, HIGH);159.digitalWrite(b, LOW);160.digitalWrite(c, LOW);161.digitalWrite(d, HIGH);162.digitalWrite(e, HIGH);164.digitalWrite(g, HIGH);165.}166.167.void two()//定义数字2时阴极那些管脚开关168.{169.digitalWrite(a, LOW);170.digitalWrite(b, LOW);171.digitalWrite(c, HIGH);172.digitalWrite(d, LOW);173.digitalWrite(e, LOW);174.digitalWrite(f, HIGH);175.digitalWrite(g, LOW);176.}177.178.void three()//定义数字3时阴极那些管脚开关179.{180.digitalWrite(a, LOW);181.digitalWrite(b, LOW);182.digitalWrite(c, LOW);183.digitalWrite(d, LOW);184.digitalWrite(e, HIGH);185.digitalWrite(f, HIGH);186.digitalWrite(g, LOW);187.}188.189.void four()//定义数字4时阴极那些管脚开关190.{191.digitalWrite(a, HIGH);192.digitalWrite(b, LOW);193.digitalWrite(c, LOW);194.digitalWrite(d, HIGH);195.digitalWrite(e, HIGH);196.digitalWrite(f, LOW);197.digitalWrite(g, LOW);198.}199.200.void five()//定义数字5时阴极那些管脚开关201.{202.digitalWrite(a, LOW);204.digitalWrite(c, LOW);205.digitalWrite(d, LOW);206.digitalWrite(e, HIGH);207.digitalWrite(f, LOW);208.digitalWrite(g, LOW);209.}210.211.void six()//定义数字6时阴极那些管脚开关212.{213.digitalWrite(a, LOW);214.digitalWrite(b, HIGH);215.digitalWrite(c, LOW);216.digitalWrite(d, LOW);217.digitalWrite(e, LOW);218.digitalWrite(f, LOW);219.digitalWrite(g, LOW);220.}221.222.void seven()//定义数字7时阴极那些管脚开关223.{224.digitalWrite(a, LOW);225.digitalWrite(b, LOW);226.digitalWrite(c, LOW);227.digitalWrite(d, HIGH);228.digitalWrite(e, HIGH);229.digitalWrite(f, HIGH);230.digitalWrite(g, HIGH);231.}232.233.void eight()//定义数字8时阴极那些管脚开关234.{235.digitalWrite(a, LOW);236.digitalWrite(b, LOW);237.digitalWrite(c, LOW);238.digitalWrite(d, LOW);239.digitalWrite(e, LOW);240.digitalWrite(f, LOW);241.digitalWrite(g, LOW);242.}243.244.void nine()//定义数字9时阴极那些管脚开关245.{246.digitalWrite(a, LOW);247.digitalWrite(b, LOW);248.digitalWrite(c, LOW);249.digitalWrite(d, LOW);250.digitalWrite(e, HIGH);251.digitalWrite(f, LOW);252.digitalWrite(g, LOW);253.}把下面代码复制下载到控制板中,看看效果。