基于51单片机的源代码

合集下载

51单片机上网 RTL8019AS 寄存器配置C源代码

51单片机上网 RTL8019AS 寄存器配置C源代码

#include <reg54.h>#include <absacc.h>#include "uip.h"sbit RESET=P4^0;typedef unsigned char uchar;typedef unsigned int uint;#define TX_PAGES 6#define NE_START_PG 0x40 //发送寄存器的首页地址#define TX_START_PG NE_START_PG#define NE_STOP_PG 0x60 //接收寄存器环的末地址+1#define RX_STOP_PG NE_STOP_PG //#define RX_START_PG NE_START_PG + TX_PAGES#define RX_CURR_PG RX_START_PG + 1//下面定义的是RTL8019AS特殊寄存器#define BASE_ADDRESS 0x8000#define CR XBYTE [BASE_ADDRESS+0x0000] //设置CR寄存器地址#define DMA_PORT XBYTE [BASE_ADDRESS+0x1000] //设置远程DMA端口#define RESET_PORT XBYTE [BASE_ADDRESS+0x1800] //设置复位端口//---------定义PAGE0-------------//定义PAGE0中的只读寄存器#define PG0_CLDA0 XBYTE [BASE_ADDRESS+0x0100]#define PG0_CLDA1 XBYTE [BASE_ADDRESS+0x0200]#define PG0_BNRY XBYTE [BASE_ADDRESS+0x0300]#define PG0_TSR XBYTE [BASE_ADDRESS+0x0400]#define PG0_NCR XBYTE [BASE_ADDRESS+0x0500]#define PG0_FIFO XBYTE [BASE_ADDRESS+0x0600]#define PG0_ISR XBYTE [BASE_ADDRESS+0x0700]#define PG0_CRDA0 XBYTE [BASE_ADDRESS+0x0800]#define PG0_CRDA1 XBYTE [BASE_ADDRESS+0x0900]#define PG0_8019D0 XBYTE [BASE_ADDRESS+0x0A00]#define PG0_8019D1 XBYTE [BASE_ADDRESS+0x0B00]#define PG0_RSR XBYTE [BASE_ADDRESS+0x0C00]#define PG0_CNTR0 XBYTE [BASE_ADDRESS+0x0D00]#define PG0_CNTR1 XBYTE [BASE_ADDRESS+0x0E00]#define PG0_CNTR2 XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE0中的只写寄存器#define PG0_PSTART XBYTE [BASE_ADDRESS+0x0100]#define PG0_PSTOP XBYTE [BASE_ADDRESS+0x0200]#define PG0_BNRY XBYTE [BASE_ADDRESS+0x0300]#define PG0_TPSR XBYTE [BASE_ADDRESS+0x0400]#define PG0_TBCR0 XBYTE [BASE_ADDRESS+0x0500]#define PG0_TBCR1 XBYTE [BASE_ADDRESS+0x0600]#define PG0_ISR XBYTE [BASE_ADDRESS+0x0700]#define PG0_RSAR0 XBYTE [BASE_ADDRESS+0x0800]#define PG0_RSAR1 XBYTE [BASE_ADDRESS+0x0900]#define PG0_RBCR0 XBYTE [BASE_ADDRESS+0x0A00]#define PG0_RBCR1 XBYTE [BASE_ADDRESS+0x0B00]#define PG0_RCR XBYTE [BASE_ADDRESS+0x0C00]#define PG0_TCR XBYTE [BASE_ADDRESS+0x0D00]#define PG0_DCR XBYTE [BASE_ADDRESS+0x0E00]#define PG0_IMR XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE1 读写寄存器#define PG1_PAR0 XBYTE [BASE_ADDRESS+0x0100]#define PG1_PAR1 XBYTE [BASE_ADDRESS+0x0200]#define PG1_PAR2 XBYTE [BASE_ADDRESS+0x0300]#define PG1_PAR3 XBYTE [BASE_ADDRESS+0x0400]#define PG1_PAR4 XBYTE [BASE_ADDRESS+0x0500]#define PG1_PAR5 XBYTE [BASE_ADDRESS+0x0600]#define PG1_CURR XBYTE [BASE_ADDRESS+0x0700]#define PG1_MAR0 XBYTE [BASE_ADDRESS+0x0800]#define PG1_MAR1 XBYTE [BASE_ADDRESS+0x0900]#define PG1_MAR2 XBYTE [BASE_ADDRESS+0x0A00]#define PG1_MAR3 XBYTE [BASE_ADDRESS+0x0B00]#define PG1_MAR4 XBYTE [BASE_ADDRESS+0x0C00]#define PG1_MAR5 XBYTE [BASE_ADDRESS+0x0D00]#define PG1_MAR6 XBYTE [BASE_ADDRESS+0x0E00]#define PG1_MAR7 XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE2 只读寄存器#define PG2_PSTART XBYTE [BASE_ADDRESS+0x0100]#define PG2_PSTOP XBYTE [BASE_ADDRESS+0x0200]#define PG2_TPSR XBYTE [BASE_ADDRESS+0x0400]#define PG2_RCR XBYTE [BASE_ADDRESS+0x0C00]#define PG2_TCR XBYTE [BASE_ADDRESS+0x0D00]#define PG2_DCR XBYTE [BASE_ADDRESS+0x0E00]#define PG2_IMR XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE3 寄存器#define PG3_9346CR XBYTE [BASE_ADDRESS+0x0100] #define PG3_CONFIG0 XBYTE [BASE_ADDRESS+0x0300] #define PG3_CONFIG1 XBYTE [BASE_ADDRESS+0x0400] #define PG3_CONFIG2 XBYTE [BASE_ADDRESS+0x0500] #define PG3_CONFIG3 XBYTE [BASE_ADDRESS+0x0600] #define PG3_CONFIG4 XBYTE [BASE_ADDRESS+0x0D00]//以下是特殊寄存器的位定义// CR寄存器#define stop_cmd 0x01 //停止接受或发送数据#define start_cmd 0x02 //启动接受或发送数据#define txp 0x04 //发送数据#define no_dma 0x00 //禁止DMA#define read_dma 0x08 //允许远程DMA读#define write_dma 0x10 //允许远程DMA写#define send_pck 0x18 //发送数据#define abort_dma 0x20 //退出/完成远程DMA#define page0 0x00 //PAGE0选择#define page1 0x40 //PAGE1选择#define page2 0x80 //PAGE2选择#define page3 0xc0 //PAGE3选择// ISR中断状态寄存器#define isr_prx 0x01 //无错误接受数据包#define isr_ptx 0x02 //无错误发送数据包#define rxe 0x04 //接受数据包带有如下错误:CRC错误、包丢失错误以及帧队列错误#define txe 0x08 //过分冲突导致传输错误#define ovw 0x10 //接受缓冲器溢出#define cnt 0x20 //当一个或多个网络计数器的MSB 设置完成时该位被设置。

