1单片机与HD7279的子程序

合集下载

基于c51与HD7279的万年历

基于c51与HD7279的万年历

单片机课程设计报告题目:万年历学年:2010-2011 学期:第一学期专业:通信工程班级:通信081学号:08010*** 姓名:***指导教师:****时间:第二周~ 第四周地点:10404浙江万里学院电子信息学院一、设计任务:设计一个万年历,主要以单片机和芯片7279为硬件基础,载入用C语言编写的程序,设计出功能完善的万年历。

该万年历通过按键可切换显示时间与日期;能自动准确的计时;能通过判断年份和月份来显示相应的天数(即能判断闰年,大月和小月)。

且能通过不同的按键调整时间和日期。

二、设计说明书:1)模块划分:1、显示模块利用7279芯片来控制数码管的显示。

通过7279芯片的其中一条指令来让数码管对应的位置显示对应的数字。

本程序采用方式0译码。

在主程序中进行。

2、切换模块主要靠按键来切换显示时间和日期,采用中断方式来进行。

3、计时模块本程序采用定时计数器T0,定时50ms,即50ms进一次中断,20次后达到1秒,秒位加一,达到60秒后分位加一,一次类推周而复始的进行计数。

该模块也是采用中断方式进行采用11.0592M的晶振。

4、校时模块该模块也是通过按键来对时间和日期进行校时。

先通过一个按键来选择要校时的部分,再通过另外两个按键来对该部分进行加减,调整到正确的时间和日期。

日期在校时过程中还要对年份和月份进行判断是不是闰年,是大月还是小月。

进过判断后来显示相应的日期。

上述计时过程中也要进行判断。

该模块也采用中断方式。

2)变量列表:char digit[2][8] 利用二维数组变量记录数码管显示的数字unsigned char key_number 用来表示按键的键码unsigned char i=0; 用来记录进入中断的次数,同时也用来控制循环次数unsigned int tmr;unsigned char j;用来控制循环次数unsigned char a ; a来表示调用第几个数码管unsigned char flag1=0 ; flag1表示调节时间或日期的哪一位unsigned char flag=0 ; flag表示时间和日期变化标志,0时显示时间,1时显示日期3)子程序列表:void long_delay(void); // 长延时void short_delay(void); // 短暂延时void delay10ms(unsigned char); // 延时10MSvoid write7279(unsigned char, unsigned char); //把命令和数据写入到HD7279unsigned char read7279(unsigned char); // 从HD7279中读出数据void send_byte(unsigned char); // 发送一个字节unsigned char receive_byte(void); // 接收一个字节void t0() interrupt 1{} 定时计数,用于时间和日期的计数void intt1() interrupt 2 {} 切换功能,选择功能和校时功能的实现4)流程图:三、使用说明书:打开电源,显示时间。

HD7279键盘显示的应用设计说明

HD7279键盘显示的应用设计说明
图2 扫描式编码键盘
这种键盘的按键排成矩阵形式 ,以减少按键联线。如图中有16个键 ,排列成4行 4 列 ,仅需 8 根引线。时钟发生器的输出送给4位计数器进行计数 ,计数器的低 2 位经译码后作为行扫描 ,高2位经译码后作为列扫描。若没有检出有键闭合 ,则计数器周而复始反复计数 ,即反复进行扫描 ,一旦检出有键闭合 ,就发出一个脉冲使时钟振荡器停振 ,计数器随即停止计数。单片机通过读取计数器的计数值来获取闭合键所在的行列位置 ,然后从 ROM中查表
图2 74922(16键)引脚排列图
DA:数据有效信号。若无键按下 ,保持低电平。若有键按下 ,变为高电平 ,直到键放开 ,才转为低电平。/OE:输出使能。D~A:按键值输出 ,按BCD码输出。
2.3
在设计单片机系统时 ,为了实现系统所需的多按键 ,多位十进制数显示的和节约 I/O口资源 ,简化硬件电路要求 ,在串行口被用于其它用途的情况下 ,我们选用了一种新型的键盘、显示接口电路。其设计思想为:在显示部分:用 7 根 I/O 线通过七段译码器(7447)和at89c51外接了 8 个LED数码管即可完成动态显示。其中 ,段码采用硬件译码 ,单片机读到的键盘值送到 P0 口的低 4 位 ,经 7447 七段译码器译成段码送数码管。而位线由 P2 口的 P2.0~P2.78位控制。在键盘部分:键盘扫描由74922芯片来完成。设计中用了5个 I/O线于74922芯片相接。其中4根 I/O线(P1.0~P1.3)接 74922 的 A、B、C、D引脚 ,向单片机传送键值的BCD码。P1.4接74922的DA引脚 ,作为是否有键按下和按键是否放开的识别端。程序中只要检测 DA脚由低电平 →高电平(有键按下) 、高电平 →低电平 (键放开) ,就将 74922 的 D、C、B、A (键值的 BCD 码) 读入AT89C51。这个键值再由 P0 口的低 4 位送给七段译码器7447 ,硬件译码后的段码送给数码管显示。使得键盘控制程序相当简单 ,减轻了 CPU 用软件去扫描键盘 ,读取键值的负担 ,从而提高了 CPU的利用率。

基于c51与HD7279的时钟

基于c51与HD7279的时钟

浙江万里学院电信学院课程设计报告课程名称:单片机课程设计设计内容:万年历实验时间:2010年9月实验地点:10404专业班级:通信081姓名:*****学号:**********指导老师:*****2010年9 月28 日1、1数字万年历产生的背景20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要事情,一时的耽误可能酿成大祸。

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。

下面是单片机的主要发展趋势。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。

从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。

这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。

、1、2数字万年历的意义万年历是采用数字电路实现对年、月、日,时、分、秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

MSP430程序HD7279键盘程序

MSP430程序HD7279键盘程序

//HD7279键盘程序#include "msp430g2452.h"#include "HD7279.h"static void delay_us(uint16 n) //N us延时函数{for(; n>0; n--);}void HD7279_Init(void){//HD7279_DIR |= HD7279_CS + HD7279_CLK + HD7279_DATA;HD7279_DIR |= HD7279_CLK + HD7279_DATA;HD7279_DIR &= ~HD7279_KEY;HD7279_IES |= HD7279_KEY; // 下降沿触发方式HD7279_IFG &= ~HD7279_KEY; // 清空中断标志HD7279_IE |= HD7279_KEY; // 使能KEY 中断//SendByte(0xA4); //清除缓存指令}/***发送一个字节的数据***/void SendByte(uint8 byte){uint8 i;HD7279_DIR |= HD7279_DA TA;HD7279_CLK_0;//HD7279_CS_0;delay_us(40);for (i=0;i<8;i++){if (byte&0x80)HD7279_DA TA_1;elseHD7279_DA TA_0;delay_us(1);HD7279_CLK_1;delay_us(12);HD7279_CLK_0;delay_us(12);byte = byte<<1;}HD7279_DATA_0;//HD7279_CS_1;}/***接收一个字节的数据***/uint8 ReceiveByte(void){uint8 i, state, out_byte;HD7279_CLK_0;HD7279_DIR &= ~HD7279_DATA;//HD7279_CS_0;delay_us(40);for (i=0;i<8;i++){HD7279_CLK_1;delay_us(12);out_byte=out_byte<<1;state = HD7279_IN & HD7279_DA TA;if (state == HD7279_DATA){out_byte=out_byte|0x01;}HD7279_CLK_0;delay_us(12);}//HD7279_CS_1;return (out_byte);}//写带数据的指令void write_7279(uint8 cmd, uint8 dat){SendByte(cmd);SendByte(dat);}uint8 read_7279(void){SendByte(0x15); // 发送读命令return (ReceiveByte());}/*void HD7279_disp(unsigned int disp_data){unsigned char shiwan,wan,qian,bai,shi,ge;unsigned int temp;temp = disp_data;shiwan = temp/100000;wan = temp%100000/10000;qian = temp%100000%10000/1000;bai = temp%100000%10000%1000/100;shi = temp%100000%10000%1000%100/10;ge = temp%100000%10000%1000%100%10;write_7279(0x80,ge);write_7279(0x81,shi);write_7279(0x82,bai);write_7279(0x83,qian);write_7279(0x84,wan);write_7279(0x85,shiwan);}*/uint8 Get_7279_KeyData(void){uint8 key_data, key_value;key_data = read_7279();if ((key_data < 8) && (key_data > 3))key_value = 8 - key_data;else if ((key_data < 16) && (key_data > 11))key_value = 20 - key_data;else if ((key_data < 24) && (key_data > 19))key_value = 32 - key_data;else if ((key_data < 32) && (key_data > 27))key_value = 44 - key_data;elsekey_value = 0;return (key_value);}//12864程序#include "msp430g2452.h"#include "12864.h"static void delay(uint16 t){unsigned int i,j;for(i=0; i<t; i++)for(j=0; j<14; j++);}void sendbyte(uint8 zdata){uint8 i;for(i=0; i<8; i++){if((zdata << i) & 0x80)SID_1;elseSID_0;SCLK_0;SCLK_1;}}void write_com(uint8 cmdcode){//CS_1;sendbyte(0xf8);sendbyte(cmdcode & 0xf0);sendbyte((cmdcode << 4) & 0xf0);delay(2);}void write_data(uint8 Dispdata){//CS_1;sendbyte(0xfa);sendbyte(Dispdata & 0xf0);sendbyte((Dispdata << 4) & 0xf0);delay(2);}void LCD_Init(void){LCD_DIR |= (LCD_SID + LCD_SCK);delay(2000);write_com(0x30);delay(50);write_com(0x0c);delay(50);write_com(0x01);//清屏delay(50);write_com(0x06);//00000110); //光标右移//06 delay(100);}void LCD_SetPosition(uint8 x,uint8 y){uint8 pos;if(x == 0)x = 0x80;else if(x == 1)x = 0x90;else if(x == 2)x = 0x88;else if(x == 3)x = 0x98;pos = x + y;write_com(pos);//显示地址}void LCD_DisplayString(uint8 *s){while(*s > 0){write_data(*s);s++;delay(50);}}void LCD_DisplayNumber(uint32 num, uint8 len){uint8 wei[10];uint8 i;uint8 flag = 0;for (i = 0; i < len; i++){wei[i] = num%10;num = num/10;}for (i = len; i > 0; i--){if ((wei[i-1] == 0) && (flag == 0) && (i > 1))write_data(' ');else if(wei[i-1] != 0)flag = 1;if (flag)write_data(wei[i-1]+0x30);}if (flag == 0)write_data('0');}void LCD_DisplayXiaoshu(uint32 num, uint8 len) {uint8 wei[10];uint8 i;for (i = 0; i < len; i++){wei[i] = num%10;num = num/10;}write_data('.');for (i = len; i > 0; i--){write_data(wei[i-1]+0x30);}}。

