2025年ettercap 0.8.3教程(ettercap0.8.3.1)

ettercap 0.8.3教程(ettercap0.8.3.1)p 第 5 章 PIC16F877 的外围功能模块 p br 5 1 2 简单应用实例 br 该例用于令与 PORTD 口相连的 8 个发光二极管前 4 个点亮 后 4 个熄灭 在调试程序前 应使与 PORTD 口相连的 8 位拔码开关拔向相应的位置 br 例 5 1 PORTD 输出 p p include amp p p p p

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p>第5章 PIC16F877的外围功能模块<p><br/>5.1.2 简单应用实例<br/>该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。<br/>例5.1 PORTD输出<p><p>#include &nbsp; &nbsp; &nbsp; &nbsp;<pic.h><p>main()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; TRISD=0X00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*TRISD寄存器被赋值,PORTD每一位都为输出*/<p>while(1); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*循环执行点亮发光二极管的语句*/<p>&nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PORTD=0XF0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*向PORTD送数据,点亮LED(由实验模板*/<p>/*的设计决定相应位置低时LED点亮)。*/<p>}<p>}<p><br/><p>5.2.1 &nbsp;MSSP模块SPI方式功能简介<p>&nbsp; &nbsp; &nbsp; &nbsp; 下面是一段简单的SPI初始化例程,用于利用SPI工作方式输出数据的场合。<p>例5.2 &nbsp;SPI初始化程序<p>/*spi初始化子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; SPIINIT()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; PIR1=0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*清除SPI中断标志*/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPCON=0x30; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* SSPEN=1;CKP=0 , FOSC/4 */<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPSTAT=0xC0;<p>&nbsp; &nbsp; &nbsp; &nbsp; TRISC=0x00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*SDO引脚为输出,SCK引脚为输出*/<p>}<p>5.2.3 &nbsp;程序清单<p>下面给出已经在实验板上调试通过的一个程序,可作为用户编制其它程序的参考。<p>#include &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<pic1687x.h><p>/*该程序用于在8个LED上依次显示1~8等8个字符*/<p>static volatile int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};<p>volatile &nbsp; &nbsp; &nbsp; &nbsp; unsigned &nbsp; &nbsp; &nbsp; &nbsp; char &nbsp; &nbsp; &nbsp; &nbsp; data;&nbsp;<p>#define &nbsp; &nbsp; &nbsp; &nbsp; PORTAIT(adr,bit) &nbsp;((unsigned)(&adr)*8+(bit)) &nbsp; &nbsp; &nbsp; &nbsp;/*绝对寻址位操作指令*/<p>static &nbsp; &nbsp; &nbsp; &nbsp;bit PORTA_5 @ PORTAIT(PORTA,5);&nbsp;<p>/*spi初始化子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SPIINIT()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; PIR1=0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPCON=0x30; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* SSPEN=1;CKP=0 , FOSC/4 */<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPSTAT=0xC0;<p>&nbsp; &nbsp; &nbsp; &nbsp; TRISC=0x00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*SDO引脚为输出,SCK引脚为输出*/<p>}<p>/*系统各输入输出口初始化子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;initial()<p>{<p>TRISA=0x00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*A口设置为输出*/<p>&nbsp; &nbsp; &nbsp; &nbsp; INTCON=0x00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*关闭所有中断*/<p>&nbsp; &nbsp; &nbsp; &nbsp; PORTA_5=0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*LACK送低电平,为锁存做准备*/<p>}<p>/*SPI发送子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SPILED(int data)<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPBUF=data; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*启动发送*/<p>&nbsp; &nbsp; &nbsp; &nbsp; do<p>&nbsp; &nbsp; &nbsp; &nbsp; {<p>;<p>&nbsp; &nbsp; &nbsp; &nbsp; }while(SSPIF==0); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*等待发送完毕*/<p>SSPIF=0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*清除SSPIF标志*/<p>}<p>/*主程序*/<p>main()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; unsigned &nbsp; &nbsp; &nbsp; &nbsp;I;<p>&nbsp; &nbsp; &nbsp; &nbsp; initial(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*系统初始化*/<p>&nbsp; &nbsp; &nbsp; &nbsp; SPIINIT() &nbsp; &nbsp; &nbsp; &nbsp;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*SPI初始化*/ &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(i=8;i>0;i--) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*连续发送8个数据*/<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data=table[i]; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*通过数组的转换获得待显示的段码*/ &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SPILED(data); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*发送显示段码显示*/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; &nbsp; &nbsp; PORTA_5=1; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*最后给锁存信号,代表显示任务完成*/<p>}<p>5.3.3 &nbsp;程序清单<p>&nbsp; &nbsp; &nbsp; &nbsp; 下面给出已经在实验板上调试通过的程序,可作为用户编制其它程序的参考。有关显示部分的SPI初始化,请读者参考5.2节。<p>#include &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<pic.h><p>/*该程序用于按下相应的键时,在第一个8段LED上显示相应的1~4的字符*/<p>#define &nbsp; &nbsp; &nbsp; &nbsp; PORTAIT(adr,bit) &nbsp;((unsigned)(&adr)*8+(bit)) &nbsp; &nbsp; &nbsp; &nbsp;/*绝对寻址位操作指令*/<p>static &nbsp; &nbsp; &nbsp; &nbsp; bit &nbsp;PORTA_5 &nbsp;@ &nbsp;PORTAIT(PORTA,5); &nbsp; &nbsp; &nbsp; &nbsp;<p>#define &nbsp; &nbsp; &nbsp; &nbsp;PORTBIT(adr, bit) &nbsp; &nbsp; &nbsp; &nbsp;((unsigned)(&adr)*8+(bit)) &nbsp; &nbsp; &nbsp; &nbsp; /*绝对寻址位操作指令*/<p>static &nbsp; &nbsp; &nbsp; &nbsp; bit &nbsp;PORTB_5 &nbsp;@ &nbsp;PORTBIT(PORTB,5);<p>static &nbsp; &nbsp; &nbsp; &nbsp; bit &nbsp;PORTB_4 &nbsp;@ &nbsp;PORTBIT(PORTB,4);<p>static &nbsp; &nbsp; &nbsp; &nbsp; bit &nbsp;PORTB_1 &nbsp;@ &nbsp;PORTBIT(PORTB,1) &nbsp; &nbsp; &nbsp; &nbsp;;<p>static &nbsp; &nbsp; &nbsp; &nbsp; bit &nbsp;PORTB_2 &nbsp;@ &nbsp;PORTBIT(PORTB,2) &nbsp; &nbsp; &nbsp; &nbsp;;<p>unsigned &nbsp; &nbsp; &nbsp; &nbsp; int &nbsp; &nbsp; &nbsp; &nbsp;I;<p>unsigned &nbsp; &nbsp; &nbsp; &nbsp; char &nbsp; &nbsp; &nbsp; &nbsp;j;<p>int &nbsp;data;<p>/*spi初始化子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SPIINIT()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; PIR1=0;<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPCON=0x30; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPSTAT=0xC0;<p>&nbsp; &nbsp; &nbsp; &nbsp; TRISC=0xD7; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*SDO引脚为输出,SCK引脚为输出*/<p>}<p>/*系统各输入输出口初始化子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initial()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; TRISA=0xDF;<p>&nbsp; &nbsp; &nbsp; &nbsp; TRISB=0XF0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*设置与键盘有关的各口的数据方向*/<p>&nbsp; &nbsp; &nbsp; &nbsp; INTCON=0x00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*关闭所有中断*/<p>&nbsp; &nbsp; &nbsp; &nbsp; data=0X00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*待显示的寄存器赋初值*/<p>&nbsp; &nbsp; &nbsp; &nbsp; PORTB=0X00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*RB1 RB2 先送低电平*/<p>&nbsp; &nbsp; &nbsp; &nbsp; j=0;<p>}<p>/*软件延时子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DELAY()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; for(i = 6553; --i ;)<p>&nbsp; &nbsp; &nbsp; &nbsp; continue;<p>}<p>/*键扫描子程序*/<p>int &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;KEYSCAN()<p>{ &nbsp; &nbsp; &nbsp; &nbsp;<p>while(1)<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; if ((PORTB_5==0)||(PORTB_4==0))<p>&nbsp; &nbsp; &nbsp; &nbsp; break;<p>} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*等待有键按下*/<p>&nbsp; &nbsp; &nbsp; &nbsp; DELAY(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*软件延时*/<p>&nbsp; &nbsp; &nbsp; &nbsp; if ((PORTB_5==0)||(PORTB_4==0))<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KEYSERVE(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*如果仍有键按下,则调用键服务子程序*/<p>&nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; &nbsp; &nbsp; &nbsp;j=0x00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*如果为干扰,则令返回值为0*/<p>&nbsp; &nbsp; &nbsp; &nbsp; return(j);<p>} &nbsp; &nbsp; &nbsp; &nbsp;<p>/*键服务子程序*/<p>int &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;KEYSERVE()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; PORTB=0XFD &nbsp; &nbsp; &nbsp; &nbsp;;<p>&nbsp; &nbsp; &nbsp; &nbsp; if(PORTB_5==0) &nbsp; &nbsp; &nbsp; &nbsp;j=0X01;<p>&nbsp; &nbsp; &nbsp; &nbsp; if(PORTB_4==0) &nbsp; &nbsp; &nbsp; &nbsp;j=0X03;<p>&nbsp; &nbsp; &nbsp; &nbsp; PORTB=0XFB;<p>&nbsp; &nbsp; &nbsp; &nbsp; if(PORTB_5==0) &nbsp; &nbsp; &nbsp; &nbsp;j=0X02;<p>&nbsp; &nbsp; &nbsp; &nbsp; if(PORTB_4==0) &nbsp; &nbsp; &nbsp; &nbsp;j=0X04;/*以上根据按下的键确定相应的键值*/<p>&nbsp; &nbsp; &nbsp; &nbsp; PORTB=0X00; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*恢复PORTB的值*/<p>while(1)<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if((PORTB_5==1)&&(PORTB_4==1)) break;/*等待键盘松开*/<p>&nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; &nbsp; &nbsp; return(j);<p>}<p>/*SPI发送子程序*/<p>void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SPILED(int data)<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPBUF=data; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*启动发送*/<p>&nbsp; &nbsp; &nbsp; &nbsp; do<p>&nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;<p>&nbsp; &nbsp; &nbsp; &nbsp; }while(SSPIF==0); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*等待发送完毕<p>&nbsp; &nbsp; &nbsp; &nbsp; SSPIF=0;<p>}<p>/*主程序*/<p>main()<p>{<p>static &nbsp;int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};<p>&nbsp; &nbsp; &nbsp; &nbsp; initial();/*系统初始化*/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; SPIINIT() &nbsp; &nbsp; &nbsp; &nbsp;;/*SPI初始化*/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>while(1)<p>{ <p>刚接触pic单片机 使用的是MPLAB IDE 对于配置字的要求可以通过软件进行设置&nbsp;<br/>也可以用__CONFIG();进行设置<br/>但是发现官网上用的是MOLAB X IDE 对于配置字的格式要求<br/>变成了#pragma 当然也可以通过软件的窗口>>pic存储器视图>>配置字<br/>对配置字进行设置&nbsp;<br/>XC8对于中断的格式也有了变化 __interrupt(优先级)<br/>#pragma config FOSC = INTRC_CLKOUT// Oscillator Selection bits (INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)<br/>#pragma config WDTE = OFF&nbsp; &nbsp;&nbsp; &nbsp; // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)<br/>#pragma config PWRTE = OFF&nbsp; &nbsp;&nbsp; &nbsp;// Power-up Timer Enable bit (PWRT disabled)<br/>#pragma config MCLRE = ON&nbsp; &nbsp;&nbsp; &nbsp; // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)<br/>#pragma config CP = OFF&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// Code Protection bit (Program memory code protection is disabled)<br/>#pragma config CPD = OFF&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// Data Code Protection bit (Data memory code protection is disabled)<br/>#pragma config BOREN = ON&nbsp; &nbsp;&nbsp; &nbsp; // Brown Out Reset Selection bits (BOR enabled)<br/>#pragma config IESO = OFF&nbsp; &nbsp;&nbsp; &nbsp; // Internal External Switchover bit (Internal/External Switchover mode is disabled)<br/>#pragma config FCMEN = OFF&nbsp; &nbsp;&nbsp; &nbsp;// Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)<br/>#pragma config LVP = OFF&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)<br/><br/>// CONFIG2<br/>#pragma config BOR4V = BOR40V&nbsp; &nbsp;// Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)<br/>#pragma config WRT = OFF&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// Flash Program Memory Self Write Enable bits (Write protection off)<br/><br/>// #pragma config statements should precede project file includes.<br/>// Use project enums instead of #define for ON and OFF. <p>//=======================================用户配置区,供用户修改===========================================<p><br/><p>#define TIME2 &nbsp;1000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//长按键时间设置,单位ms ,1000 = 1s &nbsp;范围:1~10s<p><br/><p>//=========================================================================================================<p><br/><p><br/><p><br/><p><br/><p><br/><p><br/><p><br/><p><br/><p><br/><p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p>// &nbsp;以下为代码区,请勿改动! &nbsp;*<p><br/><p>//=============================================硬件连接示意===============================================<p>//<p>// &nbsp; &nbsp;___短 _ &nbsp; &nbsp; &nbsp;长 &nbsp; _______&nbsp;<p>// &nbsp; &nbsp; &nbsp; |_| |_________| &nbsp; &nbsp;PIC10F200/202<p>// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+---------+<p>// &nbsp; &nbsp; &nbsp; &nbsp; KEY 长/短按键 ---|GP0 &nbsp; GP3|---<p>// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; |<p>// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|GND &nbsp; VDD|<p>// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;__ &nbsp; &nbsp; &nbsp;___&nbsp;<p>// &nbsp; &nbsp; &nbsp; &nbsp;长按键翻转输出 ---|GP1 &nbsp; GP2|---短按键翻转输出 _| &nbsp;|____| &nbsp; |____<p>// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+---------+<p>// &nbsp; &nbsp; &nbsp;__________ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _____________&nbsp;<p>// &nbsp; &nbsp;_| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|___________| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |____<p>//<p>//--------------------------------------------------------------------------------------------------------<p>/*<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;长/短按键IO口电平翻转程序<p><br/><p><br/><p>&nbsp; 说明:1.该程序通过检测GP0管脚的有效按键长短,循环翻转GP2和GP1管脚的输出电平高低。<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 每检测到一个短按键,则对GP2管脚输出电平进行一次翻转,每检测到一个长按键,<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 则对GP1管脚输出电平进行一次翻转。&nbsp;<p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp; 2.按键是带有状态机的键盘扫描程序,可有效对按键消抖,抗干扰能力极强。<p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp; 3.长按键的时间可通过程序顶端的参数进行方便的设置,以满足现场需求。<p>&nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; 4.GP1、GP2在单片机默认状态和复位后输出电平为低。<p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp; 5.待机功耗为400uA(@5V),长按键功耗为500uA(@5V)。<p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp; 6.已启用内部弱上拉,按键可以不加上拉电阻,如果要保证信号可靠,可以加上拉电阻,<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 建议选择>=100K的电阻,以降低长时间按下按键在电阻上的功耗。<p><br/><p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp;日期:2014/09/04 &nbsp; &nbsp; &nbsp; &nbsp;版本:V2.0<p>&nbsp;&nbsp;<p>*/<p><br/><p>//=========================================================================================================<p><br/><p><br/><p><br/><p>#include <pic.h> &nbsp; &nbsp; &nbsp;//本代码可支持单片机型号:PIC10F200/202<p><br/><p>#define Key_Read_T 25 //等间隔读取键值,单位ms<p><br/><p>#define KEY_IO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GP0 &nbsp; &nbsp; &nbsp; &nbsp; //按键信号输入<p>#define Short_Out &nbsp; &nbsp; &nbsp; &nbsp; GP1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//短按按键响应数出口<p><br/><p>bit short_out; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//记录Short_Out当前状态<p>bit short_IF; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//短按响应标志<p><br/><p>#define Long_Out &nbsp; &nbsp; &nbsp; &nbsp; GP2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//长按按键响应数出口<p><br/><p>bit long_out; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//记录Long_Out当前状态<p>bit long_IF; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//长按响应标志<p><br/><p>unsigned char KEY_State=0; &nbsp; &nbsp; &nbsp; &nbsp;/*按键的状态变量*/<p><br/><p><br/><p>#define NOKEY &nbsp; &nbsp; 0<p>#define PUSH_KEY &nbsp;1<p>#define LONG_PUSH 2<p><br/><p>#define INITIAL_25MS 161 &nbsp; &nbsp; &nbsp; &nbsp; //相对于本系统与定时器时钟,本数据为固定值。定时器增计数,计数周期为256us,计97个数约为25mS。256-97+2=161<p><br/><p>/<p>* 名 &nbsp; &nbsp;称:Key_ScanIO()<p>* 功 &nbsp; &nbsp;能:扫描键盘IO口并判断按键事件<p>* 入口参数:Ticklong:长按键有效时长,单位ms<p>* 出口参数:无<p>* 说 &nbsp; &nbsp;明: 该函数需要每隔25(Key_Read_T)ms,调用一次。最好放在定时中断内执行。<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如果中断间隔太长,可能丢键;间隔太短不能消除抖动。<p>/<p>void Key_ScanIO(int Ticklong)<p>{&nbsp;<p>&nbsp; static unsigned int KeyTimerS;<p>&nbsp;&nbsp;<p>//===============================按键======================================== &nbsp; &nbsp;<p>&nbsp; if(KEY_State==PUSH_KEY) &nbsp;KeyTimerS++; &nbsp; &nbsp;/*定时器,时间间隔25ms*/<p>&nbsp; else &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KeyTimerS=0;<p>&nbsp;&nbsp;<p>&nbsp; switch(KEY_State) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//根据按键的状态决定程序分支<p>&nbsp; {<p>&nbsp; &nbsp; &nbsp;case NOKEY: &nbsp; &nbsp; &nbsp; &nbsp; //------------------在未按键状态下--------------------------<p>&nbsp; &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//若键被按下,按键状态变为"短按状态"。<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(KEY_IO==0) KEY_State=PUSH_KEY;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<p>&nbsp; &nbsp; &nbsp; &nbsp;}<p>&nbsp; &nbsp; &nbsp;case PUSH_KEY: &nbsp; &nbsp; &nbsp; &nbsp;//-------------按键处于"短按状态"时------------------------<p>&nbsp; &nbsp; &nbsp; &nbsp;{<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(KEY_IO!=0) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//若键被释放,认为是一次短按键<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KEY_State=NOKEY; &nbsp; &nbsp; &nbsp; //并回到"未按下状态"&nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; short_IF &nbsp;= 0;&nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; long_IF &nbsp;= 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if(KeyTimerS>Ticklong) //若按键时间超过Ticks毫秒,认为是一次长按键,<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KEY_State=LONG_PUSH; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 按键状态变为"长按状态" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp;}<p>&nbsp; &nbsp; &nbsp;case LONG_PUSH: //------------按键处于"长按状态"时--------------------<p>&nbsp; &nbsp; &nbsp; &nbsp;{<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(KEY_IO!=0) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//若键被释放,回到未按键状态<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KEY_State=NOKEY;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; short_IF &nbsp;= 0;&nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; long_IF &nbsp;= 0;&nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp;&nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp;}<p>&nbsp; } &nbsp; &nbsp;<p>}<p><br/><p>/<p>* 名 &nbsp; &nbsp;称:Key_Answer()<p>* 功 &nbsp; &nbsp;能:根据按键状态作出响应,控制IO管脚输出电平翻转<p>* 入口参数:Ticklong:长按键有效时长,单位ms<p>* 出口参数:无<p>/<p>void Key_Answer(void)<p>{<p>&nbsp; if((KEY_State==PUSH_KEY)&&(short_IF == 0)) &nbsp;<p>&nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; short_out = ~short_out;<p>&nbsp; &nbsp; Short_Out = &nbsp;short_out;<p>&nbsp; &nbsp; &nbsp; &nbsp; short_IF &nbsp;= 1; &nbsp; &nbsp; &nbsp; &nbsp;<p>&nbsp; }<p>&nbsp; if((KEY_State==LONG_PUSH)&&(long_IF == 0))&nbsp;<p>&nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; long_out = ~long_out;<p>&nbsp; &nbsp; &nbsp; &nbsp; Long_Out = &nbsp;long_out;<p>&nbsp; &nbsp; &nbsp; &nbsp; long_IF &nbsp;= &nbsp; &nbsp; &nbsp; &nbsp;1;<p>&nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<p>}<p><br/><p>/<p>名 &nbsp; &nbsp;称:main()<p>功 &nbsp; &nbsp;能:主程序<p>入口参数:无<p>出口参数:无<p>*/<p>void main()<p>{<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<p>&nbsp; &nbsp; &nbsp;//设置时钟周期Fosc = 4MHz,系统时钟,无法设置<p>&nbsp; &nbsp; &nbsp; &nbsp; OPTION = 0x97; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//复位值0xFF。TIMER0的时钟源是Fosc/4,1us。TIMER0 256预分频,256us<p>// &nbsp; &nbsp; &nbsp; &nbsp;CMCON0 = 0xE1;<p><br/><p>&nbsp; &nbsp; TRISGPIO = 0x09; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//GP1、GP2配置为输出。0为输出,1为输入<p>&nbsp; &nbsp; &nbsp; &nbsp; short_out = 0;<p>&nbsp; &nbsp; Short_Out = short_out;<p>&nbsp; &nbsp; &nbsp; &nbsp; long_out = 0; &nbsp; &nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; Long_Out = long_out; &nbsp; &nbsp;//为输出赋初值 &nbsp; &nbsp; &nbsp; &nbsp;<p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp; TMR0 = INITIAL_25MS; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//增计数,计数周期为256us,计97个数约为25mS。256-125+2=97&nbsp;<p><br/><p>&nbsp; &nbsp; &nbsp; &nbsp; while(1)<p>&nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #asm<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CLRWDT &nbsp; &nbsp;&nbsp;<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #endasm &nbsp; &nbsp; &nbsp; &nbsp; <p>程序代码:<p><br/><p>#include<pic.h><p>#define uchar unsigned char<p>#define uint &nbsp;unsigned int<p>__CONFIG(HS&WDTDIS);<p>#include "Drive_Serial.h"<p>uchar &nbsp; line1_data[] = {"顶顶电子欢迎您!"};<p>uchar &nbsp; line2_data[] = {" &nbsp;www*ddmcu*com &nbsp; "};<p>uchar &nbsp; line3_data[] = {"DD-900实验开发板"};<p>uchar &nbsp; line4_data[] = {"TEL:  &nbsp;"};<p>/端口设置函数/<p>void port_init(void)<p>{<p>&nbsp; &nbsp; TRISC = 0x00;<p>&nbsp; &nbsp; TRISD = 0x00; &nbsp; &nbsp; &nbsp;&nbsp;<p>}&nbsp;<p>/以下是闪烁三次函数/<p>void lcd_flash()<p>{<p>&nbsp; &nbsp; Delay_ms(1000); &nbsp; &nbsp; &nbsp; &nbsp; //控制停留时间&nbsp;<p>&nbsp; lcd_wcmd(0x08); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //关闭显示 &nbsp;<p>&nbsp; Delay_ms(500); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//延时0.5s &nbsp;<p>&nbsp; lcd_wcmd(0x0c); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //开显示 &nbsp; &nbsp;<p>&nbsp; Delay_ms(500); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//延时0.5s<p>&nbsp; lcd_wcmd(0x08); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //关闭显示 &nbsp;<p>&nbsp; Delay_ms(500); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//延时0.5s&nbsp;<p>&nbsp; lcd_wcmd(0x0c); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //开显示 &nbsp; &nbsp;<p>&nbsp; Delay_ms(500); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//延时0.5s<p>&nbsp; &nbsp; lcd_wcmd(0x08); &nbsp; &nbsp; &nbsp; &nbsp; //关闭显示 &nbsp;<p>&nbsp; Delay_ms(500); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//延时0.5s&nbsp;<p>&nbsp; lcd_wcmd(0x0c); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //开显示 &nbsp; &nbsp;<p>&nbsp; Delay_ms(500); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//延时0.5s<p>} &nbsp;<p>/以下是主函数/<p>void &nbsp;main()<p>{<p>&nbsp; &nbsp; uchar i;<p>&nbsp; port_init();<p>&nbsp; Delay_ms(100); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//上电,等待稳定 &nbsp;<p>&nbsp; lcd_init(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //初始化LCD<p>&nbsp; &nbsp; while(1)<p>&nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; LocateXY(0,0); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//设置显示位置为第0行,0列<p>&nbsp; &nbsp; for(i=0;i<16;i++)<p>&nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; lcd_wdat(line1_data[i]);<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delay_ms(100); &nbsp; &nbsp; &nbsp;//每个字符停留的时间为100ms<p>&nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; &nbsp; &nbsp; LocateXY(0,1); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//设置显示位置为第1行第0列<p>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i<16;i++)<p>&nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lcd_wdat(line2_data[i]);<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delay_ms(100);<p>&nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; &nbsp; &nbsp; LocateXY(0,2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//设置显示位置为第2行第0列<p>&nbsp; &nbsp; &nbsp; &nbsp; for(i=0;i<16;i++)<p>&nbsp; &nbsp; &nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lcd_wdat(line3_data[i]);<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delay_ms(100);<p>&nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; LocateXY(0,3); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//设置显示位置为第3行第0列<p>&nbsp; &nbsp; for(i=0;i<16;i++)<p>&nbsp; &nbsp; {<p>&nbsp; &nbsp; &nbsp; &nbsp; lcd_wdat(line4_data[i]);<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delay_ms(100);<p>&nbsp; &nbsp; &nbsp; &nbsp; }<p>&nbsp; &nbsp; &nbsp; &nbsp; Delay_ms(1000); &nbsp; &nbsp; &nbsp; &nbsp; //停留1s<p>&nbsp; &nbsp; &nbsp; &nbsp; lcd_flash(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//闪烁三次<p>&nbsp; &nbsp; &nbsp; &nbsp; lcd_clr(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//清屏<p>&nbsp; &nbsp; &nbsp; &nbsp; Delay_ms(2000);&nbsp;<p>&nbsp; &nbsp; }<p>}<p><br/> 

讯享网
小讯
上一篇 2025-05-21 16:28
下一篇 2025-06-17 09:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/203180.html