51单片机操作系统的实现+源代码

51单片机操作系统的实现+源代码

51单片机操作系统开发中的问题与技巧附代码引言51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,在我国的应用非常广泛。

目前,在软件设计中需要软件工程师从底层做起,在系统软件设计方面需要做大量的重复性劳动。

如果开发一套基于51系列单片机的操作系统,那么用户只需要编写各个任务的程序,不必同时将所有任务运行的各种情况记在心中,不但大大减少了程序编写的工作量,而且减少了出错的可能性。

1 开发平台的选择和论证开发平台的选择至关重要,因为有时它不光影响进度、产品质量、可维护性等一般问题,还涉及到方案的可实现性。

在本系统中,选择51系列单片机作为操作系统的运行平台有以下原因。

首先,51系列单片机应用非常广泛,一大批性能优越的51兼容单片机相继推出。

这里包括:低功耗、高速度和增强型的Philips公司的系列产品;完美地将Flash(非易失闪存技术)EEPROM与80C51内核结合起来的Atmel公司的系列产品;在抗干扰性能,电磁兼容和通信控制总线功能上独树一帜,其产品常用于工作环境恶劣场合的Siemens公司的系列产品以及一些其它公司的产品。

既然产品如此丰富,性能如此优越,那么在处理多任务并且对实时性要求严格的系统设计中,为了充分挖掘单片机的潜能(尤其是在实时性方面),也是为了简化开发的过程,基于51系列单片机的实时操作系统的需求就十分强烈了。

Keil公司的RTX51 Full就是一个基于51系列单片机的有实用价值的实时操作系统,但该操作系统是一个源码不公开的收费软件。

其次,借助于Keil C51的集成开发环境,完全可以开发出适用于51系列单片机的操作系统代码。

Keil C51软件提供丰富的库函数和功能强大的Windows界面集成开发调试工具。

另外重要的一点,Keil C51生成的目标代码效率非常高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时,更能体现高级语言的优势。

C编译器能产生可重入代码,而且用C语言可以打开和关闭中断。

51单片机读写AT24C02源代码详细注释

51单片机读写AT24C02源代码详细注释

51单片机读写AT24C02源代码(详细注释)在P1口上接八个led灯,结果就显示在这八个灯上面。

AT24C02的接线方式见程序的顶部的定义。

以下是源代码:#include ;//包含头文件typedef unsigned char uchar;typedef unsigned int uint;#define write_c02 0xa0#define read_c02 0xa1sbit sda = P2^0;sbit scl = P2^1;void delay(){ //delay:5us;;}//i2c:initvoid i2c_init(){sda = 1;delay();scl = 1;delay();}//delayms:void delayms(uint xms){uchar x, y;for(x = xms; x >; 0; x--)for(y = 110; y >; 0; y--);}//start:void start() //启动i2c{sda = 1;scl = 1;delay();//延时必须大于4.7us,此约为五微秒sda = 0; //在scl为高电平时,sda一个下降沿为启动信号delay();}//stop:void stop() //停止i2c{sda = 0;scl = 1;delay();sda = 1; //在scl为高电平时,sdasda一个上升沿为停止信号delay();}//ack:void ack() //应答信号0{uchar i = 0; //等待变量scl = 1;//在scl为高电平期间等待应答delay();while((sda == 1) && i < 250)//若为应答0即退出,从机向主机发送应答信号i++;//等待一段时间scl = 0; //应答之后将scl拉低delay();}//nack:void nack() //非应答{scl = 1;//在scl为高电平期间,由主机向从机发送一个1,非应答信号delay();sda = 1;scl = 0; //应答之后将scl拉低delay();}//send byte:void send_byte(uchar date)//写一个字节{uchar i, temp;temp = date; //存入要写入的数据,即要发送到sda上的数据for(i = 0; i < 8; i++){ //发送8位temp <<= 1; //to CY 将数据的最高位移入到PSW中的CY位中scl = 0;//只有在scl为低电平时,才允许sda上的数据变化delay();sda = CY; //将CY里的数据发送到sda数据线上delay(); //可以延时scl = 1; //在scl为高电平时,不允许sda上的数据变化,使数据稳定delay();scl = 0;//允许sda数据线的数据变化,等待下一个数据的传输delay();}//wait ack:发送完一个字节数据后要主机要等待从机的应答,第九位scl = 0;//允许sda变化delay();sda = 1;//wait:ack,sda拉高等待应答,当sda=0时,表示从机的应答delay();}//read: byteuchar read_byte() //读一个字节数据{uchar i, j, k;scl = 0; //读之前先允许sda变化delay(); //等待数据for(i = 0; i < 8; i++){scl = 1; //不允许sda变化delay(); //使sda数据稳定后开始读数据j = sda; //读出sda上的数据k = (k << 1)| j; //将数据通过|运算存入k中scl = 0;//允许sda变化等待下一位数据的到来delay();}//delay();//可不用延时return k;//返回读出的数据}//write:at24c02 在at24c02中的指定地址写入数据void write_at24c02(uchar address, uchar date) {start(); //启动i2csend_byte(write_c02);//写入期间地址和写操作ack(); //从机应答0send_byte(address); //写入写数据的单元地址ack(); //ack0send_byte(date); //在指定地址中写入数据ack(); //从机应答0stop();//停止i2c}//read: at24c02在at24c02的指定地址中读出写入的数据uchar read_at24c02(address){uchar dat;//用来存储读出的数据start(); //启动i2csend_byte(write_c02); //写入at24c02器件地址和写操作ack(); //从机应答0send_byte(address); //写入要读取AT24C02的数据的单元地址ack(); //从机应答0start(); //再次启动i2csend_byte(read_c02); //写入AT24C02器件地址和读操作ack();//从机应答&lsquo;0&rsquo;dat = read_byte();//读出指定地址中的数据nack(); //主机发出非应答&lsquo;1&rsquo;stop(); //停止i2creturn dat;//返回读出的数据}//main:void main(){uchar i;i2c_init();start();while(1){for(i = 0x00; i < 0xff; i++){write_at24c02(10, i);delayms(10);//需等待十毫秒P1 = read_at24c02(10);//1010 1010 delayms(2000);}}}。