HD7279A的原理与应用

HD7279A的原理与应用

1 1 0 0 0 0 0 0 X X d5 d4 d3 d2 d1 d0XX:无影响。

该指令的作用是关闭某个数码管中的某一段,其对应关系同段点亮指令。

3读取键盘指令:0 0 0 1 0 1 0 1 d7 d6 d5 d4 d3 d2 d1 d0该指令的作用是读取当前的键盘代码。

与其他带数据的指令不同,它的第2个字节不是写入HD7279A 的数据,而是从HD7279A读回的按键代码。

如前说述,当有键按下时其围是00H~3FH;而无键按下时代码是FFH。

四、时序(1)纯指令时序:微处理器发出8个CLK脉冲,向HD7279A传送8位指令。

DATA引脚为高阻状态,如图2所示。

图2 纯指令时序(2)带数据指令时序:微处理器发出16个CLK脉冲,前8个向HD7279A传送8位指令;后8个向HD7279A传送8位数据。

DATA引脚为高阻状态,如图3所示。

图3 带数据指令时序(3)读键盘指令时序:微处理器发出16个CLK脉冲,前8个向HD7279A传送8位指令, DATA引脚为高阻状态;后8个由HD7279A向微处理器返回8位按键代码,DATA引脚为输出状态。

在最后1个CLK脉冲的下降沿DATA引脚恢复高阻状态,如图4所示。

图4读键盘指令时序五、几点说明1证正确的时序是HD7279A正常工作的前提条件。

当选定了HD7279A的振荡元件RC和晶振之后,应调节延时时间,使时序中的T1~T8满足表2所列要求。

由表2所列的数值可知,HD7279A时序规定的时间围很宽,达10~50倍,很容易满足,但为了提高微处理器访问HD7279A的速度,在要求系统运行速度较快时,应仔细调试HD7279A的读写程序,使其运行时间接近最短。

2 微处理器通过KEY引脚电平来判断是否有键按下,在使用查询方式管理键盘时,该引脚接至微处理器的1位I/O端口;如果使用中断方式,该引脚应接至微处理器的外部中断输入端。

同时应将该中断触发控制位设置成下降沿有效的边沿触发方式。

HD7279

HD7279

BIT_COUNT DATA 07FH TIMER DATA 07EH TIMER1 DATA 07DH TEN DATA 07CH DATA_IN DATA 020H DATA_OUT DATA 021H


CS CLK DATA KEY
(2).接收一字节子程序:(接收字符存于A中) STJS: MOV R7,#08H LP1: SETB P1.1 SETB P1.2 MOV R6,#02H LP2: DJNZ R6,LP2 MOV C, P1.2 RLC A CLR P1.1 MOV R6,#01H LP3: DJNZ R6,LP3 DJNZ R7,LP1 RET
D7 1 D6 0 D5 1 D4 0 D3 0 D2 0 D1 0 D0 0
与左移指令类似,但所做移动为自左向右(从第8位 向第1位)移动,移动后,最左边一位为空。 B.带有数据的指令 (1). 下载数据且按方式0译码
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
(2). 左移指令A1H
D7 1 D6 0 D5 1 D4 0 D3 0 D2 0 D1 0 D0 1
例如,原显示为:
4 2 5 2 L P 3 9
其中第2位‘3’和第4位‘L’为闪烁显示,
执行了左移指令后,显示变为:
2 5 2 L P 3 9
第2位‘9’和第4位‘P’为闪烁显示。
(3).右移指令A0H
4.串行接口的时序图。 A、HD7279A的指令结构类型: (1)、不带数据的纯指令,指令的宽度为8个BIT。即微处 理器需发送8个CLK脉冲。 (2)、带有数据的指令,宽度为16个BIT,即微处理器需 发送16个CLK脉冲。 (3)、读取键盘数据指令,宽度为16个BIT,前8个为微处 理器发送到HD7279A的指令,后8个BIT为HD7279A返 回的键盘代码。执行此指令时,HD7279A的DATA端在 第9个CLK脉冲的上升沿变为输出状态,并与第16个 脉冲的下降沿恢复为输入状态,等待接收下一个指 令。 B、串行接口的时序图:

HD7279键盘显示的应用设计文

HD7279键盘显示的应用设计文

HD7279键盘显示的应用设计目录一.整体方案 (1)1.系统概述 (1)2.芯片内部结构及原理 (2)二.理论分析与计算 (5)1.设计思想 (5)2.设计流程 (6)三.电路与程序设计 (7)1.硬件电路设计 (7)2.程序设计 (7)四.结果分析 (11)五.总结(经验教训) (13).整体方案(方案论证)1.系统概述近年来,随着科学技术的发展,仪器的人性化和智能化在人们生活的各个领域之中的作用越来越明显。

单片机的应用越来越广泛,其中很多地方都是通过按键来实现各项所需功能。

键盘、显示接口是单片机应用系统中最常用的基本接口电路。

因单片机自身体积小 ,引脚少 ,在设计单片机系统时 ,如系统所需的按键较多 ,需显示的十进制位数较多单片机自身的引脚不够用 ,并且此时串行口又要用作它用时 ,在以往的设计中 ,往往以总线方式外接8255或8155芯片 ,以便扩展并行口。

这种方法因使用的芯片的体积大引脚多 ,而使硬件系统较为庞大。

另一种方法是将键盘和显示接口直接与单片机的 I/O引脚相接 ,但这种方法将占用较多有限的 I/O口。

为了使有限的 I/O口用于实现更多的系统功能 ,同时系统的硬件设计和软件设计尽可能简洁 ,我们在单片机多键盘、多位数显示接口的应用系统设计电路中 ,选用了片内有 4KB Flash 存储器的 AT89C51 单片机 ,接口采用非总线结构。

在显示部分通过译码器控制段码和位线 ,尽量减少 I/O 口的使用。

在键盘部分 ,键盘的扫描交给74922集成芯片来完成 ,使 CPU减轻用软件去扫描键盘的负担 ,提高 CPU 的利用率 ,较好地完成了设计任务。

2.芯片内部结构及原理74922芯片74922芯片是专用编码键盘接口芯片 ,当按下某一按键时 ,该芯片能自动给出相应的编码信息 ,并可自动消除抖动 ,从而可使设计者免除一部分软件编程。

74922芯片有16键 IC和20键 IC,图1所示为4 ×4(16键)扫描式编码键盘原理图。

HD7279

HD7279

华北电力大学实验报告||实验名称 HD7279课程名称DSP系统设计||专业班级:电子0901班学生姓名:陈跃聪学号: 200903020104 成绩:指导教师:姚国珍实验日期:2012.4.11实验四HD7279一、目的与要求1.掌握HD7279的使用方法。

2.掌握外部中断的实现方法。

3.掌握I/O设备的扩展方法和CPLD的应用。

二、主要内容1. 阅读HD7279芯片文档,学习其使用方法,重点是串口数据通信方法。

2. 阅读实验台CPLD的下载程序,学习其在键盘扩展实验中的应用。

3. 学习实验台程序学习HD7279串行通信的实现方法。

4.在实验台上运行程序,掌握实验实现原理。

三、实验的步骤及现象实验现象:这是一个综合性的实验,综合了外部中断和I/O扩展键盘控制,实验的现象是,数码管先进行一次检测扫描,且依次由右至左移动,数值有0到F结束,然后全部熄灭,结下来如过你按下键盘,最高位也就是最右边的那个数码管会显示你按下的键值,按下下一个键时,前一个键值会向左移动一位,最后移出8位显示管。

同时伴随着按键的按下,数码管下的LED灯会交替闪烁。

