数码管从0跳到60,按键可以增减
机器人五级
青少年机器人技术等级考试理论综合试卷(五级)分数:100 题数:30一、单选题(共20题,共80分)正常情况下,ESP32 WROOM 模块的工作电压是?()1.A. 3.0VB. 3.3VC. 5VD. 7~12V试题编号:20220608102413012试题类型:单选题标准答案:B试题难度:一般试题解析:考生答案:B考生得分:4是否评分:已评分评价描述:ESP32 for Arduino函数ledcSetup(channel,freq,bit_num)中,freq的含义是?()2.A. 设置PWM的频率B. 设置PWM的分辨率C. 设置PWM的输出通道号D. 设置PWM的占空比试题编号:20220608102413528试题类型:单选题标准答案:A试题难度:一般试题解析:考生答案:A考生得分:4是否评分:已评分评价描述:3UART通信的起始位是?().A. 高电平B. 低电平C. 上升沿D. 下降沿试题编号:20220608102413669试题类型:单选题标准答案:B试题难度:一般试题解析:考生答案:B考生得分:4是否评分:已评分评价描述:下列程序通过串口分别发送数据,采用偶校验,对应的校验位数值分别为?()4.A. 0 0B. 1 1C. 0 1D. 1 0试题编号:20220608102414201试题类型:单选题标准答案:C试题难度:一般试题解析:考生答案:B考生得分:0是否评分:已评分评价描述:Serial类库的下列成员函数中,用于返回串口接受缓冲区中字节数的是?()5.A. begin()B. find()C. available()D. length()试题编号:20220608102413967试题类型:单选题标准答案:C试题难度:一般试题解析:考生答案:C考生得分:4是否评分:已评分评价描述:ESP32 for Arduino采用DAC外设进行模拟输出时,所对应的函数是?()6.A. adcWrite()B. dacWrite()C. analogWrite()D. ledcWrite()试题编号:20220608102413607试题类型:单选题标准答案:B试题难度:一般试题解析:考生答案:B考生得分:4是否评分:已评分评价描述:7ESP32 for Arduino,电路如图所示,当按键释放时触发中断,对应的中断触发模式是?().A. ONLOWB. ONHIGHC. RISINGD. FALLING试题编号:20220608102414296试题类型:单选题标准答案:D试题难度:一般试题解析:考生答案:D考生得分:4是否评分:已评分评价描述:下列程序执行后,串口监视器显示的相应内容为?()8.A. ABB. ABCC. 2D. 3试题编号:20220608102413935试题类型:单选题标准答案:C试题难度:一般试题解析:考生答案:A考生得分:0是否评分:已评分评价描述:74HC595移位寄存器芯片级联时,与引脚Q7’连接的引脚是?()9.A. SH_CPB. ST_CPC. DsD. Q0试题编号:20220608102413638试题类型:单选题标准答案:C试题难度:一般试题解析:考生答案:C考生得分:4是否评分:已评分评价描述:下列选项中,ESP32WROOM模组所不具备的外设是?()1.A. GPIOB. UARTC. 霍尔传感器D. 姿态传感器试题编号:20220608102413199试题类型:单选题标准答案:D试题难度:一般试题解析:考生答案:D考生得分:4是否评分:已评分评价描述:程序执行后val的值是?()11.A. 0x18B. 0x11C. 0x30D. 0x0试题编号:20220608102414045试题类型:单选题标准答案:A试题难度:一般试题解析:考生答案:A考生得分:4是否评分:已评分评价描述:标准的ASCII码表示字符的位数是?()12.A. 4 bitB. 7 bitC. 8 bitD. 16 bit试题编号:20220608102413121试题类型:单选题标准答案:B试题难度:一般试题解析:考生答案:B考生得分:4是否评分:已评分评价描述:1ESP32 for Arduino程序如下,串口监视器显示的值为?()3.A. 6B. 8C. 12D. 24试题编号:20220608102413857试题类型:单选题标准答案:B试题难度:一般试题解析:考生答案:B考生得分:4是否评分:已评分评价描述:1 4 .ESP32 for Arduino采用LEDC方式进行模拟输出时,向指定通道输出模拟信号的函数是?()A. ledcSetup()B. ledcAttachPin()C. analogWrite()D. ledcWrite()试题编号:20220608102413497试题类型:单选题标准答案:D试题难度:一般试题解析:考生答案:A考生得分:0是否评分:已评分评价描述:15.ESP32 for Arduino中,程序Serial.printf()中表示十进制整数输出的格式字符为?()A. %oB. %dC. %xD. %f试题编号:20220608102414014试题类型:单选题标准答案:B试题难度:一般试题解析:考生答案:B考生得分:4是否评分:已评分评价描述:0xF<<2的值是?()16.A. 0x3CB. 0x1EC. 0x3D. 0x7试题编号:20220608102413904试题类型:单选题标准答案:A试题难度:一般试题解析:考生答案:A考生得分:4是否评分:已评分评价描述:1有关按键消抖下列说法错误的是?()7.A. 按键抖动是因为按键内金属簧片在接触瞬间是一个连续通断的过程。
数码管及按键实验报告模板(1)
数码管及流水灯实验报告成员:2012年11月一、实验要求:1.实验1:在开发板上调试利用按键控制数码管从1累加到F变化(S2加、S3减)(不同分组按键利用IO口不同);2.实验2:利用开发板进行秒表设计(显示分、秒,分辨率0.1s,如0.58.5)(参考P189程序);二、硬件原理图1. 硬件原理图A到F秒表2.原理图分析:实验一原理LED数码管是由4个发光二极管中的7个长条形发光二极管(俗称7笔段),按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管dp放在右下方,用来显示小数点,。
只要控制7笔段按一定的要求亮与灭,就能显示出十六进制0~F。
实验二原理以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。
电平信号按照dp,g,e…a 的顺序组合形成的数据字称为该字符对应的段码三、软件设计系统1. 软件设计思想与流程图软件流程图如下(标准流程图画法)……:实验一、A到F实验二、秒表2.软件代码:实验一、秒表#include <avr/io.h> //IO定义#include <util/delay.h> //延时库文件const unsigned char led_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码列表,共阳极,0~9的代码列表const unsigned char position[4]={0xEF,0xDF,0xBF,0x7F};//位输出代码,分别定义PD5~Pd0单一输出“0”的状态unsigned char time[3]; //时、分、秒计数unsigned char dis_buff[4]; //显示缓冲区,存放要显示的6字符的段码unsigned char time_counter; //1s计数器unsigned char point_on=0; //秒显示标志void display(void){unsigned char i;for(i=0;i<=3;i++) //显示循环开始{PORTB = led_7[dis_buff[i]]; //段码写入PORTAif(point_on && (i == 1||i == 3))PORTB &= 0x7F; //小数点显示PORTD = position[i]; //位信号写入PORTD_delay_ms(1); //点亮延时PORTD = 0xFF; //清除位信号}}void time_to_disbuffer(void){/* unsigned char i,j=0;for(i=0;i<=2;i++);{dis_buff[j++] = time[i] % 10;dis_buff[j++] = time[i] / 10;}*/dis_buff[0] = time[0] / 10;dis_buff[1] = time[1] % 10;dis_buff[2] = time[1] / 10;dis_buff[3] = time[2] % 10;}void main(void ){PORTB =0xFF; //IO初始化DDRB =0xFF;PORTD =0xFF;DDRD =0xFF;time[2] = 11;time[1] = 00; time[0] = 23; //时间初值time_to_disbuffer(); //将时间值装载至缓冲区while (1) //循环开始{display(); //调用显示函数if (++time[0]>=99) //次数计数{time[0] = 0; //重置计数point_on= ~point_on; //小数点位求反if (++time[1] >=60) //秒数目达到60后进位重置{time[1] = 0;if (++time[2] >= 60) //分计数达到60后进位重置{time[2] = 0;}}}time_to_disbuffer(); //时间装载至缓冲区_delay_ms(5); //延时}}实验二、0到F#include <avr/io.h> //IO定义#include <util/delay.h> //延时库文件const char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//段码列表,共阳极,0~F的代码列表int main(void){char i=0; //定义iPORTB=0xc0; //定义输入端的初始值,0xFF表示高电平DDRB=0xff; //定义DB口为输入端PORTD=0xef; //定义输出端的初始值,0x70表示低电平DDRD=0xff; //定义DD口为输出端while(1){if((PINC&(1<<PC3))==0) //显示循环开始{_delay_ms(10);if((PINC&(1<<PC3))==0) //检测PC3是否按下{if(i<16){PORTB=led[i];i++;}if(i>=16)i=0;}}while(!(PINC&(1<<PC3))); //再次放手检测if((PINC&(1<<PC2))==0) //显示循环开始{_delay_ms(10); //点亮时间if((PINC&(1<<PC2))==0) //检测PC2是否按下{if(i<16){PORTB=led[i];i--;}if(i>=16)i=0;}}while(!(PINC&(1<<PC2))); //再次放手检测}}四. 成员分工及完成情况五. 意见及建议实验报告、编译工程文件、仿真文件打包提供电子版。
安科瑞AOB19系列可编程数显功率因数、相位表使用说明书
AOB19系列可编程数显功率因数、相位表使用说明书安装、使用产品前,请阅读使用说明书A OB 19系列表R S485是原指针式表或普通数字式表的理想换代产品。
本系列仪表最大的特色是采用了功率因数、相位和频率测量线路,实现功率因数表可通过键盘查看频率和相位值,而相位表可通过键盘查看频率和功率因数值的功能,仪表均●用途●技术特点数显功率因数、相位为新一代可编程智能表,主要用于对单相或三相用电线路中的功率因数、相位(功率因数角度)值进行实时测量与指示,并通过接口或模拟量变送输出接口对被测电量数据进行远传。
具有测量精度高、稳定性好、长期工作免调校、可通过面板按键现场设置参数等特点,功率因数、相位功率因数、相位通用化和模块化的设计方式,单只仪表内同时集成了备有开关量输出(上下限报警)模块、模拟量变送输出模块、RS 485数字通讯模块供用户任意选择,且各模块都采用插拔方式设计,用户可根据需要对仪表的各功能模块随意进行组合与增减。
通过仪表键盘可非常方便地实现对仪表的上下限报警值(或范围)及报警切换差、通讯地址及通讯波特率、变送输出方式及变送输出范围、数字滤波系数等参数的设置。
仪表内部取消了调校电位器,采用软件调校方式进行生产,模块化和通用化的设计方式大幅降低了仪表的生产成本,使本仪表具有极高的性价比。
一、概述--1二、型号定义K :继电器触点输出B :模拟量变送输出R S4RS RS N :继电器触点输出+模拟量变送输出+RS 485通讯接口仪表外形选择:H X 3:三相三线交流信号输入4:单相交流信号输入安装式数字电表系列产品代号显示方式选择:1:数码管显示输出方式选择:X :显示仪表,无输出功能T:85通讯接口S :继电器触点输出+485通讯接口D :模拟量变送输出+485通讯接口1:16槽形、2:42方形、3:6方形、4:46槽形、5:96×48槽形、7:72×72方形、8:48×48方形、9:96×96方形仪表类型选择:表示为功率因数表,表示为相位表信号接入方式选择:--2AOB19-□□□□□三、技术参数3.1功率因数测量显示范围:0.000C~0.500C~1.000~0.500L~0.000L3.2相位测量显示范围:0°~359.9°3.3频率测量显示范围:45.00~65.00H z3.4功率因数测量准确度:±0.013.5相位测量准确度:±1°3.6分辨力:功率因数显示分辨力为0.001,频率显示分辨力为0.01H z,相位显示分辨力为0.1°3.7采样速率:约3次/s3.8额定输入电压:AC100V±10%、220V±10%、380V±10%3.9输入电流:1~5A3.10电压输入回路功耗:<1V A3.11电流输入回路功耗:<0.5V A3--3.12AC /DC 85260V A C220V 10%50/60H z3.133.14----3.15,A C250V /2A D C30V/2A 3.16D C 010m A 020m A 420m A 0.5%FS 3.175003.180.000C 10.001L 0359.93.19RS 485M O DB U S_R T U 环境:温度~℃,湿度≤的无腐蚀性场合辅助电源:~或±辅助电源功耗:VA3无信号输入时提示信息:显示字符“”报警输出:上下限报警同一继电器输出触点容量为、。
数码管从0开始自动加1+按键调速
/**************************************************************河南工业大学电气工程学院测控1001刘欣如有错误欢迎致电hellohaut@共同学习共同进步***************************************************************//****************************************************************程序名称: 数字自动加1计数,数码管显示出来按键可以调节速度说明:使用本程序你必须把 SE5设置为ON(2-3)短接P11按键为停止计数按键 P10为速度减1档 P34为速度加1档P33为暂停或开始计数按键*****************************************************************//*头文件*/#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned long int/*端口定义*/#define sled_dm_port P0 /*定义LED显示的段码数据脚*/#define sled_wm_port P2 /*定义LED显示的位码数据脚*/sbit P10 = P1^0; //p1.0脚定义为速度减1档sbit P11 = P1^1; //p1.1脚定义为停止键sbit P33 = P3^3; //p3.3脚定义为暂停及开始键sbit P34 = P3^4; //p3.4脚定义为速度加1档sbit P30 = P3^0; //系统运行状态提示/*定义数码管显示字符跟数字的对应数组关系*/uchar code mun_to_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/* 0 1 2 3 4 5 6 7 8 9 a b c d e f *//*定义需要点亮的数码管*/uchar code sled_bit_table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data sled_data[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*0-7号SLED 缓冲值*/uchar data led_lighten_bit=0 ; /*LED灯点亮标志位0-7*/uint system_count=0; //P30外接LED闪烁计数uint add_count = 0;ulong count=0; //数码管计数值uint speed=0; //计数速度uchar temp=0; //临时值uchar play=1; //计数开始 0暂停 1开始uchar add_bit = 0; //条件计数/*-----------------------------------------------显示部分程序,采用定时器0产生中断,1MS更新一次------------------------------------------------*/void SLED_Disp() interrupt 1 using 3{TH0 = (65536-1000)/256;TL0 = (65536-1000)/256;sled_wm_port = 0xff; /*关闭显示*/sled_dm_port = sled_data[led_lighten_bit]; /*输出段码数据到数码管*/sled_wm_port = sled_bit_table[led_lighten_bit]; /*输出位码数据到数码管*/ led_lighten_bit++;if(led_lighten_bit>=8) led_lighten_bit=0; /*8位数码管全动态输出*/system_count++;if(system_count>=500){P30=~P30;system_count = 0;}else if((system_count>=150)&&((P10==0)||(P11==0)||(P33==0)||(P34==0))){ //有按键按下快速闪烁P30 = ~P30;system_count = 0;}add_count++;if(add_count>=speed){add_count = 0;add_bit = 1;}}/*1MS为单位的延时程序*/void delay_1ms(uchar x){uchar j;while(x--){for(j=0;j<125;j++){;}}}void T0_valueSet() /*定义中断方式,中断时间*/{TMOD = 0x01; /*定时0,工作在方式1*/TH0 = (65536-1000)/256;TL0 = (65536-1000)/256;TR0 = 1; /*启动计数*/EA = 1; /*开总中断*/ET0 = 1; /*开定时器0中断*/return;}/*主程序*/void main(){uchar key_put_bit = 0; //按键按下,0为无按键按下,1为有按键按下T0_valueSet(); //打开显示while(1){//更新显示数据sled_data[0] = mun_to_char[count/10000000];sled_data[1] = mun_to_char[count%10000000/1000000];sled_data[2] = mun_to_char[count%1000000/100000];sled_data[3] = mun_to_char[count%100000/10000];sled_data[4] = mun_to_char[count%10000/1000];sled_data[5] = mun_to_char[count%1000/100];sled_data[6] = mun_to_char[count%100/10];sled_data[7] = mun_to_char[count%10];if((play==1)&&(add_bit==1)){ //计数加1count++;if(count>99999999) count=0; //计算超出范围,从0开始add_bit = 0;}if(((P10==0)||(P11==0)||(P33==0)||(P34==0))&&(key_put_bit==0)){ delay_1ms(2);key_put_bit = 1;if(P10==0){ //p1.0脚定义为速度减1档if((speed<=2000)) speed = speed+50;}else if(P11==0){ //p1.1脚定义为停止键count = 0; //计数清零play = 0; //置停止计数或暂停计数speed = 0; //速度归零}else if(P33==0){ //p3.3脚定义为暂停及开始键if(play==1){//暂停处理temp = speed;speed = 0;play = 0;}else if(play==0){//开始计数处理speed = temp;play = 1;}}else if(P34==0){ //p3.4脚定义为速度加1档if(speed>=50) speed = speed-50;}}if((P10!=0)&&(P11!=0)&&(P33!=0)&&(P34!=0)) key_put_bit = 0;} }。
51单片机数码管显示数字原理
主题:51单片机数码管显示数字原理内容:1. 介绍51单片机在现代的电子产品中,单片机被广泛应用于各个领域,它是一种集成了微处理器、存储器和输入/输出端口的集成电路芯片。
其中,51单片机即指的是基于Intel 8051架构的单片机,它具有低功耗、高性能和丰富的外设接口,因此被广泛应用于嵌入式系统设计中。
2. 数码管的基本原理数码管是一种能够显示数字和部分字母的显示器件,它由多个发光二极管组成,可以显示0-9的数字。
数码管按照结构可以分为共阳数码管和共阳数码管两种类型。
共阳数码管的显示原理是通过控制各个发光二极管的通断状态来显示不同的数字,而共阴数码管则是通过控制对应的极性来实现数字的显示。
3. 51单片机连接数码管的原理通过51单片机控制数码管显示数字,需要用到引脚的输出功能。
在连接共阳数码管时,需要通过51单片机的输出引脚控制各个发光二极管的状态;而在连接共阴数码管时,则是通过控制对应的极性来实现数字的显示。
4. 51单片机连接数码管的实现步骤由于51单片机有多个通用IO口,因此可以连接多个数码管。
连接数码管的步骤如下:1)确定数码管的类型,共阴还是共阳2)连接数码管的正极和负极到单片机的对应IO口3)编写程序控制51单片机的IO口输出状态,以显示所需的数字5. 51单片机连接数码管的程序设计下面是一个简单的示例程序,演示了如何使用51单片机连接数码管,并控制其显示数字的过程:```C#include <reg51.h>sbit DIG1 = P0^0; // 数码管第一位sbit DIG2 = P0^1; // 数码管第二位sbit DIG3 = P0^2; // 数码管第三位sbit DIG4 = P0^3; // 数码管第四位void m本人n(){unsigned char DisplayData[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9的显示码unsigned char i;while(1){for(i=0; i<10; i++){DIG1=0; // 打开第一位数码管P2=DisplayData[i]; // 发送段码delay(100); // 延时DIG1=1; // 关闭第一位数码管// 同样的方法依次打开其他位数码管并发送段码// 这里省略其他三个数码管的控制}}}通过以上程序设计,我们可以实现用51单片机控制数码管显示0-9的数字。
EDA流水灯,数码管显示01234567,加减计数,
练习1.两位的循环彩灯,自定义的循环彩灯2.用另外的方式实现按键控制数码管加减3.设计一个在四个数码管上,显示拨码开关给定的值。
1、设计一个流水灯。
原理图设计:(8位流水灯)程序设计:(16位流水灯)module led_s(rst,clk,leds);input rst,clk;output [15:0] leds;reg [15:0] leds;reg [3:0]count;always @(posedge clk)beginif (rst)count <=16 'h00_00;elsebeginif(count==4'hf)count <=16 'h00_00;elsecount <=count+1;endendalways @(count)begincase(count)0: leds<= 16 'b0000_0000_0000_0001;1: leds<= 16 'b0000_0000_0000_0010;2: leds<= 16 'b0000_0000_0000_0100;3: leds<= 16 'b0000_0000_0000_1000;4: leds<= 16 'b0000_0000_0001_0000;5: leds<= 16 'b0000_0000_0010_0000;6: leds<= 16 'b0000_0000_0100_0000;7: leds<= 16 'b0000_0000_1000_0000;8: leds<= 16 'b0000_0001_0000_0000;9: leds<= 16 'b0000_0010_0000_0000;10: leds<=16 'b0000_0100_0000_0000;11: leds<=16 'b0000_1000_0000_0000;12: leds<=16 'b0001_0000_0000_0000;13: leds<=16 'b0010_0000_0000_0000;14: leds<=16 'b0100_0000_0000_0000;15: leds<=16 'b1000_0000_0000_0000;default: leds<=16 'hxxxx;endcaseendendmodule2、设计一个加减计数器,计数器的值在一位数码管上显示出来。
实验四 数码管显示控制
实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。
当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。
60秒计时器.做板
单片机课程设计报告实验名称: 60秒计时器60秒计时器实验报告一,实验目的1. 学习8052定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
2. 设计任务及要求点亮两个数码管,并一秒累计一次,最多60次,然后重置。
二,实验要求1.两个数码管从0变到60,一秒变动一次。
2.到60后重置回00。
三,实验基本原理动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20,每中断一次中断计数初值加1,当加到20时,则表示1s到了,数码管加1。
四,实验设计分析针对要实现的功能,采用AT89S51单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含8KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用调用函数,时间,重置,显示等程序一次列出,方便调用,纠错。
五,实验要求实现A.电路设计1. 整体设计此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路用2个共阴数码管分别显示十位,个位,通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。
单片机采用AT89S52系列,这种单片机应用简单、适用。
电路的总体设计框架如下:2. 分块设计模块电路主要分为:显示部分、复位和晶振电路。
2.1 显示部分本实验选用锁存器控制数码管的输出,模块如下:2.3 晶振与复位电路本实验单片机时钟用内部时钟,模块如下:复位电路为手动复位构成,模块如下:B.程序设计B.1 程序总体设计本实验用汇编程序完成. 程序总的流程图如下:NoYes结合电路图,程序设计的整体思路为:接通电源,数码管显示十位、个位。
单片机的按键功能是什么
单片机的按键功能是什么你们知道单片机的每个按键的具体功能吗?下面是店铺收集整理关于单片机的每个按键的具体功能的资料以供大家参考学习,希望大家喜欢。
·单片机的每个按键的具体功能介绍键盘的分类:键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘;而靠软件编程来识别的称为非编码键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
本文主要讨论矩阵键盘(独立键盘比较简单可以与此类比),下面是矩阵键盘的电路连接图。
按键的扫描,主要是对每一个按键所编码的识别与确定。
如上图:按键所接口为P2口,置“0”则按键有效。
当P2口检测到值为P2=0x7e时,S1有效。
低四位用来确定行按键,高四行用来确定列按键。
基本的编程思想是:先设定P2口为0xfe,确定第一行按键有效,然后将P2口的值与0xf0按位与(&),然后检测P2口的值是否为0xf0,这样就屏蔽了低四位的电位改变(因为无论之后低四位怎样变化,低四位与0相与总是0)。
然后如果P2口得值不为0xf0时,则证明高四位有电位改变。
则检测此时的P2口得值,就可以确定是哪个按键被按下了。
如按键S1,它编码是P2=0x7e,也就是当P2口检测到值为P2=0x7e时,S1有效。
需要注意的是:按键按下时有一个前后抖动时间,如下图(a)所示。
如果单片机检测到的是抖动部分,则无法按键判断是否有效,所以我们需要加入防抖程序。
注:也可以通过硬件防抖,如上图(b)。
功能:矩阵键盘(按相应的按键,数码管从0~F的显示)单片机:AT89S52#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit DAT=P0^3;sbit CLK=P0^2;uchar temp,h;void delay(uint); //延迟程序void sendbyte(uchar); //数码管显示void keyscan(); //按键扫描uchar code tab[]={0xed,0x09,0xbc,0x9d,0x59,0xd5,0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭void main (void){sendbyte(16); //初始时数码管无显示while(1){keyscan(); //按键扫描}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=100;y>0;y--);}void sendbyte(uchar byte){uchar num,c;num=tab[byte];for(c=0;c<8;c++){CLK=0;DAT=num&0x01;CLK=1;num>>=1; //右移位赋值}}void keyscan(){/*第一行按键的扫描*/P2=0xfe; //确定第一行的按键有效temp=P2; //将其赋给一个变量(处理I/O口时,一般先赋值给一个变量,然后通过处理变量来处理I/O口)temp=temp&0xf0; //用于检测第一行的哪个按键按下while(temp!=0xf0) /*这个部分只要是用来消除按下抖动的*/{delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0) //这个地方,已经消除了按下抖动,P2口的值已经确定temp=P2; //将P2口得值赋给变量switch(temp) //这个switch语句,用来确定哪一个按键按下时,数码管的显示值{case 0x7e:h=0;break; //这个break很重要,表示如果有匹配的值,就跳出switch语句,防止程序跳不出来。
默纳克小键盘功能详述和调试指南
默纳克小键盘功能详述和调试指南F0(楼层及运行方向信息):上电默认为F0的数据菜单显示,3位数码管的后两位数字显示当前电梯所在的楼层,第1位的数码管用于方向显示。
在电梯停止情况下,第1位数码管不显示,当电梯上行或下行时,该数码管指示上行或下行方向。
在系统出现故障情况下(原来系统无故障),数码管自动切换为故障代码闪烁显示,如果故障自动消失则进入F0的菜单显示。
F1(运行楼层命令输入):通过PRG、UP、SET键进入F1的数据菜单后,数码管显示电梯最小楼层(系统功能参数表F6-01所示),可以用UP键进行数据设定更改,范围是最小楼层~最大楼层,选定数据后按SET键保存,电梯向目的楼层运行。
电梯将运行到指定楼层,自动切换到F0的数据菜单。
F2(故障复位):通过PRG、UP、SET键进入F2的数据菜单后,数码管显示“0”,可以用UP键进行数据设定更改,范围0~1,其中1表示系统故障复位命令,此时按SET键保存,清除当前系统故障。
然后自动切换到F0的数据菜单。
F3(时间显示):通过PRG、UP、SET键进入F3的数据菜单后,数码管循环显示时间,如“2008-08-08-08-00”。
F4(合同号显示):通过PRG、UP、SET键进入F4的数据菜单后,菜单的数据为使用者的合同号。
F5(运行次数显示):通过PRG、UP、SET键进入F5的数据菜单后,数码管循环显示运行次数,如“100,000”,最多显示999,999次。
F6:保留。
用户禁止设定此功能,否则危险!F7(楼层自学习命令输入):通过PRG、UP、SET键进入F7的数据菜单后,数码管显示“0”,可以用UP键进行数据设定更改,范围0~1,其中1表示系统楼层自学习命令,此时按SET键保存,当满足自学习条件时,电梯开始资学习,并转为显示F0的数据菜单,自学习完毕F7自动回复位0。
F8(测试参数):通过PRG、UP、SET键进入F8的数据菜单后,数码管显示00,F8的设定范围00~04,分别代表:00-无功能;01-封锁外召;02-封锁开门;03-封锁超载;04-封锁限位开关。
单片机原理与应用第10章参考答案
第10章 AT89S51与键盘、显示器、拨盘、打印机的接口设计参考答案1. 答:A. MAX7219是专用显示器芯片,不用于键盘;B.错:CH451芯片也可用于控制键盘;C.对:BUSY信号可作为查询信号或中断请求信号使用,但此时信号ACK不用;E.错:LED数码管的字型码是可以变的,例如表10-1中的“a”段对应段码字节的最高位。
“dp”段对应段码字节的最低位,字型码就改变了。
2. 答:在按键的闭合和断开过程中,由于开关的机械特性,导致了按键抖动的产生。
如果不消除按键的机械抖动,按键的状态读取将有可能出现错误。
消除按键抖动一般是采用软件或硬件去抖。
软件去抖的原理:在第一次检测到有键按下时,该键所对应的行线是为低电平,执行一端延时10ms的子程序后,确认该行线电平是否仍然为低电平,如果仍为低电平,则确认为该行确实有键按下。
3. 答:静态显示时,数据是分开送到每一位LED上的。
而动态显示则是数据是同时送到每一个LED 上,再根据位选线来确定是哪一位LED被显示。
静态显示亮度很高,但口线占用较多。
动态显示口线占用较少,适合用在显示位数较多的场合。
4. 答:80H(共阴极);7FH(共阳极)。
5. 答:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V上,无按键按下时,行线处于高电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线的电平决定。
列线的电平如果为低,则行线电平为低;列线的电平如果为高,则行线的电平亦为高。
将行、列线信号配合起来并做适当的处理,才能确定闭合键的位置。
6. 答:先对P1口高四位送低电平,读取P1口低四位的值;再对P1口低四位送低电平,读取P1口高四位的值,将两次读到的值组合在一起就得到了按键的特征码,在根据特征码查找键值。
KEYIN: MOV P1,#0FH ;反转读键MOV A,P1ANL A,#0FHMOV B,AMOV P1,#0F0HMOV A,P1ANL A,#0F0HORL A,BCJNE A,#0FFH,KEYIN1RET ;未按键KEYIN1: MOV B,A ;暂存特征码MOV DPTR,#KEYCOD ;指向特征码表MOV R3,#0FFH ;顺序码初始化KEYIN2: INC R3MOV A,R3MOVC A,@A+DPTRCJNE A,B,KEYIN3MOV A,R3 ;找到,取顺序码RETKEYIN3: CJNE A,#0FFH,KEYIN2 ;未完,再查RET ;已查完,未找到,以未按键处理KEYCOD: DB 0E7H,0EBH,0EDH,0EEH ;特征码表DB 0D7H,0DBH,0DDH,0DEHDB 0B7H,0BBH,0BDH,0BEHDB 77H,7BH,7DH,7EH7. 答:(1)编程扫描方式:当单片机空闲时,才调用键盘扫描子程序,反复的扫描键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。
简述数码管动态显示原理
简述数码管动态显示原理
数码管是一种用来显示数字或字符的显示器,它可以实现从0到9和其他字母和符号的动态显示,这是因为数码管使用恒定的零和一进行动态显示。
数码管是由一个发光二极管(LED)和一个含有八条横向和竖向的管子的结构组成的。
LED是一种激发现象,即当其加电时,LED会发出一定的光亮。
LED由一个小尺寸的发光二极管组成,发光二极管是一种发光半导体元件,它的主要功能是将电脉冲转换为可见光输出,也就是说可以将加电的电脉冲转换为可见光输出。
管子可以实现亮灭功能,其中每一根管子都由一组位置相关的极性(比如在一个立方体中有六个方向,每一根管子都有六个极性),并有一个小孔,位于发光二极管的正上方。
当某一根管子的电脉冲可以通过小孔,就可以实现LED的亮灭功能,也就是说,每一根管子所需的电脉冲可以由发光二极管实现。
数码管动态显示的原理是使用发光二极管,并加载在不同的极性管子上,当某一根管子的电脉冲可以通过小孔,就可以实现LED 的亮灭功能,这就是数码管动态显示原理。
数码管可以反应方向指示灯、报警器、万年历、计时器、校正器等多种用途,即使在黑暗的情况下,它也能清晰地显示特定的数字或字母。
数码管也能结合一定的电路实现光调制和电调制,这样可以实现高精度的计时功能。
通过改变LED的极性,它可以实现从0到9
的动态显示,比如可以在单位时间内显示出一个数字,也可以每秒显示出某一段文字。
总之,数码管动态显示原理是靠发光二极管、控制电路和管子结合来实现的,这种原理可以实现从0到9和其他字母和符号的动态显示。
它以动态的方式清晰地显示出多种信息,使其成为工业应用中广泛采用的一种显示装置。
单片机课程设计-武汉理工大学单片机实训报告
单⽚机课程设计-武汉理⼯⼤学单⽚机实训报告第⼀章绪论 (2)1.1概述 (2)1.2课程设计任务 (2)第⼆章硬件系统设计 (3)2.1单⽚机最⼩系统 (3)2.1.1 STC89C52的介绍 (3)2.1.2 stc89c52系列单⽚机最⼩系统的介绍 (4)2.2矩阵键盘模块 (5)2.3数码管显⽰单元 (5)2.4 LCD1602液晶显⽰电路 (6)2.5蜂鸣器单元 (7)第三章软件设计 (8)3.1数码管实验 (8)3.1.1循环数码管显⽰0—F程序设计结构图: (8)3.1.2 59秒倒计数流程图 (9)3.2 矩阵键盘流程图 (10)3.3 LCD1602滚动显⽰年⽉⽇时分秒 (11)3.4 AD转换, (12)3.5家电遥控器 (13)第四章调试结果分析 (14)4.1数码管调试及分析 (14)4.1.1循环数码管显⽰0—F (14)4.1.2数码管59秒倒计数 (15)4.2矩阵键盘 (15)4.3 LCD1602滚动显⽰年⽉⽇时分秒 (16)4.4 AD转换 (16)4.5家电遥控器 (17)第五章⼩结 (17)参考⽂献: (18)第⼀章绪论1.1概述随着我国⼯业技术和电⼦技术的发展和进步,⾃动控制技术也已经得到了极⼤的普及和应⽤,⽽这些⾃动控制技术的核⼼技术就是单⽚微型计算机,简称单⽚机。
它以其⾼可靠性、⾼性价⽐、低电压、低功耗等⼀系列优点,被⼴泛应⽤于控制系统、数据采集等领域。
⽽51单⽚机系列以其超⾼的性价⽐深受⼴⼤电⼦爱好者和开发者以及⼤学⽣群体的欢迎。
故⽽本次课程设计采⽤STC89C52单⽚机。
1.2课程设计任务必做项⽬(这是每个学⽣必做的任务):1.基本系统:在51单⽚机开发系统PCB电路板上完成电⼦元器件的焊接、调试、程序下载,并实现数码管显⽰、矩阵键盘扫描、中断程序、定时器程序、串⼝通讯等基本功能;2.显⽰功能:焊接电路并实现对1602液晶屏的显⽰功能,要求能滚动显⽰字符;3.输出控制:焊接电路并实现对继电器的控制功能;4.数据采集:焊接电路并实现对AD0832的数据采集功能;选做项⽬(以下任选⼀):1.家电遥控器:实现对红外接收管和发射管的控制功能,要求能够学习遥控器的红外码,并能发射相应的编码,实现红外遥控器的功能。
AT89C51基于单片机智能浇花系统设计说明
目录1. 绪论 (1)1.1系统工作原理 (1)1.2系统模块 (1)1.3系统操作界面及其操作过程 (1)1.3.1 系统操作过程 (2)2. 部件的选择 (2)2.1芯片的选择 (2)2.2继电器的选择 (2)2.3阀门的选择 (2)2.3.1 电磁阀的选择 (2)3. 硬件设计 (2)3.1设备的结构 (2)3.1.1 中央处理单元 (2)3.1.2 LED显示部分 (3)3.1.3 电磁阀部分 (3)3.1.4按键部分 (3)3.1.5 指示灯部分 (3)3.2总电路设计图 (3)3.3AT89C51单片机电路 (4)3.4晶振电路 (5)3.5复位电路 (5)3.6按键电路 (7)3.9LED显示电路 (7)3.10电磁阀电路 (9)4. 软件设计 (9)4.1系统组成 (9)4.2消抖流程及程序 (10)4.3总流程及程序 (12)4.4按键处理总流程及程序 (13)4.5工作中的处理流程 (14)5. 结论 (15)参考文献 (16)AT89C51基于单片机智能浇花系统设计摘要:本设计是通过AT89C51单片机采用汇编语言进行编程,在LED液晶屏上实现小时,分,秒的显示;并利用单片机来实现计时,定时功能,同时通过7个按键开关和3个指示灯来实现参数设置和调节功能、浇花间隔时间的设定、浇水持续时间的设定、单片机对电磁阀的自动控制。
根据用户设定的时间顺利的完成浇花任务。
关键词:单片机,控制,显示,电磁阀1.绪论1.1 系统工作原理自动浇花系统的设计,其主要执行装置是一个电磁阀门,其一端连接水管,另外一端连接外置的水管作为浇水口,浇水的水量主要由单片机控制。
设备主要是通过控制浇水的时间间隔和浇水的持续时间来控制浇水量的。
1.2 系统模块系统主要是由单片机、电源、按键、显示、指示灯、复位电路、电机模块等组成。
图1-1 系统模块1.3 系统操作界面及其操作过程复位电路模51单片机模块电源模块 按键模块指示灯模块 显示模块电机模块图1.2 系统操作界面1.3.1 系统操作过程注:用上图中的数字编号代替相关按键A:放置设备,接上水管(注意:保证不漏水),插上插头。
变频器说明书
YTB-S2系列交流电机变频调速器使用阐明书概述YTB-S2系列变频器是我公司在YTB-S1旳基本上改善而来,它保持了原有旳长处,改善了运营性能, 增长了直流制动功能,及其他附属功能. 使调速更可靠,应用更广泛.,采用先进旳SMD工艺,严格旳出厂质检,可以满足顾客旳多种使用规定.开箱检查1 确认在运送过程中与否导致损坏。
2 检查变频器旳铭牌以拟定在您手中旳产品就是所订货品。
3 检查包装箱内含变频器本体一台,使用阐明书一份,出厂合格证一张及其他选购品。
型号说明1.安装为了提高散热效果,应垂直安装变频器,安装底板应为铁质或为其他阻燃耐热材料,并留有足够旳通风空间(周边至少留有12CM以上旳空间).2.接线打开接线盖板,即可看到主接线柱和控制用接线柱。
端子阐明见表二。
位置排列如图3, 图4为典型接线图.表二1. 此变频器仅应用于工业三相感应电机。
2 进线端应接有同容量以上旳接触器或空气开关,以便紧急时立即切断电源。
3. 电源输入端R , S, T端与变频器输出端U,V,W端千万不能接错,否则将损坏变频器.4. 变频器输出端(U,V,W)不容许接继电器,补偿电容器,否则将损坏变频器。
5. 变频器外壳应接地,以保证人身安全。
6. 变频器内有高电压,切勿以手触摸,断电后,高压需一定期间释放, 因此维修检查时, 要待接线盖板下LED 批示灯完全熄灭后方可进行.7. 当使用60Hz以上输出频率时,请事先对电机及负载旳安全性充足确认.8. 长期不用时, 请务必切断变频器供电电源.注意事项1. 产品出厂时,已将内部按键作为默认频率设定方式。
此外两种方式(0-10mA输入方式和外部电位器方式) ,请参见典型接线图,选择其一接线,并使频率设定方式开关K设立在相应位置。
2. 外接型旳外引控制盒,外引电位器以及外接控制线与主机旳连线应远离电磁线,动力线等强电磁磁干扰性旳场合. 以免影响变频器旳正常工作..3.本机分为一般型与外接型两种,后者通过9针D型插座将主机与外接操作盒相连,外接操作盒自带频率设定电位器,主机体外形尺寸请参见图2。
单片机原理(按键识别 )实验报告
教育资料
.
while (1) {
if(key==0) {
delay(1000); if(key==0) {
led=~led; while(key==0); }
} } } (2)按键识别 ( 按下灭,再按闪) #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit led=P2^6; sbit key=P2^7;
.
switch(j) { case 0 : led=0;break; case 1 : led=~led;delay(100);break; default:break; }
}
}
(3)按键识别 ( 按下数码管数值加 1) #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; uchar DispBuf[8]; sbit led=P2^6;
教育资料
.
if(hour>=24) {
hour=0; }
}
void main() {
uint i=2; while (1) {
if(key==0) {
delay(1000); if(key==0) {
i++; while(key==0); i=i%3;
教育资料
.
} } switch(i)
按键控制数码管增减
单片机两位数码显示器,并根据端口的接线情况编写相应的程序,使其具有以下功能:
1.单片机系统具有双向循环显示功能,两位数码管采用十进制,最大显示
值是99,最小显示值是00,
2.按下S1后,数码管的数值自动增1;(00—99)
3.按下S2后,数码管的数值自动减1;(99—00)
4.按下S3时,数码管停止递增或递减,并显示当时的数值;
5.数码管数值自动增、减时间间隔T 0.5S<T<1S。
评定内容:
1.组装好单片机部分
2.组装好数码管部分
3.组装好电源部分
4.单片机及数码管能够工作
5.按键S1工作正常
6.按键S2工作正常
7.按键S3工作正常
8.数码管数字在改变时没有闪烁。
数码管、按键综合应用
数码管、按键综合应⽤重庆邮电⼤学微处理器与嵌⼊式系统设计课程实验报告实验名称:数码管、按键综合应⽤学期:2014-2015学年第2学期班级:学号:学⽣姓名:任课教师:实验教室:YF311⼆〇⼀五年〇五⽉九⽇【实验名称】数码管、按键综合应⽤实验要求:1、按下K0键,LED灯D0亮,数码管12位开始计数(00-FF);2、按下K1键,LED灯D1亮,数码管34位开始计数(00-FF);3、按下K2键,LED灯D2亮,数码管56位开始计数(00-FF);4、按下K3键,LED灯D3亮,数码管78位开始计数(00-FF);5、按下K4键,D0-D7中奇数位亮(D0、D2、D4、D6);6、按下K5键,D0-D7中偶数位亮(D1、D3、D5、D7);7、按下K6键,D0-D7左移流⽔灯;8、按下K7键,D0-D7右移流⽔灯;9、拓展项⽬:按下K8键,停⽌计数器计数且计数器数值清零,数码管全灭。
实验⽬的:1、熟悉4位共阴数码管的基本原理,熟悉4位共阴数码管的显⽰和编程⽅法;2、熟悉⾮编码键盘的⼯作原理和键盘的扫描⽅式,熟悉键盘的去抖⽅法和键盘应⽤程序的应⽤;3、熟悉51单⽚机中断功能的基本使⽤⽅法,熟悉定时器引发中断的⽅法和中断应⽤程序的应⽤;实验⽅法:;1、通过keil软件编写控制单⽚机并实现相应功能的程序,并⽣成相应的hex⽂件;2、将keil⽣成的hex⽂件通过STC-ISP软件导⼊到单⽚机中;3、观察相应的实验现象;4、根据实现现象优化相应代码。
实验步骤:1、通过keil软件建⽴⼯程并添加⽂件;2、编写控制单⽚机并实现相应功能的程序;3、编译⽣成相应的hex⽂件;4、将⽣成的hex⽂件通过STC-ISP软件导⼊到单⽚机中;5、观察相应的实验现象;6、根据实现现象优化相应代码。
实验效果:因数码管图⽚过多,故截取相应⼏张呈现实验效果#include#include#define uint unsigned int#define uchar unsigned charsbit SLock=P1^3;void lflash(); //流⽔灯左移void rflash(); //流⽔灯右移void display0(uchar,uchar);//1、2位数码管显⽰void display1(uchar,uchar);//3、4位数码管显⽰void display2(uchar,uchar);//5、6位数码管显⽰void display3(uchar,uchar);//7、8位数码管显⽰void clear();//数码管不显⽰且显⽰的数字清零Uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar num=0,shi,ge,num0,key;uchar dox1,dox2;//左移、右移端⼝初始值void matrixkeyscan();//延时void delayms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//1、2位数码管显⽰void display0(uchar shi,uchar ge){SLock=1;P2=table[shi];SLock=0;P0=0xfe;delayms(5);SLock=1;P2=table[ge];SLock=0;P0=0xfd;}//3、4位数码管显⽰void display1(uchar shi,uchar ge) { SLock=1;P2=table[shi];SLock=0;P0=0xfb;delayms(5);SLock=1;P2=table[ge];SLock=0;P0=0xf7;delayms(5);}//5、6位数码管显⽰void display2(uchar shi,uchar ge) { SLock=1;P2=table[shi];SLock=0;P0=0xef;delayms(5);SLock=1;P2=table[ge];SLock=0;P0=0xdf;delayms(5);}//7、8位数码管显⽰void display3(uchar shi,uchar ge) { SLock=1;P2=table[shi];SLock=0;P0=0xbf;delayms(5);P2=table[ge];SLock=0;P0=0x7f;}void clear(){P0=0xff;P2=0xff;num=0;}void init(){TMOD=0x01;TH0=(65535-50000)/256;TH0=(65535-50000)%256; EA=1;ET0=1;}void T0_time(void) interrupt 1 { TH0=(65535-50000)/256;TH0=(65535-50000)%256; num0++;if(num0==5){num0=0;num++;if(num==255)num=0;shi=num/16;ge=num%16;}}void matrixkeyscan(){P3=0xfe;temp=P3;temp=temp&0xf0; if(temp!=0xf0){temp=P3;temp=temp&0xf0; if(temp!=0xf0){temp=P3; switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }TR0=1;}}P3=0xfd;temp=temp&0xf0; if(temp!=0xf0){delayms(10); temp=P3;temp=temp&0xf0; if(temp!=0xf0){temp=P3; switch(temp){case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10); temp=P3;temp=temp&0xf0; if(temp!=0xf0){temp=P3; switch(temp){case 0xeb:key=8;break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}}void main(){init();dox1=0x7f;dox2=0x7f; while(1){ matrixkeyscan(); switch(key){case 0:display0(shi,ge); break;case 1:display1(shi,ge); break;case 2:display2(shi,ge); break;case 3:display3(shi,ge); break;case 4:P2=0xaa;break;case 5:P2=0x55;break;case 6:lflash();break;case 7:rflash();break;case 8:TR0=0;clear();break;}}}//流⽔灯左移8位void lflash(){P2=dox1; delayms(500);dox1=_crol_(dox1,1); }//流⽔灯右移8位void rflash(){P2=dox2;delayms(500);dox2=_cror_(dox2,1);}⼼得体会:在实现实验要求时原本打算在矩阵键盘扫描查询使⽤switch语句的时候,在case⾥⾯完成各功能⼦函数的调⽤以完成相应功能。
51单片机数码管加减
实现的功能:按下key1键数字加1,按下key2键数字减1,按下key3键数字归零。
并且满足,在不松开按键时,数字会按一定时间间隔持续递增或递减。
数码管显示程序:void display(uchar shu){uchar bai,shi,ge;bai=shu/100;shi=shu/10%10;Ge=shu%10;P2=0x7f;P0=table[ge];delay(5);P2=0xbf;P0=table[shi];delay(5);P2=0xdf;P0=table[bai];delay(5);}这里是利用传送函数,在传送过程中我们传送的是一个值,这个值的百、十、个位,我们在子函数中进行分解。
再通过数组将段码、位码,传送到相应的I/O。
此外还要注意的一点是:这里是动态扫描,不能忘了原理,是一位一位的显示,只是太快了,看不出来,所以在每一个数码管亮之间一定要有10毫秒的延时!!!键盘子程序:void keyscan(){P1=0xff; // P1口赋初值,key_code=P1;//将P1口的状态赋予一个变量,便于以后的检测。
if(key_code!=0xff)//如果条件满足说明有按键被按下。
{for(i=0;i<30;i++)display(shu);//这小段子程序有两个作用:1、不断的扫描显示子程序。
这样就会避免一种现象:按键被按下时,所有的数码管会闪烁,加了这小段程序后给人的感觉是各个数码管是独立的,互不影响,它加他的,我前面几位该不变就不变。
2、还起到延时作用。
switch(key_code)//利用switch可以是程序事半功倍,又好读,应该借鉴。
{case 0xfe://注意格式的书写if(shu<255)shu++;break;//不要忘了case 0xfd:if(shu>0)shu--;break;case 0xfb:shu=0;}key_code=0xff;//这句程序得格外注意,容易丢,为下一次判断Key_code做准备。