基于51单片机的CAN通讯源代码

基于51单片机的CAN通讯源代码
BCAN_CMD_PRG(0x0c); //清数据溢出状态位,释放接收缓冲区
EA=1;
}
/////////////////////////////////////////////////////////////
void can_rcv_prg(void)
{can_over_prg();}
if(_testbit_(rcv_flag)) //can总线接收数据
{can_rcv_prg();}
if(_testbit_(send_flag)) //can总线发送数据
*说明: CAN控制器进入复位工作模式 *
************************************************************************/
bit BCAN_ENTER_RETMODEL(void)
for(j=2;j<10;j++) //发送8组数据到串口
{
SBUF=rcv_data[j];
while(TI==0)
{}
TI=0;
}
ES=1; //串口中断开放
void T1_int(void);
void Sja_1000_Init(void);
//************************变量定义*****************************//
unsigned char data send_data[10],rcv_data[10]; //发送和接收数组定义
/*RS232_basiccan.c*/
#include<REG52.H>
#include <intrins.h>

基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于51单片机的四驱无线遥控小车(附电路图,源代码)遥控小车大家都玩过,网上也有各种DIY小车的制作详解,本文介绍的这个遥控小车和其他的作品大同小异,但作为单片机设计,这次设计主要强调单片机控制,就是说,这个小车是由单片机控制的,把单片机按键发送程序、无线模块使用、电机驱动是本教程的核心内容。

一硬件组装1 小车运动部分所需工件:直流电机4个,L293D电机驱动模块,蓄电池一块,车身底盘说明:车身底盘大家根据自己的购买力自行购买,蓄电池也是,至于L293D模块,淘宝上卖的比较贵,不过我用的就是成品模块,效果非常好,钱不多的同学可以自己买芯片,自制模块,原理很简单,官方资料是很详细的;或者改为继电器控制都可以,具体看自己的实际购买力。

用模块的好处是,模块可以输出5V 电源给系统供电,详细请参考淘宝网。

如果你买的是现成的底盘,那就和我的一样了,组装实在是没啥可说的,把电机固定上去就是,不行?别开玩笑了,小学生都会的!至于想自己做底盘的,我想说,要搞结实点,咱这次的小车马力是很足的,因为有电机驱动,速度比较快(不带减速齿轮的底盘一定要小心,速度非常的快),后劲也足,不小心撞墙很正常,所以不好的底盘就得小心了!组装好后,就是电机和驱动模块的接线了,下面我就详细的说一下L293D模块的使用:L293D是专门的电机驱动芯片,工作电压5V,驱动电压输入可达36V,输出电流正负600ma,4个控制端,4个输出端,原理如图:其中A为输出控制端,Y为输出控制端,1A即控制1Y,以此类推。

1,2EN 3,4EN需要短接,芯片最大工作电压不得超过7V。

封装图:Vcc1接工作电压,5V,Vcc2接电机的驱动电源,一般来说,这个电压要比5V 高,我用的是12V蓄电池,就把12v的正极接到VCC2,要记住的是,芯片、单片机、蓄电池电源是需要共地的,不要觉得你电机是12V,单片机控制部分是5V就把电源完全独立开来,正极是完全独立的没错,但是GND(负极)都必须是接在一起的。

基于51单片机俄罗斯方块代码

基于51单片机俄罗斯方块代码

基于51单片机的俄罗斯方块游戏代码实现主要包括以下几个方面:
1. 数据结构:使用数据结构来表示游戏中的各种元素,如方块、矩阵等。

2. 导航键控制:通过键盘扫描代码,获取用户输入的导航键(上下左右)信息,以便控制方块的移动。

3. 方块生成:随机生成新的方块,或者根据游戏规则生成特定的方块。

4. 方块移动:根据用户输入的导航键信息,移动当前方块的位置。

5. 方块旋转:根据用户输入的导航键信息,旋转当前方块的角度。

6. 碰撞检测:检测方块与游戏区域边界、其他方块之间的碰撞,以及方块自身的碰撞。

7. 游戏规则:实现游戏的基本规则,如方块消除、得分、游戏结束等。

8. 用户界面:显示游戏界面,包括方块、游戏区域边界、得分等信息。

9. 延时与中断:通过延时函数和中断函数,实现游戏的实时性,如方块自动下落、响应用户输入等。

10. 代码优化:对代码进行优化,提高游戏运行效率和用户体验。

总之,基于51单片机的俄罗斯方块游戏代码实现涉及到数据结构、键盘扫描、方块生成与移动、碰撞检测、游戏规则、用户界面、延时与中断等多个方面。

51单片机8X8点阵滚动显示 - C51源代码

51单片机8X8点阵滚动显示 - C51源代码