实验的主要程序如下:#include "DspRegDefine.h" //VC5402 寄存器定义//--------------- HD7279A 指令-----------------------------#define CMD_RESET 0xa4 //复位#define CMD_TEST 0xbf //测试#define RTL_UNCYL 0xa1 //左移#define RTR_UNCYL 0xa0 //右移#define RTL_CYCLE 0xa3 //循环左移#define RTR_CYCLE 0xa2 //循环右移#define DECODE0 0x80 //下载数据按方式0译码#define DECODE1 0xc8 //下载数据按方式1译码#define UNDECODE 0x90 //下载数据但不译码#define BLINKCTL 0x88 //闪烁控制#define ACTCTL 0x98 //消隐控制#define SEGON 0xe0 //段点亮#define SEGOFF 0xc0 //段关闭#define CMD_READ 0x15 //读键盘数据void send(){UINT16 i;cs_low(); //片选CS=0delay_50us(); //延时50us// 数值的显示,最右边的那个数码管显示按下的键值for(i=0;i<8;i++){switch(send_buff&0x80){case 0x00:temp7279 = port0008; //7279data低break;case 0x80:port0008 = 0; //7279data高}port0007 = 0;//7279clk高delay_8us();temp7279 = port0007;//7279clk低delay_8us();send_buff<<=1;}}void receive(){UINT16 i;port0005 = 0; //DIR配置成输入asm(" nop");delay_50us();for(i=0;i<8;i++){//7279clk高port0007 = 0;delay_8us();key7279 = port0009& 0x0001;asm(" nop ");//接收到的数据在D0位data_buff=data_buff|(key7279<<(15-i));//7279clk低temp7279 = port0007;delay_8us();}asm(" nop "); //在这里设置断点观察data_buff中的值rece_buff=(data_buff>>8) & 0x00ff; //接收到的数据右移给rece_buffdata_buff=0x0000; //清除data_bufftemp7279 = port0005;//DIR配置成输出}interrupt void int0() //中断0中断子程序{UINT16 temp;*(unsigned int*)IFR = 0xFFFF; //清除所有中断标志,"写1清0"send_buff = CMD_READ; //读键值指令send();receive();asm(" nop ");send_buff = RTL_UNCYL; //数据左移指令send();send_buff = DECODE1;send();send_buff = rece_buff; //将接收到的键值送显示send();show = ~show;cs_high(); //7279CS置高asm(" rsbx INTM"); //开总中断return;}void main(){UINT16 temp;//----------系统初始化-------------------------------asm(" nop ");cpu_init(); //初始化CPUasm(" nop ");//---------------------------------------------------temp7279 = port0005; //DIR =0 ,输出数据给7279//-----------7279复位--------------------------------asm(" nop ");send_buff = CMD_RESET; //复位指令send();delay_25ms(); //25ms延迟--复位延迟Delay(100);asm(" nop ");//-----------7279测试--------------------------------send_buff = CMD_TEST; //测试指令send();Delay(50000);asm(" nop ");//-----------7279复位--------------------------------send_buff = CMD_RESET; //复位指令send();delay_25ms(); //25ms延迟--复位延迟Delay(100);asm(" nop ");//-----------7279显示0\1\2---f----------------------for(temp=0;temp<16;temp++) //送出数据0x00~0x0F{send_buff = DECODE1; }send();send_buff = temp; 扫描检测从0到E 依send(); 显示Delay(9000);send_buff = RTL_UNCYL; //数据左移指令send();Delay(9000); }//-----------7279复位--------------------------------send_buff = CMD_RESET; //复位指令send();//-----------7279CS='1'-----------------------------cs_high();//-----------外部中断1初始化------------------------xint0_init(); //外部中断1初始化子程序asm(" nop ");//----------- 等待键盘中断--------------------------while(1){port0004 = show;}}从实验的程序我们可以看出,其中包含上次实验中的主要部分,例如寄存器的配置等等,所以对于那部分的分析也和上次实验的一样。

HD7279A在单片机键盘和显示接口中的应用

HD7279A在单片机键盘和显示接口中的应用

HD7279A在单片机键盘和显示接口中的应用
李外云
【期刊名称】《湖南理工学院学报(自然科学版)》
【年(卷),期】2001(014)001
【摘要】介绍了串行键盘和显示接口芯片HD7279A的各种控制命令字的功能和用法,通过实例从硬件和软件方面介绍其在单片机键盘和显示接口中的应用。

%This paper introduces the function and use of control command word of serial keyboard and dis-plays interface of HD7279A in detail, and introduces its keyboard and displays interface and application in sin-gle-chip-computer from hardware and soft via example.
【总页数】4页(P78-81)
【作者】李外云
【作者单位】岳阳师范学院物理系,湖南岳阳 414006
【正文语种】中文
【中图分类】TP368.1
【相关文献】
1.PIC单片机扩展HD7279A键盘显示接口的新方法 [J], 邓洪峰;林林;叶学
2.基于HD7279A的单片机显示及键盘系统设计 [J], 姜楠;宋文龙;郭晓刚
3.键盘显示智能控制芯片HD7279A的应用设计 [J], 陈光绒;胡克满
4.键盘显示驱动芯片HD7279A及其应用 [J], 陈晓燕;汪道辉
5.键盘显示驱动芯片HD7279A及其应用 [J], 陈晓燕;汪道辉
因版权原因,仅展示原文概要,查看原文内容请购买。

可编程数码管键盘串行接口芯片HD7279A的原理与应用

可编程数码管键盘串行接口芯片HD7279A的原理与应用

可编程数码管/键盘串行接口芯片HD7279A的原理与应用摘要:HA7279A是一种智能键盘和LED专用控制芯片,它带有串行接口,可同时驱动8位共阴式数码管或6 4只独立LED。

文中详述了该芯片的工作原理、工作时序及控制指令,给出了HD7279A与CPU的实际接口电路及设计程序,同时指出了实际应用中的一些注意事项。

关键词:HD7279A;工作时序;接口电路1主要特性HD7279A是比高公司生产的单片具有串行接口、可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时可连接多达64键的键盘矩阵,一片即可完成LED显示及键盘接口的全部功能。

HD7279A和微处理器之间采用串行接口,其接口和外围电路比较简单,且占用口线少,加之它具有较高的性能价格比,因此,在微型控制器、智能仪表、控制面板和家用电器等领域获得了日益广泛的应用。

HD7279A的主要特点如下:●带有串行接口,无需外围元件便可直接驱动LED;●各位可独立控制译码/不译码、消隐和闪烁等属性;●具有(循环)左移/(循环)右移指令;●具有段寻址指令,可方便地用来控制独立的LED显示管;●64键键盘控制器内含去抖动电路。

2引脚说明HD7279A一共有28个引脚,各引脚的主要功能如下:RESET:复位端。

当该端由低电平变成高电平,并保持25ms后,复位过程结束。

通常,该端接+5V电源;DIG0~DIG7:8个LED管的位驱动输出端;SA~SG:LED数码管的A段~G段的输出端;DP:小数点的驱动输出端;RC:外接振荡元件连接端,其中电阻的典型值为1.5kΩ 电容的典型值为15pF。

HD7279A与微处理器仅需4条接口线,其中CS为片选信号(低电平有效)。

DATA为串行数据端,当向HD7279A发送数据时,DATA为输入端;当HD7279A输出键盘代码时,DATA为输出端。

CLK为数据串行传送的同步时钟输入端,时钟的上升沿表示数据有效。

HD7279A的原理与应用

HD7279A的原理与应用

1 1 0 0 0 0 0 0 X X d5 d4 d3 d2 d1 d0XX:无影响。

该指令的作用是关闭某个数码管中的某一段,其对应关系同段点亮指令。

3读取键盘指令:0 0 0 1 0 1 0 1 d7 d6 d5 d4 d3 d2 d1 d0该指令的作用是读取当前的键盘代码。

与其他带数据的指令不同,它的第2个字节不是写入HD7279A 的数据,而是从HD7279A读回的按键代码。

如前说述,当有键按下时其围是00H~3FH;而无键按下时代码是FFH。

四、时序(1)纯指令时序:微处理器发出8个CLK脉冲,向HD7279A传送8位指令。

DATA引脚为高阻状态,如图2所示。

图2 纯指令时序(2)带数据指令时序:微处理器发出16个CLK脉冲,前8个向HD7279A传送8位指令;后8个向HD7279A传送8位数据。

DATA引脚为高阻状态,如图3所示。

图3 带数据指令时序(3)读键盘指令时序:微处理器发出16个CLK脉冲,前8个向HD7279A传送8位指令, DATA引脚为高阻状态;后8个由HD7279A向微处理器返回8位按键代码,DATA引脚为输出状态。

在最后1个CLK脉冲的下降沿DATA引脚恢复高阻状态,如图4所示。

图4读键盘指令时序五、几点说明1证正确的时序是HD7279A正常工作的前提条件。

当选定了HD7279A的振荡元件RC和晶振之后,应调节延时时间,使时序中的T1~T8满足表2所列要求。

由表2所列的数值可知,HD7279A时序规定的时间围很宽,达10~50倍,很容易满足,但为了提高微处理器访问HD7279A的速度,在要求系统运行速度较快时,应仔细调试HD7279A的读写程序,使其运行时间接近最短。