51单片机8X8点阵滚动显示- C51源代码51单片机8X8点阵滚动显示- C51源代码/*--------------------------------------------------------------*///LED8*8滚动显示//列扫描,低电平有效/*--------------------------------------------------------------*///包含头文件#include <reg52.h>#include "74HC595.H"/*--------------------------------------------------------------*///全局变量定义unsigned char i;unsigned int m,n;/*--------------------------------------------------------------*///代码库#define num sizeof(table) //代码长度unsigned char codeaa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code table[]= {//取模方式阴码列扫描逆向0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/0x00,0x7F,0x7F,0x39,0x6F,0x46,0x00,0x00,/*"R",1 */0x00,0x41,0x7F,0x7F,0x41,0x00,0x00,0x00,/*"I",2 */0x00,0x3E,0x7F,0x41,0x63,0x22,0x00,0x00,/*"C",3 */0x00,0x7F,0x7F,0x08,0x7F,0x7F,0x00,0x00,/*"H",4 */0x00,0x7F,0x7F,0x06,0x7F,0x7F,0x00,0x00,/*"M",5 */0x00,0x3E,0x7F,0x41,0x63,0x22,0x00,0x00,/*"C",6 */0x00,0x3F,0x7F,0x40,0x7F,0x3F,0x00,0x00,/*"U",7 */0x00,0x36,0x7F,0x49,0x7F,0x36,0x00,0x00,/*"8",9 */0x00,0x63,0x7F,0x1C,0x7F,0x63,0x00,0x00,/*"X",1 0*/1*/0x00,0x01,0x7F,0x7F,0x01,0x01,0x00,0x00,/*"T",1 3*/0x00,0x7F,0x7F,0x49,0x49,0x41,0x00,0x00,/*"E",1 4*/0x00,0x26,0x6F,0x49,0x7B,0x32,0x00,0x00,/*"S",1 5*/0x00,0x01,0x7F,0x7F,0x01,0x01,0x00,0x00,/*"T",1 6*/0x00,0x7F,0x7F,0x39,0x6F,0x46,0x00,0x00,/*"R",1 8*/0x00,0x61,0x79,0x5D,0x4F,0x43,0x00,0x00,/*"Z",1 9*/0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,/*"-",2 0*/0x00,0x62,0x73,0x59,0x4F,0x46,0x00,0x00,/*"2",2 1*/0x00,0x3E,0x7F,0x41,0x7F,0x3E,0x00,0x00,/*"0",2 2*/0x00,0x3E,0x7F,0x41,0x7F,0x3E,0x00,0x00,/*"0",2 3*/4*/0x00,0x7F,0x7F,0x41,0x7F,0x3E,0x00,0x00,/*"D",2 6*/0x00,0x7F,0x7F,0x49,0x49,0x41,0x00,0x00,/*"E",2 7*/0x00,0x7F,0x7F,0x06,0x7F,0x7F,0x00,0x00,/*"M",2 8*/0x00,0x7F,0x7F,0x41,0x7F,0x7F,0x00,0x00,/*"O",2 9*/0x00,0x26,0x6F,0x49,0x7B,0x32,0x00,0x00,/*"S",3 1*/0x03,0x07,0x7C,0x7C,0x07,0x03,0x00,0x00,/*"Y",3 2*/0x00,0x26,0x6F,0x49,0x7B,0x32,0x00,0x00,/*"S",3 3*/0x00,0x01,0x7F,0x7F,0x01,0x01,0x00,0x00,/*"T",3 4*/0x00,0x7F,0x7F,0x49,0x49,0x41,0x00,0x00,/*"E",3 5*/0x00,0x7F,0x7F,0x06,0x7F,0x7F,0x00,0x00,/*"M",3 6*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",37*/};/*--------------------------------------------------------------*///显示函数void Display(void){Ser_IN((aa[i])); //列扫描数据Ser_IN(table[i + n]); //查表取出行扫描数据Par_OUT(); //输出显示i++; if(i == 8) i = 0; //循环扫描m++; if(m == 500) {m = 0; n++;} //滚动速度控制if(n == num-7) n = 0; //循环显示}/*--------------------------------------------------------------*///定时器初始化void T0_init(void){TMOD = 0xf8;TH0 = 0xcc; //5000usTL0 = 0x00;IE = 0x82;TR0 = 1;}/*--------------------------------------------------------------*///定时器中断服务void T0_intservice(void) interrupt 1 using 0 {TH0 = 0xf8;TL0 = 0xcc;Display();}/*--------------------------------------------------------------*///主函数void main (void){T0_init();while(1);}74HC595.H//Note: 74HC595驱动// __ __//Note: MR 主复位接电源正极, OE 使能端,输出有效接电源负极/*--------------------------------------------* /#ifndef __74HC595_H__#define __74HC595_H__/*--------------------------------------------* /sbit SD = P1^4; //串行数据输入sbit ST_CK = P1^5; //存储寄存器时钟输入sbit SH_CK = P1^6; //移位寄存器时钟输入/*--------------------------------------------*///数码管断码和位码的定义//unsigned char codeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0x ff};//0 1 2 3 4 5 6 7 8 9 a b c d e f 8 无//unsigned char codepos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//1 2 3 4 5 6 7 8/*--------------------------------------------* ///函数声明void Ser_IN(unsigned char Data); //串行数据输入void Par_OUT(void); //串行数据输出//void Ser_Par(unsigned char Data); //串行输入,并行输出/*--------------------------------------------* ///串行数据输入void Ser_IN(unsigned char Data)unsigned char i;for(i = 0; i < 8; i++){SH_CK = 0; //CLOCK_MAX=100MHzSD = Data & 0x80;Data <<= 1;SH_CK = 1;}}/*--------------------------------------------* ///并行数据输出void Par_OUT(void){ST_CK = 0;ST_CK = 1;}/*--------------------------------------------* ///串行输入,并行输出/*void Ser_Par(unsigned char Data){Ser_IN(Data);Par_OUT();}*//*--------------------------------------------* /#endif网站统计Powered by Tiki Wiki CMS Groupware | Theme: Fivealive - Lemon。

51单片机C语言程序设计源代码

51单片机C语言程序设计源代码

新概念51单片机C语言教程----入门、提高、开发、拓展全攻略郭天祥编著电子工业出版社例2.2.1编写程序,点亮第一个发光二极管(part2_1.c P27)#include <reg52.h> //52系列单片机头文件sbit led1=P1^0; //声明单片机P1口的第一位void main() //主函数{led1=0; /*点亮第一个发光二极管*/}例2.2.2编写程序,点亮P1口的若干二极管(part2_2.c P39)#include <reg52.h> //52系列单片机头文件void main() //主函数{P1=0xaa;//while(1);}例2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位uint i,j;void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);led1=1; /*关闭第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);}}- 2 - 例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。

(part2_4.c P48)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位void delay1s(); //声明子函数void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/delay1s(); //调用延时子函数led1=1; /*关闭第一个发光二极管*/delay1s(); //调用延时子函数}}void delay1s() //子函数体{uint i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}例2.7.1编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。

如何用51单片机数码管实现跑马灯功能?

如何用51单片机数码管实现跑马灯功能?

如何用51单片机数码管实现跑马灯功能?51单片机数码管显示跑马灯程序源代码讲解基于51单片机学习板。

用S1键作为控制跑马灯的方向按键,S5键作为控制跑马灯方向的加速度按键,S9键作为控制跑马灯方向的减速度按键,S13键作为控制跑马灯方向的启动或者暂停按键。

记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。

(2)实现功能:跑马灯运行:第1个至第8个LED灯一直不亮。

在第9个至第16个LED灯,依次逐个亮灯并且每次只能亮一个灯。

每按一次独立按键S13键,原来运行的跑马灯会暂停,原来暂停的跑马灯会运行。

用S1来改变方向。

用S5和S9来改变速度,每按一次按键的递增或者递减以10为单位。

数码管显示:本程序只有1个窗口,这个窗口分成3个局部显示。

8,7,6位数码管显示运行状态,启动时显示“on”,停止时显示“oFF”。

5位数码管显示数码管方向,正向显示“n”,反向显示“U”。

4,3,2,1位数码管显示速度。

数值越大速度越慢,最慢的速度是550,最快的速度是50。

(3)源代码讲解如下:#include "REG52.H"#define const_voice_short 40 //蜂鸣器短叫的持续时间#define const_key_time1 20 //按键去抖动延时的时间#define const_key_time2 20 //按键去抖动延时的时间#define const_key_time3 20 //按键去抖动延时的时间#define const_key_time4 20 //按键去抖动延时的时间void initial_myself();void initial_peripheral();void delay_short(unsigned int uiDelayShort);void delay_long(unsigned int uiDelaylong);。

51单片机智能小车蓝牙遥控+红外循迹+红外跟随程序源代码、电路原理图和电路器件表

51单片机智能小车蓝牙遥控+红外循迹+红外跟随程序源代码、电路原理图和电路器件表

程序源代码、电路原理图、电路器件表当按下APP界面上的相关按键时(前进、左转、右转、后退、停止、左旋(当选择红外循迹用)、右旋(当选择红外跟随用)),手机会通过蓝牙发出相关的指令。

这些指令会被安装在智能小车上的蓝牙模块(HC-05)接收到,并通过串口转发给智能小车的处理器。

智能小车的处理器通过解析这些命令后,再根据这些命令的内容,控制智能小车前进、前进、左转、右转、后退、停止、红外循迹功能、红外跟随功能。

51单片机智能小车蓝牙遥控+红外循迹+红外跟随程序流程图如下:51单片机智能小车蓝牙遥控+红外循迹+红外跟随控制协议如下:前:$1,0,0,0,0,0,0,0,0,0#(文本)0x24 0x31 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)左:$3,0,0,0,0,0,0,0,0,0#(文本)0x24 0x33 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)后:$2,0,0,0,0,0,0,0,0,0#(文本)0x24 0x32 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)右:$4,0,0,0,0,0,0,0,0,0#(文本)0x24 0x34 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)停:$0,0,0,0,0,0,0,0,0,0#(文本)0x24 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)左旋(当选择红外循迹用):$0,1,0,0,0,0,0,0,0,0#(文本)0x24 0x30 0x2C 0x31 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)右旋(当选择红外跟随用):$0,2,0,0,0,0,0,0,0,0#(文本)0x24 0x30 0x2C 0x32 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x2C 0x30 0x23(十六进制)下文主要提供了51单片机智能小车蓝牙遥控+红外循迹+红外跟随完整程序源代码、电路原理图以及电路器件表。

51单片机计数器程序c语言

51单片机计数器程序c语言

下面是一个51单片机计数器的简单程序,使用C语言编写。

c
#include <reg51.h>
// 定义计数器的值
volatile unsigned int counter = 0;
// 定义外部中断0的服务函数
void INT0_Handler() interrupt 0 {
// 清除外部中断0标志位
EX0 = 0;
// 计数器值加1
counter++;
}
void main() {
// 设置外部中断0触发方式为下降沿触发
IT0 = 1;
// 使能外部中断0
EX0 = 1;
// 全局中断使能
EA = 1;
while(1) {
// 在此处添加处理计数器值的代码,例如:
// if (counter >= 100) {
// // 计数器值达到100,执行某些操作
// counter = 0; // 计数器清零
// }
}
}
此代码实现了51单片机的外部中断0的计数器功能。

当INT0引脚检测到下降沿时,会触发外部中断0,并执行INT0_Handler()函数,使counter值加1。

在main()函数中,可以添加处理counter值的代码。

例如,当counter值达到某个阈值时,可以执行特定的操作。

注意,这只是一个基础的示例,具体的代码可能会因具体硬件和应用需求而略有不同。

51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表

51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表

51单片机智能小车PWM调速前进程序源代码、电路原理图、电路器件表从控制电路角度划分,智能小车电路板分为核心板和驱动板。

核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。

驱动板上有电源电路、电机驱动电路以及一些功能模块接口。

智能小车前进只要控制智能小车四个轮子向前转动就可以了。

智能小车四个轮子由四个直流减速电机驱动。

直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D电机驱动芯片。

但有时候我们需要控制智能小车的速度,不希望智能小车全速前进。

比如在“智能小车循迹实验”中,如果智能小车速度过快,来不及反应做出方向的调整,智能小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。

那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。

智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。

在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。

不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。

这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。

这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。

智能小车PWM调速前进程序如下:首先,定义了2个变量,这2个变量用于设置智能小车的速度。

unsigned char pwmval_left_init=6; //调节此值可以调节小车的速度。

unsigned char pwmval_right_init=6; //调节此值可以调节小车的速度。

通过以下函数初始化定时器0,每1毫秒中断一次。

void Timer0_Init(void) //定时器0初始化{TMOD=0x01;TH0=0xf8;TL0=0xcd;TR0=1;ET0=1;EA=1;}下面我们看定时器0的中断处理函数。

51单片机控制LCD液晶1602源代码

51单片机控制LCD液晶1602源代码
void Lcd1602_Clear_Line(unsigned char line);
void Lcd1602_Clear_All(void);
void Lcd1602_Demo1(void);
void Lcd1602_Demo2(void);
void Delay_ms(unsigned char second);
if(++row==3)
return;
else
{
switch(row)//这种结构保持以后升级到多行显示液晶
_nop_();
LCD_EN=HIGH ;
_nop_();
LCD_EN=LOW;
LCD_DATA_PORT=0xFF; //prevent port is 0.
}
//===========================
case 2:Lcd1602_Write_Command(0x80+0x40);break; //将数据地址指针定位到第二行
default: break;
}
}
//==================================================
{
while(1)
{
Lcd1602_Demo1();
// Lcd1602_Demo2();
}
}
void Lcd1602_Ini(void)
{
Delay_ms(20);
Lcd1602_Write_Command_Nocheck(0x38);//设定LCD为16*2显示,5*7点阵,8位数据接口
{
Lcd1602_Write_String(row,column," ");

基于51单片机的液晶LCD1602显示程序源代码(带LCD1602液晶接口电路))

基于51单片机的液晶LCD1602显示程序源代码(带LCD1602液晶接口电路))