2 微处理器通过KEY引脚电平来判断是否有键按下,在使用查询方式管理键盘时,该引脚接至微处理器的1位I/O端口;如果使用中断方式,该引脚应接至微处理器的外部中断输入端。

同时应将该中断触发控制位设置成下降沿有效的边沿触发方式。

基于HD7279和51单片机的计算器

基于HD7279和51单片机的计算器

基于HD7279和51单片机的计算器HD7279 是一款用于扩展单片机I/O 口的芯片,至少我是这么认为的,虽然它占用了单片机4 个I/O 但是真正作为传输的仅仅是一根总线,它可以同时驱动8 位共阴数码管(或者8×8点阵),及8×8的矩阵键盘,而同时接在单片机上的话,至少需要3~4 组I/O,当然单总线控制的芯片基本需要自己的指令和时序。

接到这个课程设计之前我自己懒懒散散地看了一段时间的C51(用C 语言编写单片机代码),之前老师教的是A51(用汇编编写单片机代码),我玩了很久,但是发现A51 真的很局限,汇编这种语言是写给机器看的,真正地写0 和写1,真正是一个寄存器一个寄存器的调用,对于8 位的51 单片机来说,要实现1000×1000或者小数是比较困难的。

老师推荐用C,之前只是看书实现过一些小东西这回要做比较大的项目了,虽然还有其他课题比如温度计和数字钟,不过都做过,只是环境不一样,修改一下代码太没有挑战性了。

确实开始轻敌了,真正做的时候发现不是那么简单,高中的时候学过一点VB 做过计算器,如果让我现在做,也许给我几天我可以做出来,用C 我也没什么问题,但是C51 就有难度了,要考虑太多硬件的东西,特别是显示这个模块好不容易瘦下去的头又两个大了。

等我真正意识到的时候,已经过去几个礼拜了,呵呵,要和朋友说抱歉了,虽然我答应“等我做完计算器之后再帮你改下程序”但是没一个实现。

当然,此程序因为基本全是自己写的,被方晋甬老师称之为“程序设计不成熟、比较乱”的,额,本来准备用switch 语句,但是吕昂老师说switch 语句会产生过多闲置寄存器(可是他没有考虑到我仅仅是实现很少的功能),这段程序只实现+-×÷,符号闪烁,过八位报错等功能但是没有小数,只能计算一步(加少数程序即可计算多部)。

其实程序挺早就写出来了,只是一直出不来效。

单片机运行的LCD+7289数码管+蜂鸣器程序