液晶LCD1602显示字符和数字程序源代码/***********************液晶LCD1602测试程序源代码*************************单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:液晶LCD1602显示功能测试。

操作说明:液晶LCD1602显示字符和倒计时。

**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//LCD显示一个字符串unsigned char code welcome[] = {"Hello My Friends"};//液晶LCD1602显示Hello My Friendsunsigned char code countdown[] = {"CountDown: S"};//液晶LCD1602显示CountDown: Svoid delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i=3;while(i--)delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD;//将数据送入P0口,即将数据写入液晶模块_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DisplayListChar(0,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时DisplayListChar(0,1,countdown); //LCD1602显示CountDown: S delay_ms(10); //延时DisplayOneChar(14,1,0x39); //LCD1602显示9delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x38); //LCD1602显示8delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x37); //LCD1602显示7delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x36); //LCD1602显示6delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x35); //LCD1602显示5delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x34); //LCD1602显示4delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x33); //LCD1602显示3delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x32); //LCD1602显示2delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x31); //LCD1602显示1delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时DisplayOneChar(14,1,0x30); //LCD1602显示0delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200); //延时while(1){;}}程序源代码是编译通过并在电路板上测试过参考液晶LCD1602接口电路图该程序的实际运行效果。

基于51单片机的打地鼠游戏设计(源码齐全)

基于51单片机的打地鼠游戏设计(源码齐全)
三、 显示模块详解
12864 液晶显示
(一) 液晶显示模块概述
12864 中文 汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192 个中 文汉字(16X16 点阵)、128个字符(8X16 点阵)及64X256 点阵显示RAM (GDRAM)。 主要技术参数和显示特性: 电源:VDD 3.3V~+5V(内置升压电路,无需负压); 显示内容:128 列× 64 行 显示颜色:黄绿/蓝屏/灰屏 显示角度:6:00 钟直视 LCD 类型:STN 与MCU 接口:8 位或4 位并行/3 位串行
case 1 : if(d2==0){d2=1;lcd_pos(1,1);lcd_wdat(0x02);} else goto again;break;
case 2 : if(d3==0){d3=1;lcd_pos(1,2);lcd_wdat(0x02);} else goto again;break;
case 7 : if(d8==0){d8=1;lcd_pos(2,3);lcd_wdat(0x02);} else goto again;break;
default: break;
}
/* **若该位置已有地鼠,则再回到 again 位置再出现一次随机数,直到不重复为止
*/ }
} Showone 函数用在定时器 0 中,每隔一段时间就出现一只地鼠
3
(二) 扩展设计
4. 游戏计分,用一全局变量 score (初始值为零),每打中一个地鼠 score 的值 加一,游戏结束,显示得分数据,并与 TOP3 最高分数进行对比,判断是否存 储此数据
5. 游戏时间设为 60 秒,用单片机内部定时器即可,游戏时间一到,游戏结束。 6. 游戏等级设计。每 9 分一个等级,分数达到 9 分后进入下一个等级,每进入下
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的源代码JIN1 EQU P1.0JIN2 EQU P1.1JIN3 EQU P1.2JIN4 EQU P1.3INH EQU P2.3CP EQU P2.2ORG 0000HAJMP MAINORG 0100HMAIN: MOV SP,#70HMOV TMOD,#20H ;自动重装MOV SCON,#50HMOV PCON,#80H ;双倍波特率SMOD=1 MOV TH1,#0FFH ;57600MHZ波特率初值MOV TL1,#0FFHMOV P1,#00HMOV P2,#00HSETB TR1SETB P2.1LOOP: LCALL keepLCALL SHUCHUACALL QINGLINGAJMP LOOP QINGLING: CJNE R0,#17,QINGLING1MOV R0,#00H QINGLING1: CJNE R1,#9,FANHUIMOV R1,#00HFANHUI: RETSHUCHU: ACALL SHUAACALL SHUBACALL SHUCACALL SHUDSHUA: MOV R3,#4SETB JIN1LLS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN1CLR INHLLS1: LJMP keepSETB CPCLR CPDJNZ R2,LLS1DJNZ R3,LLSRET SHUB: MOV R3,#4SETB JIN2 QQS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN2CLR INH QQS1: LJMP keepSETB CPINC R0CLR CPDJNZ R2,QQS1DJNZ R3,QQSRET SHUC: MOV R3,#4SETB JIN3 JJS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN3CLR INH JJS1: LJMP keepSETB CPINC R0CLR CPDJNZ R2,JJS1DJNZ R3,JJSRET SHUD: MOV R3,#4SETB JIN4 KKS: MOV R2,#8LJMP keepINC R1SETB INHCLR JIN4CLR INH KKS1: LJMP keepINC R0CLR CPDJNZ R2,KKS1DJNZ R3,KKSRETkeep: JB P2.1,KEEOCLR P2.1CJNE R1,#1,PAN1MOV R1,#00HLJMP KEEP1KEEO: RETPAN1: CJNE R1,#2,PAN2LJMP KEEP2PAN2: CJNE R1,#3,PAN3LJMP KEEP3PAN3: CJNE R1,#4,PAN4LJMP KEEP4PAN4: CJNE R1,#5,PAN5LJMP KEEP5PAN5: CJNE R1,#6,PAN6LJMP KEEP6PAN6: CJNE R1,#7,PAN7LJMP KEEP7PAN7: CJNE R1,#8,PAN8LJMP KEEP8PAN8: CJNE R1,#9,PAN9LJMP KEEP9PAN9: CJNE R1,#10,PAN10LJMP KEEP10 PAN10: CJNE R1,#11,PAN11LJMP KEEP11 PAN11: CJNE R1,#12,PAN12LJMP KEEP12 PAN12: CJNE R1,#13,PAN13LJMP KEEP13 PAN13: CJNE R1,#14,PAN14LJMP KEEP14 PAN14: CJNE R1,#15,PAN15LJMP KEEP15 PAN15: CJNE R1,#16,KEEOLJMP KEEP16KEEP1: CJNE R0,#1,LL1MOV R0,#00HLJMP SONGCHU LL1: CJNE R0,#2,LL2MOV R0,#00HMOV A,#02HLJMP SONGCHU LL2: CJNE R0,#3,LL3MOV R0,#00HMOV A,#03HLJMP SONGCHU LL3: CJNE R0,#4,LL4MOV R0,#00HMOV A,#04HLJMP SONGCHU LL4: CJNE R0,#5,LL5MOV R0,#00HMOV A,#05HLJMP SONGCHU LL5: CJNE R0,#6,LL6MOV R0,#00HMOV A,#06HLJMP SONGCHU LL6: CJNE R0,#7,LL7MOV R0,#00HMOV A,#07HLJMP SONGCHU LL7: CJNE R0,#8,LL8MOV R0,#00HMOV A,#08HLJMP SONGCHULL8: RETKEEP2: CJNE R0,#1,LL9MOV R0,#00HMOV A,#9LJMP SONGCHU LL9: CJNE R0,#2,LL10MOV R0,#00HMOV A,#10LJMP SONGCHU LL10: CJNE R0,#3,LL11MOV R0,#00HMOV A,#11LJMP SONGCHU LL11: CJNE R0,#4,LL12MOV A,#12LJMP SONGCHU LL12: CJNE R0,#5,LL13MOV R0,#00HMOV A,#13LJMP SONGCHU LL13: CJNE R0,#6,LL14MOV R0,#00HMOV A,#14LJMP SONGCHU LL14: CJNE R0,#7,LL15MOV R0,#00HMOV A,#15LJMP SONGCHU LL15: CJNE R0,#8,LL16MOV R0,#00HMOV A,#16LJMP SONGCHULL16: RETKEEP3: CJNE R0,#1,LL17MOV R0,#00HMOV A,#17LJMP SONGCHU LL17: CJNE R0,#2,LL18MOV R0,#00HMOV A,#18LJMP SONGCHU LL18: CJNE R0,#3,LL19MOV R0,#00HMOV A,#19LJMP SONGCHU LL19: CJNE R0,#4,LL20MOV R0,#00HMOV A,#20LJMP SONGCHU LL20: CJNE R0,#5,LL21MOV R0,#00HMOV A,#21LJMP SONGCHU LL21: CJNE R0,#6,LL22MOV R0,#00HMOV A,#22LJMP SONGCHULL22: CJNE R0,#7,LL23MOV R0,#00HMOV A,#23LJMP SONGCHU LL23: CJNE R0,#8,LL24MOV R0,#00HMOV A,#24LJMP SONGCHULL24: RETKEEP4: CJNE R0,#1,LL25MOV R0,#00HMOV A,#25LJMP SONGCHU LL25: CJNE R0,#2,LL26MOV R0,#00HMOV A,#26LJMP SONGCHU LL26: CJNE R0,#3,LL27MOV R0,#00HMOV A,#27LJMP SONGCHU LL27: CJNE R0,#4,LL28MOV R0,#00HMOV A,#28LJMP SONGCHU LL28: CJNE R0,#5,LL29MOV R0,#00HMOV A,#29LJMP SONGCHU LL29: CJNE R0,#6,LL30MOV R0,#00HMOV A,#30LJMP SONGCHU LL30: CJNE R0,#7,LL31MOV R0,#00HMOV A,#31LJMP SONGCHU LL31: CJNE R0,#8,LL32MOV R0,#00HMOV A,#32LJMP SONGCHULL32: RETKEEP5: CJNE R0,#1,KK1MOV R0,#00HLJMP SONGCHU KK1: CJNE R0,#2,KK2MOV R0,#00HMOV A,#34LJMP SONGCHU KK2: CJNE R0,#3,KK3MOV R0,#00HMOV A,#35LJMP SONGCHU KK3: CJNE R0,#4,KK4MOV R0,#00HMOV A,#36LJMP SONGCHU KK4: CJNE R0,#5,KK5MOV R0,#00HMOV A,#37LJMP SONGCHU KK5: CJNE R0,#6,KK6MOV R0,#00HMOV A,#38LJMP SONGCHU KK6: CJNE R0,#7,KK7MOV R0,#00HMOV A,#39LJMP SONGCHU KK7: CJNE R0,#8,KK8MOV R0,#00HMOV A,#40LJMP SONGCHUKK8: RETKEEP6: CJNE R0,#1,KK9MOV R0,#00HMOV A,#41LJMP SONGCHU KK9: CJNE R0,#2,KK10MOV R0,#00HMOV A,#42LJMP SONGCHU KK10: CJNE R0,#3,KK11MOV R0,#00HMOV A,#43LJMP SONGCHU KK11: CJNE R0,#4,KK12MOV A,#44LJMP SONGCHU KK12: CJNE R0,#5,KK13MOV R0,#00HMOV A,#45LJMP SONGCHU KK13: CJNE R0,#6,KK14MOV R0,#00HMOV A,#46LJMP SONGCHU KK14: CJNE R0,#7,KK15MOV R0,#00HMOV A,#47LJMP SONGCHU KK15: CJNE R0,#8,KK16MOV R0,#00HMOV A,#48LJMP SONGCHUKK16: RETKEEP7: CJNE R0,#1,KK17MOV R0,#00HMOV A,#49LJMP SONGCHU KK17: CJNE R0,#2,KK18MOV R0,#00HMOV A,#50LJMP SONGCHU KK18: CJNE R0,#3,KK19MOV R0,#00HMOV A,#51LJMP SONGCHU KK19: CJNE R0,#4,KK20MOV R0,#00HMOV A,#52LJMP SONGCHU KK20: CJNE R0,#5,KK21MOV R0,#00HMOV A,#53LJMP SONGCHU KK21: CJNE R0,#6,KK22MOV R0,#00HMOV A,#54LJMP SONGCHUKK22: CJNE R0,#7,KK23MOV R0,#00HMOV A,#55LJMP SONGCHU KK23: CJNE R0,#8,KK24MOV R0,#00HMOV A,#56LJMP SONGCHUKK24: RETKEEP8: CJNE R0,#1,KK25MOV R0,#00HMOV A,#57LJMP SONGCHU KK25: CJNE R0,#2,KK26MOV R0,#00HMOV A,#58LJMP SONGCHU KK26: CJNE R0,#3,KK27MOV R0,#00HMOV A,#59LJMP SONGCHU KK27: CJNE R0,#4,KK28MOV R0,#00HMOV A,#60LJMP SONGCHU KK28: CJNE R0,#5,KK29MOV R0,#00HMOV A,#61LJMP SONGCHU KK29: CJNE R0,#6,KK30MOV R0,#00HMOV A,#62LJMP SONGCHU KK30: CJNE R0,#7,KK31MOV R0,#00HMOV A,#63LJMP SONGCHU KK31: CJNE R0,#8,KK32MOV R0,#00HMOV A,#64LJMP SONGCHUKK32: RETKEEP9: CJNE R0,#1,JJ1MOV R0,#00HMOV A,#65LJMP SONGCHU JJ1: CJNE R0,#2,JJ2MOV R0,#00HMOV A,#66LJMP SONGCHU JJ2: CJNE R0,#3,JJ3MOV R0,#00HMOV A,#67LJMP SONGCHU JJ3: CJNE R0,#4,JJ4MOV R0,#00HMOV A,#68LJMP SONGCHU JJ4: CJNE R0,#5,JJ5MOV R0,#00HMOV A,#69LJMP SONGCHU JJ5: CJNE R0,#6,JJ6MOV R0,#00HMOV A,#70LJMP SONGCHU JJ6: CJNE R0,#7,JJ7MOV R0,#00HMOV A,#71LJMP SONGCHU JJ7: CJNE R0,#8,JJ8MOV R0,#00HMOV A,#72LJMP SONGCHUJJ8: RETKEEP10: CJNE R0,#1,JJ9MOV R0,#00HMOV A,#73LJMP SONGCHU JJ9: CJNE R0,#2,JJ10MOV R0,#00HMOV A,#74LJMP SONGCHU JJ10: CJNE R0,#3,JJ11MOV R0,#00HMOV A,#75LJMP SONGCHU JJ11: CJNE R0,#4,JJ12MOV R0,#00HMOV A,#76LJMP SONGCHU JJ12: CJNE R0,#5,JJ13MOV R0,#00HMOV A,#77LJMP SONGCHU JJ13: CJNE R0,#6,JJ14MOV R0,#00HMOV A,#78LJMP SONGCHU JJ14: CJNE R0,#7,JJ15MOV R0,#00HMOV A,#79LJMP SONGCHU JJ15: CJNE R0,#8,JJ16MOV R0,#00HMOV A,#80LJMP SONGCHUJJ16: RETKEEP11: CJNE R0,#1,JJ17MOV R0,#00HMOV A,#81LJMP SONGCHU JJ17: CJNE R0,#2,JJ18MOV R0,#00HMOV A,#82LJMP SONGCHU JJ18: CJNE R0,#3,JJ19MOV R0,#00HMOV A,#83LJMP SONGCHU JJ19: CJNE R0,#4,JJ20MOV R0,#00HMOV A,#84LJMP SONGCHU JJ20: CJNE R0,#5,JJ21MOV R0,#00HMOV A,#85LJMP SONGCHU JJ21: CJNE R0,#6,JJ22MOV R0,#00HMOV A,#86LJMP SONGCHUJJ22: CJNE R0,#7,JJ23MOV R0,#00HMOV A,#87LJMP SONGCHU JJ23: CJNE R0,#8,JJ24MOV R0,#00HMOV A,#88LJMP SONGCHUJJ24: RETKEEP12: CJNE R0,#1,JJ25MOV R0,#00HMOV A,#89LJMP SONGCHU JJ25: CJNE R0,#2,JJ26MOV R0,#00HMOV A,#90LJMP SONGCHU JJ26: CJNE R0,#3,JJ27MOV R0,#00HMOV A,#91LJMP SONGCHU JJ27: CJNE R0,#4,JJ28MOV R0,#00HMOV A,#92LJMP SONGCHU JJ28: CJNE R0,#5,JJ29MOV R0,#00HMOV A,#93LJMP SONGCHU JJ29: CJNE R0,#6,JJ30MOV R0,#00HMOV A,#94LJMP SONGCHU JJ30: CJNE R0,#7,JJ31MOV R0,#00HMOV A,#95LJMP SONGCHU JJ31: CJNE R0,#8,JJ32MOV R0,#00HMOV A,#96LJMP SONGCHUJJ32: RETKEEP13: CJNE R0,#1,MM1MOV R0,#00HLJMP SONGCHU MM1: CJNE R0,#2,MM2MOV R0,#00HMOV A,#98LJMP SONGCHU MM2: CJNE R0,#3,MM3MOV R0,#00HMOV A,#99LJMP SONGCHU MM3: CJNE R0,#4,MM4MOV R0,#00HMOV A,#100LJMP SONGCHU MM4: CJNE R0,#5,MM5MOV R0,#00HMOV A,#101LJMP SONGCHU MM5: CJNE R0,#6,MM6MOV R0,#00HMOV A,#102LJMP SONGCHU MM6: CJNE R0,#7,MM7MOV R0,#00HMOV A,#103LJMP SONGCHU MM7: CJNE R0,#8,MM8MOV R0,#00HMOV A,#104LJMP SONGCHUMM8: RETKEEP14: CJNE R0,#1,MM9MOV R0,#00HMOV A,#105LJMP SONGCHU MM9: CJNE R0,#2,MM10MOV R0,#00HMOV A,#106LJMP SONGCHU MM10: CJNE R0,#3,MM11MOV R0,#00HMOV A,#107LJMP SONGCHU MM11: CJNE R0,#4,MM12MOV A,#108LJMP SONGCHU MM12: CJNE R0,#5,MM13MOV R0,#00HMOV A,#109LJMP SONGCHU MM13: CJNE R0,#6,MM14MOV R0,#00HMOV A,#110LJMP SONGCHU MM14: CJNE R0,#7,MM15MOV R0,#00HMOV A,#111LJMP SONGCHU MM15: CJNE R0,#8,MM16MOV R0,#00HMOV A,#112LJMP SONGCHUMM16: RETKEEP15: CJNE R0,#1,MM17MOV R0,#00HMOV A,#113LJMP SONGCHU MM17: CJNE R0,#2,MM18MOV R0,#00HMOV A,#114LJMP SONGCHU MM18: CJNE R0,#3,MM19MOV R0,#00HMOV A,#115LJMP SONGCHU MM19: CJNE R0,#4,MM20MOV R0,#00HMOV A,#116LJMP SONGCHU MM20: CJNE R0,#5,MM21MOV R0,#00HMOV A,#117LJMP SONGCHU MM21: CJNE R0,#6,MM22MOV R0,#00HMOV A,#118LJMP SONGCHUMM22: CJNE R0,#7,MM23MOV R0,#00HMOV A,#119LJMP SONGCHU MM23: CJNE R0,#8,MM24MOV R0,#00HMOV A,#120LJMP SONGCHUMM24: RETKEEP16: CJNE R0,#1,MM25MOV R0,#00HMOV A,#121LJMP SONGCHU MM25: CJNE R0,#2,MM26MOV R0,#00HMOV A,#122LJMP SONGCHU MM26: CJNE R0,#3,MM27MOV R0,#00HMOV A,#123LJMP SONGCHU MM27: CJNE R0,#4,MM28MOV R0,#00HMOV A,#124LJMP SONGCHU MM28: CJNE R0,#5,MM29MOV R0,#00HMOV A,#125LJMP SONGCHU MM29: CJNE R0,#6,MM30MOV R0,#00HMOV A,#126LJMP SONGCHU MM30: CJNE R0,#7,MM31MOV R0,#00HMOV A,#127LJMP SONGCHU MM31: CJNE R0,#8,MM32MOV R0,#00HMOV A,#128LJMP SONGCHUMM32: RET SONGCHU: MOV SBUF,AYY1: JBC TI,YYAJMP YY1 YY: RETEND。

相关文档
最新文档