单片机运行的LCD+7289数码管+蜂鸣器程序
P0=0x38;wcmd(); //指令码设置16*2显示,8位数据接口
P0=0x0c;wcmd(); //开显示,不显示光标,不闪烁光标
P0=0x06;wcmd(); //读或写一个字符后地址累加器加一,光标加一
P0=0x01;wcmd(); //清屏
send(dat);
CS=1;
}
/* 发送双字节命令 */
void send_cmd_dat(uchar cmd,uchar dat)
{
send(cmd);
delay_50us();
send(dat);
CS=1;
}
/* 获取键盘的位置码 */
sbit s=P3^3; //蜂鸣
sbit RS=P2^0; //lcd
sbit RW=P2^1;
sbit E=P2^2;
//需要在INT区把KEY用跳线冒跳到INT0,其余四个跳到VCC
//这样,P3^2就相当于直接连接到key
uchar dat_h;
for(j=0;j<50;j++)
for(i=0;i<125;i++){;}
}
void delay_2s()
{
uchar i = 40;
while(i--)
delay_50ms();
}
void send(uchar com)
{
uchar i;
com_data=com;
uchar dat_l;
bdata uchar com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;

12.4.4 HD7279A驱动程序_单片机C语言程序设计_[共2页]

12.4.4  HD7279A驱动程序_单片机C语言程序设计_[共2页]

159图12.44 HD7279A 与MCS-51单片机接口12.4.4 HD7279A 驱动程序驱动程序包括主程序、发送一字节数据程序、接收一字节数据程序和延时程序。

由于串行通信程序对时序要求较严,程序中的延时采用定时器/计数器T0,T0工作在方式1。

设系统主频为12MHz ,一个机器周期是1µs ,延时多少µs ,初值就是多少,方便准确。

计时时间采用查询方式,定时时间到,TF0=1。

读的键值用十进制在L1、L2上显示,时序参考图12.41;命令参考12.4.2节HD7279A 的控制命令说明。

发送一字节数据时高位在前,低位在后;接收键盘数据时也是高位在前,低位在后。

硬件接线同图12.44所示。

参考程序如下:#include <reg51.h>void delay (uchar n);//通用延时函数 void send (uchar b); //发送一字节数据给HD7279Auchar rese (void ); //从HD7279A 接收一字节数据#define uchar unsigned charsbit CS =P1^0;sbit CLK =P1^1;sbit DATA= P1^2;sbit KEY= P1^3;sbit cflag =ACC^7;sbit cflag0 =ACC^0;//-------------------------------------------------------------------------------- //发送一字节数据程序//--------------------------------------------------------------------------------。

HD7279键盘实验

HD7279键盘实验

创新实验申请表尊敬的陈林老师:您好!我是2012级机械三班的学生,我申请做单片机模拟创新实验,望老师批准。

实验题目:HD7279键盘实验一、实验目的1学习HD7279的通讯方法。

2深入了解单片机综合仿真实验仪的使用。

二、实验设备EL-EMCU-I试验箱、EXP-89S51/52/53 CPU板。

三、实验内容1.将CPU板正确安放在CPU接口插座上,跳线帽JP2短接在上侧。

2.连线:用导线将MCU的IO1----IO3、INT0分别连接到HD7279的7279_CS、7279_CLK、7279_DATA、7279_KEY;用导线将HD7279的7279_A、7279_B、7279_C、7279_D、7279_E、7279_F、7279_G、7279_DP分别连接到LED DISP的LED_A、LED_B、LED_C、LED_D、LED_E、LED_F、LED_G、LED_DP;用导线将HD7279的7279_C1、7279_C2、7279_C3、7279_C4分别连接到LED DISP的LED_C1、LED_C2、LED_C3、LED_C4;用导线将HD7279的7279_A、7279_B、7279_C、7279_D、7279_E、7279_F、7279_G、7279_DP分别连接到KEY的KEY7、KEY6、KEY5、KEY4、KEY3、KEY2、KEY1、KEY8;用导线将HD7279的7279_C1连接到KEY的插孔KEY。

连接好仿真器。

3.实验箱上电,在PC机上打开Keil C环境,输入自己编写的程序,编译程序,上电,进入调试状态,单步运行程序观察每条语句执行后相关寄存器的变化。

4.上电,运行程序,按键,观察LED显示的数据是否与键盘一一对应。

四、实验程序申请人:申请时间:。

键盘显示智能控制芯片HD7279A的应用

键盘显示智能控制芯片HD7279A的应用
!" 电压 !# 电流 !$ % "& !’ (" !) *! 07H< : 0*= 2B, @6&/ 延时 #) 9:D +17++ -,+7; ; 发复位命令 0*= -7?7C*>?, @&7’/; +17++ 2,<2,?E 12 等待按键 2?7A?: FE !,;, 2?7A?; 发送读键盘指令 0*= -7?7C*>?, @")/; +17++ 2,<+17++ A,1,H=, 2,?E 12 @"& 0*= E, 0*= 7, -7?7CH< -H= 7E 0*= ?,< , 7 0*= -7?7C*>?, @."/ +17++ 2,<?,< 0*= -7?7C*>?, +17++ 2,<0*= -7?7C*>?, @.&/ +17++ 2,<0*= -7?7C*>?, E +17++ 2,<2,?E 12 F<E !,; , I7H? I7H?: 2F0B J
读者・作者・编者
为目的, 不加评论和补充解释, 简明、 确切地记述文献重要内 容的短文。其基本要素包括研究的目的、 方法、 结果和讨论, “其他 ” Q 不属于研究、 有时也包括 研制、 调查的主要目的, 但 就其见识和情报价值而言也是重要的信息 R 。摘要应具有独 立性和自明性,并拥有与文献同等量的主要信息,即不阅读 全文, 就能获得必要的信息。大体上分为报道性摘要、 指示性 摘要和报道 ( 指示性摘要 $ 种。 《科技编辑大辞典 》 摘自

HD7279 C程序

HD7279   C程序

HD 7279 程序main()while (1)Winclude <reg51.h> //***函数定义*** void long_delay(void); void short_delay(void); void delaylOms(unsigned char); void write7279(unsigned char; unsigned char); unsigned char read7279(unsigned char); void send_byte(unsigned char); unsigned char receive_byte(void); //长延时 〃短暂延时 //延时10MS //写入到HD7279//从HD7279读出 //发送一个字节 //接收一个字节//***变量及I/O I I 定义***unsigned char digit[5];unsigned char key_number, j, k; unsigned int tmr; unsigned long wait_cnter; sbit cs=Pl A 4; //cs at Pl.4 sbitclk=Pl A5; sbit dat=Pl A 2; sbit key=Pl A 3; //elk 连接于Pl.5〃dat 连接于Pl.2//key 连接于P13//***♦** HD7279A 指令 ^define CMD_RESET 0xa4 ^define CMD_TESTOxbf fldefine DECODEO 0x80 #defineDECODE10xc8 ^define CMD_READ0xl5 fldefine UNDECODE 0x90 ^define RTL_CYCLE 0xa3 ^define RTR_CYCLE Oxa2 ^define RTL_UNCYL Oxal ^define RTR_UNCYLOxaO ^define ACTCTL 0x98 ^define SEGON OxeO ^define SEGOFF OxcO ^define BLINKCTL 0x88 //*** 主程序***for (tmr=0;tmr<0x2000;tmr++); // 上电延时 send_byte(CMD_RESET);// 复位 HD7279Asend_byte(CMD_TEST); for (j=O ;j 〈3;j++)delaylOms(lOO); )send_byte(CMD_RESET);// 闪烁指令及键盘接口测试〃将用户按键的键码显示岀来,如果10秒内无按键 //或者按so 键即进入下一步演示wait_cnter=0; key_number=Oxff; write7279( BLIN KCTLOxfc); write7279( UND ECOD E,0X08); write7279(UNDECODE+t0x08);do第1、2两位设为闪烁显示 在第1位显示下划线//在第2位显示卜划线…key_number=read7279(CMD_READ); write7279(DECODEl+l,key_number/16); write7279(DECODEl,key_number&OxOf);// // //// //// 测试指令演示if (!key)// 如果有键按下while (!key); wait_cnter=0; )wait_cnter++;} while (key_number!=0 && wait_cnter<0x30000); 入下一步演示write7279(BLI N KCTLQxff);// // // 等待按键放开如果按键为'0'和超时则进 清除闪刼B 殳置for (j=0;j〈5;j++)//计数初始值为00000//测试指令 //延时约3秒//清除显示// // //读出键码//在第2位显示键码高8 //在第1位显示键码低8 快速计数演示digit[j]=0;write7279(DECODEO+Ldigit[j]);while (digit[4]<2) //如果计数达到20000就住手digit[0]++; if (digit[0]>9)digit[0]=0; digit[l]++; if(digit[l]>9)digit[l]=0; digit[2]++; if(digit[2]>9)digit[2]=0;digit[3]++; if (digit[3]>9)digit[3]=0; digit[4]++;if (digit[4]>9)digit[4]=0;write7279(DECODEO r digit[OJ);if (digit[0]==0)write7279(DECODEO+l,digit[l]);if(digit[l]==0)write7279(DECODEO+2,digit[2]);if (digit[2J==0)write7279(DECODEO+3,digit[3]);if (digit[3]==0)write7279(DECODEO+4/digit[4]);delaylOms(15O); send_byte(CMD_RESET);//清除显示〃一…………………………………………// 下载数据但不译码指令测试write7279(UNDECODE+7,Ox49); //在第8位按不译码方式显示一字符,三,delayl0ms(80);// 循环左/右移测试// ”三”字向右运动3次,再向左运动3次for (j=O;j<23;j++)(send_byte(RTR_CYCLE); // 循环右移23 次delayl0ms(12);}for (j=O;j〈23;j++)(send_byte(RTL_CYCLE); // 循环左移23 次delay 10ms( 12);i// 译码方式0及左移指令测试for (j=0;j<16;j++){send_byte(RTL_UNCYL); // 不循环左移指令write7279(DECODEO,j); 〃译码方式0指令,显示在第1位delayl0ms(50);)delayl0ms(150);send_byte(CMD_RESET);// 译码方式1及右移指令测试for (j=0;j<16;j++){send_byte(RTR-UNCYL); // 不循环左移指令write7279(DECODEl+7,j); //译码方式0指令,显示在第8位delayl0ms(50);}delayl0ms(150);//////消隐指令测试k=Oxff;for (j=0;j<6;j++)k=k〃;write7279(ACTCTUk);delaylOms(lOO)://每隔一秒钟增加一个消隐位write7279(ACTCTL,0xff); delaylOms(lOO);send_byte(CMD_RESET); //恢复8位显小//清除显示// 段点亮指令和段关闭指令for (j=0;j<64;j++)(write7279(SEGONJ); 〃将64个显示段逐个点亮write7279(SEGOFFJ-l); //同时将前一个显示段关闭delayl0ms(20);void write7279(unsigned char cmd, unsigned char dta) (send_byte (cmd); send_byte (dta);Iunsigned char read7279(unsigned char command)(send_byte(command);return(receive_byte());void send_byte( unsigned char out_byte)unsigned char i;cs=O;long_delay();for (i=0;i<8;i++){if (out_byte&0x80)( dat=l;}else{ dat=0;)clk=l;short_delay();clk=O;short_delay(); out_byte=out_byte*2;}dat=O;)unsigned char receive_byte(void)(unsigned char i, in byte;dat=l; // set to input modelong_delay();for (i=0;i<8;i++){clk=l;short_delay();in_byte=in_byte*2;if (dat)(in_byte=in_byte| 0x01;}clk=0;short_delay();dat=0;return (in_byte);void long_delay(void)(unsigned char i; for (i=0;i<0x30;i++);)void short_delay(void)(unsigned char i;for (i=0;i<8;i++);I〃■****“****************** 延时n*10msvoid delaylOms(unsigned char time)(unsigned char i;unsigned int j;for (i=O;i<time;i++)(for(j=0;j<0x390;j++)(if (!key){keyjntf);}1。

基于DS18B20和HD7279的AT89C51单片机程序设计

基于DS18B20和HD7279的AT89C51单片机程序设计

/* ################################################################################################# ###################### ###################### ###################### 程序名称:基于DS18B20 的温度传感器程序设计############################################ 单位名称:东北林业大学信息学院"3+1"实验室############################################ 程序作者:lbl ######################################################################################## ※所有延时都针对于振荡频率是11.0592 MHz 的晶振############################################ ###################### #################################################################################################*/#include <reg51.h>#include <math.h>// ******* HD7279 指令*******#define CMD_RESET 0xA4 // 复位#define CMD_ACTCTL 0x98 // 消隐//#define CMD_TEST 0xBF // 测试//#define CMD_LEFT 0xA1 // 左移//#define CMD_RIGHT 0xA0 // 右移//#define CMD_CIRCLE_LEFT 0xA3 // 循环左移//#define CMD_CIRCLE_RIGHT 0xA2 // 循环右移//#define CMD_SEG_OPEN 0xE0 // 段点亮//#define CMD_SEG_CLOSE 0xC0 // 段关闭//#define CMD_READ_KEYBOARD 0x15 // 读键盘数据#define CMD_MODE0 0x80 // 0x80 | a2 a1 a0 下载数据且按方式0译码0--9 _ H E L P 空格#define CMD_MODE1 0xC8 // 0xC8 | a2 a1 a0 下载数据且按方式1译码0--F#define CMD_MODE2 0x90 // 0x90 | a2 a1 a0 下载数据但不译码A--G、DP八段void delay1ms(unsigned char); // 延时N个1Msvoid delay10ms(unsigned char); // 延时N个10Msvoid Display(void); // 把DS18B20 的温度值写到HD7279 中// ******* 开始HD7279 函数声明*******void long_delay(void); // 长延时void short_delay(void); // 短延时void write_7279(unsigned char, unsigned char); // 写数据到HD7279void Init_7279(void); // HD7279初始化void send_byte(unsigned char); // 发送一个字节// ******* 结束HD7279 函数声明******// ******* 开始DS18B20 函数声明*******void Init_DS18B20(void); // DS18B20 初始化void Wait_DS18B20(void); // 等待DS18B20 应答bit Read_Bit(void); // 读取一个位的数据unsigned char Read_Byte(void); // 读取一个字节数据:数据void Write_Byte(unsigned char); // 写入一个字节数据:命令void Convert(void); // 温度转换int Read_Temperature(void); // 读取温度值// ******* 结束DS18B20 函数声明*******unsigned char High_data, Low_data; // 温度值得高、低字节unsigned char DS18B20_data[4][2] // 要显示的4位数据= {0, 0, 1, 0, 2, 0, 3, 0};sbit CS = P2^7; // CS(片选) 接到P2.7口sbit CLK = P2^6; // CLK 接到P2.6口sbit DA TA = P2^5; // DA TA 接到P2.5口sbit PAUSE = P1^7; // PAUSE 接到P1.7口sbit DQ = P1^0; // DS18B20 接到P1.0口// ******* main()主函数*******void main(){Init_DS18B20(); // DS18B20 初始化Init_7279(); // HD7279 初始化write_7279(CMD_ACTCTL, 0x0f); // 设置DIG0--DIG3显示,DIG4--DIG7消隐delay10ms(10); // 延时10个10MSwhile(1){while(~PAUSE); // 判断是否暂停,0:暂停;1:不停Display(); // 把DS18B20 的温度值写到HD7279 中delay1ms(50); // 延时50个1MS//****************** 读出DS18B20 数据,并将此数据写入HD7279 中*****************write_7279(CMD_MODE1 | DS18B20_data[0][0], DS18B20_data[0][1]);write_7279(CMD_MODE1 | DS18B20_data[1][0], 0x80 | DS18B20_data[1][1]);write_7279(CMD_MODE1 | DS18B20_data[2][0], DS18B20_data[2][1]);write_7279(CMD_MODE1 | DS18B20_data[3][0], DS18B20_data[3][1]);delay10ms(30); // 延时50个10MS}}// ******* 延时n个1MS *******// ******* 输入:n 延时个数*******void delay1ms(unsigned char n){unsigned int i;while(n --){for(i = 0;i < 125;i ++); // i ++ ,8μS 左右}}// ******* 延时n个10MS *******// ******* 输入:n 延时个数*******void delay10ms(unsigned char n){unsigned int i;while(n --){for(i = 0;i < 1250;i ++); // i ++ ,8μS 左右}}void Display(void) // 把DS18B20 的温度值写到HD7279 中{unsigned int temp;temp = abs(Read_Temperature()); // 获取温度值的绝对值DS18B20_data[0][1] = temp % 10000 / 1000; // 温度值十位DS18B20_data[1][1] = temp % 1000 / 100 ; // 温度值个位DS18B20_data[2][1] = temp % 100 / 10 ; // 温度值十分位DS18B20_data[3][1] = temp % 10 ; // 温度值百分位}// ##################################### 开始DS18B20 相关设置#####################################// ******* DS18B20 初始化*******void Init_DS18B20(void){unsigned int i;i = 100; // 长时间低电平DQ = 0;while(i --);// 上升沿i = 8; // 短时间高电平DQ = 1;while(i --);}// ******* 等待DS18B20 应答*******void Wait_DS18B20(void){unsigned int i;// 等待上升沿while(DQ); // 等待DQ 变为低电平while(~DQ); // 等待DQ 变为高电平// 检测到应答脉冲i = 4;while(i --);}// ******* 读取DS18B20 的一位数据*******// ******* 输出:Bit,DS18B20 的一位数据*******bit Read_Bit(void){unsigned int i;bit Bit;DQ = 0;i ++; // 一小周期低电平,延时1μS 以上DQ = 1;i ++;i ++; // 两小周期高电平,延时15μS 以上Bit = DQ;i = 8; // 持续一段时间的一位数据,延时60μS 以上while(i --);return (Bit);}// ******* 读取DS18B20 的一字节数据*******// ******* 输出:Byte,DS18B20 的一字节数据*******unsigned char Read_Byte(void){unsigned char i, j, Byte;Byte = 0;i = 8;while(i --){j = Read_Bit();Byte = (j << 7) | (Byte >> 1); // 每位数据进入方向7 →0 }return (Byte);}// ******* 写入DS18B20 的一字节数据*******// ******* 输入:Byte,DS18B20 的一字节数据*******void Write_Byte(unsigned char Byte){unsigned int i;unsigned char j;bit Bit;j = 8;while(j --){Bit = Byte & 0x01; // 把字节数据拆成位数据Byte >>= 1;if(Bit) // 写“1”{DQ = 0;i ++;i ++; // 延时15μS 以上DQ = 1;i = 8; // 延时60μS 以上while(i --);}else // 写“0”{DQ = 0;i = 8; // 延时60μS 以上while(i --);DQ = 1;i ++;i ++; // 延时15μS 以上}}}// ******* 启动温度转换*******void Convert(void){Init_DS18B20(); // DS18B20 初始化Wait_DS18B20(); // 等待DS18B20 应答脉冲delay1ms(50);Write_Byte(0xCC); // skip rom 命令Write_Byte(0x44); // convert T 命令}// ******* 读取温度值*******int Read_Temperature(void){unsigned int temp = 0;int value = 0;float t = 0.0;Convert(); // 开始温度转换Init_DS18B20(); // DS18B20 初始化Wait_DS18B20(); // 等待DS18B20 应答脉冲delay1ms(50);Write_Byte(0xCC); // skip rom 命令Write_Byte(0xBE); // read scratchpad 命令Low_data = Read_Byte(); // 获取温度值低位字节(其中低4位为二进制的“小数”部分)High_data = Read_Byte(); // 获取温度值高位字节(其中高5位为符号位)temp = High_data; // 将高、低两个字节合成一个整形变量temp <<= 8; // 对于负数是利用补码来表示的temp |= Low_data; // 若是负值,读取出来的数值是用补码表示的,可直接赋值给int类型value = temp;// DS18B20 的默认为12 位,精度为0.0625 ℃t = value * 0.0625;// 将它放大100 倍,使显示时可显示小数点后两位,并对小数点后第三位进行4 舍5 入// 如t = 11.0625,进行计算后,得到value = 1106,即11.06 ℃// 如t = -11.0625,进行计算后,得到value = -1106,即-11.06 ℃value = t * 100 + (value > 0 ? 0.5 : -0.5);// ******* 温度修正*******// value += 72;// ************************return (value);}// ##################################### 结束DS18B20 相关设置##################################### // ##################################### 开始HD7279 相关设置#####################################// ******* HD7279 初始化*******void Init_7279(void){unsigned int i;CS = 0; // 片选使能send_byte(CMD_RESET); // 复位HD7279for(i = 0;i < 0x2000;i ++); // 延时,等待HD7279 完成初始化}// ******* 向HD7279 中写数据*******// ******* 输入:cmd 指令*******// ******* dat 数据*******void write_7279(unsigned char cmd, unsigned char dat){send_byte(cmd); // 写指令send_byte(dat); // 写数据}// ******* 向HD7279 中写纯指令*******// ******* 输入:cmd 指令*******void send_byte(unsigned char cmd){unsigned char i;CS = 0;long_delay(); // 长延时for(i = 0;i < 8;i++){if(cmd&0x80) // 写“1”{DA TA = 1;}else // 写“0”{DA TA = 0;}CLK = 1; // CLK形成下降沿short_delay();CLK = 0;short_delay();cmd = cmd * 2;}DA TA = 0;}// ******* 长延时*******void long_delay(void){unsigned char i;for(i = 0;i < 0x30;i ++);}// ******* 短延时*******void short_delay(void){unsigned char i;for(i = 0;i < 8;i ++);}// ##################################### 结束HD7279 相关设置#####################################。

HD7279A

HD7279A

#include<reg52.h>//定义子函数void longdelay(void);void shortdelay(void);void delay(unsigned int );void write(unsigned char,unsigned char);//写7279unsigned char read7279(unsigned char);//读7279;void send(unsigned char);//发送一个字节;unsigned char receive(void);//接收一个字节;//变量及I/O口定义unsigned char key_number;sbit cs=P1^4;//根据电路图来确定sbit clk=P1^5;sbit dat=P1^2;sbit key=P1^3;#define test 0xbf#define read 0x15#define ucl 0xa1#define reset 0xa4#define cmd_read 0x15 //读键盘数据指令//主程序char code dx516[3] _at_ 0x003b;main(){delay(25);//延时25mssend(reset);//复位send(test);//闪烁测试delay(5000);//持续5ssend(reset);//复位while(1){if(!key)delay(500);if(!key){send(0xa1);//使显示左移key_number=read7279(cmd_read);//获取键码write(0xc8,key_number);//在第一位显示}}}//子函数void write(unsigned char cmd,unsigned char dta){send(cmd);send(dta);}unsigned char read7279(unsigned char command){send(command);return(receive());}void send(unsigned char dataout){unsigned char i;cs=0;longdelay();for(i=0;i<8;i++){if(dataout&0x80)//取输出数据的最高位;{dat=1;}else{dat=0;}clk=1;shortdelay();clk=0;shortdelay();dataout=dataout*2;//输出数据左移一位}dat=0;}unsigned char receive(void){unsigned char i,datain;dat=1;longdelay();for(i=0;i<8;i++){clk=1;shortdelay();datain=datain*2;//把接收进来的数据左移一位,最高位先接收,左移8次后变为最//高位if(dat){datain=datain|0x01;//datain最后一位为1,即dat为高时最后一位为1,} //datain开始时为0,不执行这条语句时最后一位仍为0,//即dat为0时最后一位为0clk=0;shortdelay();}dat=0;return(datain);}void longdelay(void){unsigned char i;for(i=0;i<0x30;i++);}void shortdelay(void){unsigned char i;for(i=0;i<8;i++);}void delay(unsigned int i)//延时ims;{unsigned char j;while(i--){for(j=0;j<115;j++) //1ms基准延时程序{;}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1单片机与HD7279的子程序ORG 0100HSTART: MOV SP,#2FHMOV P1,#BLCALL DELAY25MMOV DATA_OUT,#0A4H LCALL SENDSETB CSMAIN: JB KEY,MAINMOV D ATA_OUT,#15H LCALL SENDLCALL RECEIVSETB CSMOV A,DATA_INANI A,#0F0HSWAP AMOV TEN,AMOV A,DATA_INANL A,#0FHMOV DIGTT,AMOV DATA_OUT,#0A1H LCALL SENDMOV DATA_OUT,#81H LCALL SENDLCALL DELAY100MOV DATA_OUT,TEN LCALL SENDMOV DATA_OUT,#80H LCALL SENDLCALL DELAY100MOV DATA_OUT,TEN LCALL SENDMOV DATA_OUT,#80H LCALL SENDLCALL DELAY100MOV DATA-OUT,DIGIT LCALL SENDSETB CSWAIT: INB KEY,WAITLJMP MAIN SEND: MOV BIT_COUNT,#8 CLR CSSEN_LOOP: LCALL DELAY100MOV C,DATA_OUT,7 MOV DAT,CSETB CLK:CLKMOV A,DATA_OUTBLAMOV DATA_OUT,ALCALL DELAY100CLR CLKDJNZ BIT_COUNT,SEND_LOOP CLR DATLCALL DELAY100RETEND2 键盘子程序#include< >#define uint unsigned int#define uchar unsigned char#define ulong unsigned long void delay10ms(); //按键去抖。

void keyboard(){=0;=0;=1;=0;=1;uchar key;while(1){P2=0xff;P2_4=0;key=P2&0x0f;if(key!=0x0f){delay10ms();key=P2&0x0f;if(key!=0x0f){switch(key){case 0x0e:display();break; case 0x0d:dispbulai();break; case 0x0b:shiftup();break; case 0x07:shiftdown();break; }key=key&0x0f;while(key!=0x0f){key=P2key=key&0x0f; }}}P2=0xff;P2_5=0;key=P2;key=key&0x0f; if(key!=0x0f) {delay10ms(); key=P2&0x0f; if(key!=0x0f) {switch(key){case 0x0e:p1=1;break; case 0x0d:p1=2;break; case 0x0b:p1=3;break; case 0x07:p1=0;break; }key=key&0x0f;while(key!=0x0f) {key=P2;key=key&0x0f;}}}P2=0xff;P2_6=0;key=P2;key=key&0x0f;if(key!=0x0f){delay10ms();key=P2&0x0f;if(key!=0x0f){switch(key){case 0x0e:p1=4;break; case 0x0d:p1=5;break; case 0x0b:p1=6;break; case 0x07:send();break;}key=key&0x0f; while(key!=0x0f) {key=P2;key=key&0x0f;}}}P2=0xff;P2_7=0;key=P2;key=key&0x0f;if(key!=0x0f) {delay10ms();key=P2&0x0f;if(key!=0x0f){switch(key){case 0x0e:p1=7;break; case 0x0d:p1=8;break; case 0x0b:p1=9;break; case 0x07:;break;}key=key&0x0f;while(key!=0x0f) {key=P2key=key&0x0f;}}}}}void delay10ms() {uchar i,j;for(i=50;i>0;i--) for(j=200;j>0;j--); }3 LCD液晶显示子程序#include <>#include <>sbit bz=P3^5;sbit rq=P3^4;delay() //延时{unsigned char i,j;for(i=0;i<2;i++){for(j=0;j<5;j++);}}longdelay(){unsigned int i,j;for (i=0;i<15;i++){for (j=0;j<100;j++);}}disp(int dat){if(bz==0){P0=dat;delay();rq=1;}while(bz==0);rq=0;}hz(int ff,int xx,int yy) //显示命令+坐标子程序{ disp(ff);delay();disp(xx);delay();disp(yy);delay();}hz2(int gg,int dd) // 汉字代码子程序{disp(gg);delay();disp(dd);delay();}displai() //显示辣菜{ =0;=0;=0;=1;=0;longdelay();bz=1;rq=0;while(1){ hz(0xc0,0x38,0x0c,0x1f,0x01,0x06,0x18,0x60,0x01,0x06,0x1c,0xfc,0xc4,0x34,0x0c,0x03,); //1longdelay();hz(0x80,0x41,0x31,0x11,0x19,0x15,0x13,0xff,0x11,0x11,0x13,0 x15,0x19,0x11,0x21,0x40,);hz2(0x00,0x01,0x02,0x04,0x08,0x10,0x60,0xc0,0xc0,0x60,0x38, 0x1c,0x0e,0x07,0x02,0x01,); //夫longdelay();hz(0x80,0x44,0x75,0x55,0x5d,0x55,0x57,0xff,0x55,0x55,0x57,0 x5f,0x4c,0x54,0x24,0x40,);hz2(0x40,0x41,0x43,0x45,0x59,0x7a,0xea,0x44,0xc4,0x4a,0x72, 0x51,0x49,0x44,0x42,0x01,); //妻longdelay();hz(0x80,0x40,0x7f,0x58,0x48,0x7f,0x22,0x27,0x24,0x25,0xff,0 x24,0x2c,0x37,0x20,0x40,);hz2(0x02,0x0d,0xf2,0x84,0x8a,0xfc,0x20,0xf8,0x80,0x40,0xff, 0x10,0x08,0xf4,0x02,0x01,); //肺hz(0x80,0x40,0x20,0x7f,0x08,0x0c,0x0a,0x09,0x08,0xf9,0x0a,0 x0c,0x08,0x18,0x28,0x40,);hz2(0x01,0x03,0x0e,0xf4,0x88,0x90,0xa0,0xc0,0x80,0xc0,0xa0, 0xff,0x08,0x04,0x02,0x01,); //片longdelay();hz(0xc0,0x38,0x0c,0x1f,0x01,0x06,0x18,0x60,0x01,0x06,0x1c,0xfc,0xc4,0x34,0x0c,0x03,);hz2(0xc0,0x3f,0x1c,0x13,0x11,0x16,0x18,0x60,0x01,0x9e,0x9c,0x64,0xc4,0xb8,0x7c,0x03,); //15longdelay();hz(0xc0,0x3e,0x1c,0x13,0x11,0x17,0x1e,0x60,0x01,0x0e,0x1c,0x64,0xc4,0xb4,0x0c,0x03,); //2longdelay();hz(0x81,0x5d,0x75,0x55,0x5d,0x45,0x7f,0x45,0x09,0x31,0xd7,0 x14,0x1c,0x18,0x30,0x40,);hz2(0x00,0x79,0x4a,0x4c,0x7a,0x11,0xfe,0x42,0x84,0x58,0xe0, 0x10,0x0c,0x07,0x02,0x01,); //歌hz(0x80,0x40,0x22,0x3f,0x2a,0x26,0x22,0x63,0x5f,0x43,0xc2,0 xc6,0x4a,0x12,0x20,0x40,);hz2(0x00,0x05,0x1a,0x34,0xe8,0x58,0x24,0x42,0xfc,0x40,0x20, 0x50,0x38,0x1c,0x0a,0x01,); //乐longdelay();hz(0x80,0x40,0x27,0x10,0x08,0x04,0x02,0xff,0x00,0x01,0x02,0 x04,0x08,0x17,0x20,0x40,);hz2(0x00,0x05,0xfe,0x04,0x0c,0x14,0x24,0xfc,0x84,0x44,0x24, 0x14,0x0c,0xfe,0x02,0x01,); //山longdelay();hz(0xa2,0x6a,0xa6,0x73,0x2e,0x2e,0x22,0x27,0x24,0x25,0xff,0 x24,0x2c,0x37,0x20,0x40,);hz2(0x41,0x43,0x4e,0xf4,0x48,0x52,0x24,0xc8,0xb0,0xc0,0xff, 0xb0,0x98,0x8c,0x0a,0x01,); //辣longdelay();hz(0x80,0x40,0x60,0x50,0x48,0x44,0x42,0x47,0x48,0x51,0x62,0 x44,0x08,0x11,0x20,0x40,);hz2(0x80,0x81,0x82,0x84,0x88,0x92,0xa1,0xfe,0x80,0xc0,0xa0, 0x90,0x88,0x84,0x82,0x01,); //子hz(0xa0,0x68,0x26,0x31,0x2e,0x34,0x02,0x3f,0x30,0x6d,0xa2,0 x25,0x3e,0x10,0x20,0x40,);hz2(0x08,0x11,0x62,0x84,0xc8,0x30,0x20,0xd0,0x90,0xd0,0xb0, 0x92,0x89,0xfe,0x02,0x01,); //鸡longdelay();hz(0xc0,0x3c,0x1c,0x13,0x11,0x16,0x1c,0x60,0x01,0x1e,0x1c,0x64,0xc4,0xb8,0x7c,0x03,);hz2(0xc0,0x3f,0x1c,0x13,0x11,0x16,0x18,0x60,0x01,0x9e,0x9c,0x64,0xc4,0xb8,0x7c,0x03,); //35longdelay();hz(0xc0,0x3c,0x1c,0x13,0x11,0x16,0x1c,0x60,0x01,0x1e,0x1c,0x64,0xc4,0xb8,0x7c,0x03,); //3longdelay();hz(0xa2,0x6a,0xa6,0x73,0x2e,0x2e,0x22,0x27,0x24,0x25,0xff,0 x24,0x2c,0x37,0x20,0x40,);hz20x41,0x43,0x4e,0xf4,0x48,0x52,0x24,0xc8,0xb0,0xc0,0xff,0 xb0,0x98,0x8c,0x0a,0x01, (); //辣hz(0x90,0x4c,0xa0,0x73,0x0c,0x06,0x02,0x03,0x02,0xff,0x02,0 x06,0x0a,0x12,0x22,0x40,);hz2(0x20,0x21,0xff,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x20, 0x10,0x08,0x04,0x02,0x01,); //汁longdelay();hz(0xa0,0x61,0x21,0x31,0x2f,0xfd,0x23,0x21,0x20,0x23,0xfa,0 x26,0x2a,0x33,0x20,0x40,);hz2(0x02,0x05,0x0a,0x34,0xc8,0x14,0x26,0xfc,0x80,0xfe,0x24, 0x14,0x0c,0xfe,0x02,0x01,); //茄longdelay();hz(0x80,0x42,0x27,0x1a,0x7a,0x27,0x06,0x01,0x02,0x0f,0x7a,0 x27,0x0e,0x14,0x20,0x40,);hz2(0x02,0x03,0x22,0x66,0xaa,0x32,0x22,0x42,0xa2,0x62,0xa2, 0x32,0x2a,0x26,0x02,0x01,); //丝longdelay();hz(0xc0,0x38,0x0c,0x1f,0x01,0x06,0x18,0x60,0x01,0x06,0x1c,0xfc,0xc4,0x34,0x0c,0x03,);hz2(0xc0,0x38,0x0c,0x1f,0x01,0x06,0x18,0x60,0x01,0x06,0x1c,0xfc,0xc4,0x34,0x0c,0x03,); //15longdelay();}}dispbulai() //显示不辣菜{=0;=0;=0;=1;=0;longdelay();bz=1;rq=0;while(1){ hz(0x80,0x48,0x28,0x1f,0x08,0x04,0x02,0x01,0x00,0x01,0x02 ,0x04,0x08,0x10,0x20,0x40,);0x10,0x08,0x04,0x02,0x01,); //1longdelay();hz(0xa4,0x5c,0x27,0xff,0x0d,0x14,0x3f,0x2b,0x2a,0xab,0x7f,0 x2e,0x2a,0x3f,0x22,0x40,);hz2(0x10,0xe1,0x02,0xff,0x0a,0x9c,0xf0,0xdf,0x92,0xd2,0xf2, 0x92,0x9a,0x9f,0x02,0x01,); //糖longdelay();hz(0xcf,0x48,0x7f,0x58,0x7f,0x4c,0x4f,0x43,0x12,0xff,0x12,0 x16,0xfe,0x12,0x22,0x40,);hz2(0xfe,0xa5,0x26,0x24,0xac,0xb4,0xfe,0x40,0xff,0xd2,0xb2, 0x92,0x9a,0xff,0x02,0x01,)); //醋longdelay();hz(0x80,0x40,0xff,0x99,0x89,0x8d,0x8b,0xff,0x89,0x89,0x8b,0 x8d,0xff,0x10,0x20,0x40,);hz2(0x02,0x03,0x22,0x26,0x2a,0x32,0x22,0xfe,0xa2,0x62,0x22, 0x32,0x2a,0x06,0x02,0x01,); //里longdelay();hz(0x80,0x49,0x6d,0x3a,0x1b,0x05,0x1b,0xe1,0x11,0x09,0x27,0 x35,0x5a,0x13,0x22,0x40,);0xfe,0x08,0x04,0x02,0x01,); //脊longdelay();hz(0x00,0x05,0x06,0xfc,0x0c,0x14,0x20,0x40,0x80,0x40,0x20,0 x10,0x08,0x04,0x02,0x01,);hz2(0xc0,0x3f,0x1c,0x13,0x11,0x16,0x18,0x60,0x01,0x9e,0x9c, 0x64,0xc4,0xb8,0x7c,0x03,); //15longdelay();hz(0xc0,0x3e,0x1c,0x13,0x11,0x17,0x1e,0x60,0x01,0x0e,0x1c,0x64,0xc4,0xb4,0x0c,0x03,); //2longdelay();hz(0x80,0x61,0x22,0x3c,0x29,0xff,0x2e,0x29,0x29,0xff,0x2a,0 x2c,0x2f,0x30,0x20,0x40,);hz2(0x00,0x03,0xae,0xa4,0x2c,0x52,0x62,0xd2,0x9a,0xc2,0x62, 0x3e,0xd8,0x0e,0x06,0x01,); //葱longdelay();hz(0x88,0xc6,0x60,0x1f,0x08,0x0f,0x0a,0x09,0x08,0xff,0x0a,0 x0c,0x08,0x1f,0x20,0x40,);hz2(0x20,0x21,0xff,0x04,0x08,0xff,0x62,0x42,0xc2,0xfe,0x62,0x52,0x4a,0xff,0x02,0x01,); //油longdelay();hz(0x84,0x5f,0xe4,0x37,0x2c,0x37,0x02,0x7f,0x49,0x49,0x7f,0 x4d,0x49,0x7f,0x20,0x40,);hz2(0x02,0xf3,0x92,0xf4,0x9c,0xf4,0x22,0x62,0xa2,0x62,0xfe, 0x32,0x2a,0x26,0x02,0x01,); //鲤longdelay();hz(0x84,0x5f,0xe4,0x37,0x2c,0x37,0x02,0x7f,0x49,0x49,0x7f,0 x4d,0x49,0x7f,0x20,0x40,);hz2(0x02,0xf3,0x92,0xf4,0x9c,0xf4,0x22,0x62,0xa2,0x62,0xfe, 0x32,0x2a,0x26,0x02,0x01,); //鱼longdelay();hz(0xc0,0x3e,0x1c,0x13,0x11,0x17,0x1e,0x60,0x01,0x0e,0x1c,0x64,0xc4,0xb4,0x0c,0x03,);hz2(0xc0,0x3f,0x1c,0x13,0x11,0x16,0x18,0x60,0x01,0x9e,0x9c,0x64,0xc4,0xb8,0x7c,0x03,); //25 longdelay(); hz(0xc0,0x3c,0x1c,0x13,0x11,0x16,0x1c,0x60,0x01,0x1e,0x1c,0x64,0xc4,0xb8,0x7c,0x03,); //3longdelay();hz(0x82,0x4a,0x6a,0x32,0x2a,0xff,0x16,0x27,0xd7,0x4b,0x4a,0 x56,0x6a,0x12,0x22,0x40,);hz2(0x00,0x01,0xff,0x9e,0xaa,0xda,0xaa,0xca,0xea,0xea,0xaa, 0xba,0xff,0x04,0x02,0x01,); //酱longdelay();hz(0x84,0x44,0x24,0x14,0x0c,0x04,0x07,0xff,0x05,0x05,0x06,0 x04,0x0c,0x14,0x24,0x40,);hz2(0x00,0x01,0x02,0x04,0x08,0x30,0xe0,0x40,0x80,0x60,0x30, 0x1c,0x0e,0x07,0x02,0x01,); //大longdelay();hz(0x80,0x46,0x24,0xfc,0xad,0xa5,0xa7,0xbd,0x85,0x85,0x87,0 xfd,0x0c,0x16,0x24,0x40,);hz2(0x00,0x01,0x02,0x04,0xff,0x50,0x70,0x50,0xd0,0x52,0x71, 0xfe,0x08,0x04,0x02,0x01,); //骨longdelay();hz(0xc0,0x30,0x0f,0x07,0x09,0x1f,0x18,0x60,0x01,0xe6,0x38,0x64,0xe4,0xfc,0x2c,0x03,);hz2(0xc0,0x37,0x0c,0x13,0x11,0x0e,0x1f,0x60,0x01,0xf6,0x18,0x64,0xc4,0x38,0xfc,0x03,); //40longdelay();hz(0xc0,0x30,0x0f,0x07,0x09,0x1f,0x18,0x60,0x01,0xe6,0x38,0x64,0xe4,0xfc,0x2c,0x03,); //4longdelay();hz(0x80,0x40,0x27,0x10,0x08,0x04,0x02,0xff,0x00,0x01,0x02,0 x04,0x08,0x17,0x20,0x40,);hz2(0x00,0x05,0xfe,0x04,0x0c,0x14,0x24,0xfc,0x84,0x44,0x24, 0x14,0x0c,0xfe,0x02,0x01,); //山longdelay();hz(0xc2,0x42,0x7f,0x52,0x4a,0x04,0x0b,0x11,0x22,0xc5,0x2a,0 x15,0x08,0x14,0x24,0x40,);hz2(0x10,0x11,0xe3,0x25,0x29,0x12,0x32,0x64,0xa4,0x48,0xa8, 0x10,0x28,0xc4,0x02,0x01,); //珍longdelay();hz(0x80,0x47,0x20,0xff,0x09,0x35,0x22,0x23,0xf4,0x2d,0x26,0 x2e,0x39,0x37,0x21,0x40,);hz2(0x82,0x0d,0x32,0xc4,0x29,0x92,0xac,0xf0,0x80,0xc0,0xfc, 0x92,0x8a,0x86,0x0e,0x01,); //烧longdelay();hz(0x80,0x40,0x3f,0x10,0x19,0x16,0x16,0xf9,0x14,0x13,0x13,0 x14,0x18,0x1f,0x20,0x40,);hz2(0x00,0x01,0xff,0x84,0x08,0x10,0x60,0xc0,0xc0,0x60,0x38, 0x12,0x09,0xfe,0x02,0x01,); //肉longdelay();hz(0xc0,0x3e,0x1c,0x13,0x11,0x17,0x1e,0x60,0x01,0x0e,0x1c,0x64,0xc4,0xb4,0x0c,0x03,);hz2(0xc0,0x3e,0x1c,0x13,0x11,0x17,0x1e,0x60,0x01,0x0e,0x1c,0x64,0xc4,0xb4,0x0c,0x03,); //25 longdelay();}}shiftup(){=0;=0;=0;=1;=0;disp(0xf5); //上移longdelay();longdelay();longdelay();longdelay();longdelay();longdelay() ;}shiftdown{=0;=0;=0;=1;=0;disp(0xf6); //下移longdelay();longdelay();longdelay();longdelay();longdelay();longdelay() ;}。

相关文档
最新文档