C51实验程序(流水灯、矩阵键盘、动态显示、串行口、1602液晶)
C51单片机实验:流水灯

实验二单片机并行I/O口应用实验
一、实验目的:
1.熟悉keil软件的使用方法;
2. 熟悉单片机应用电路的设计方法
3. 掌握用单片机并行接口控制外部设备的方法;
4.掌握单片机应用程序的设计和调试的方法
二、实验仪器:
单片机开发板、下载线、应用软件及微机
三、实验原理
单片机I/O口的基本输入输出功能。
四、实验内容
1.在p1.0至1.7口线上分别接LED0~LED7八个发光二级管。
2. 编写程序:要求LED0~LED7要求以秒速率循环右移
2.编写程序:要求LED0~LED7要求以秒速率循环左移
3.连接开发板,观察实验现象,并用Keil uVision仿真程序的执行过程;
五、实验报告要求
1、实验目的和要求
2、实验的原理
3、电路原理图
4、实验程序流程框图和实验程序清单
5、实验总结
6、实验思考题
六、思考题
1、思考如何实现LED0~LED7两个灯同时循环左移或右移?
2、如何同时实现循环左移后再循环右移?。
单片机C51的LED流水灯实验报告

实验3.1.2 数字量输出输出扩展——LED流水灯一、实验目的1、掌握单片机外设扩展的方法2、使用单片机和8255实现LED流水灯的控制。
二、实验内容使用汇编语言编程,功能为:通过KK1脉冲实现LED灯工作方式即时控制,完成LED 开关控制显示和LED左循环、右循环、间隔闪烁功能。
三、实验环境PC机一台,Proteus仿真软件(或TD-PIT实验系统)一套四、实验硬件电路图说明:U2为单片机SST89E554RC,U1为8255A,通过8255A的PB输出使LED工作,BUTTON 为脉冲开关。
五、程序流程图六、实验程序清单ORG 0000HAJMP 0100HORG 0100HMAIN:MOV TMOD,#60H MOV TH1,#0FFHMOV TL1,#0FFHMOV DPTR,#7300HMOV A,#80HMOVX @DPTR,ASETB TR1MOV DPTR,#7100HLEFT:MOV R0,#8MOV A,#01HAG1:MOVX @DPTR,ACALL DELAYRLC ADJNZ R0,AG1JBC TF1,RIGHTAJMP LEFTRIGHT:MOV R0,#8MOV A,#80HAG2: MOVX @DPTR,ACALL DELAYRRC ADJNZ R0,AG2JBC TF1,FLASHAJMP RIGHTFLASH:MOV R0,#8AG3: MOV A,#55HMOVX @DPTR,ACALL DELAYMOV A,#0AAHMOVX @DPTR,ACALL DELAYDJNZ R0,AG3JBC TF1,LEFTAJMP FLASHDELAY:MOV R1,#0FFHDEL0:MOV R2,#0FFHDEL: DJNZ R2,$DJNZ R1,DEL0RETEND七、实验步骤1、按实验电路图接线;2、编写实验程序,编译连接无误后进入调试状态(可用PROTEUS也可以用硬件调试);3、按动BUTTON(PROTEUS下)或KK1(实验箱),观察流水灯工作情况,验证程序功能。
C51实验程序(流水灯、矩阵键盘、动态显示、串行口、1602液晶)

switch(SBUF)//根据收到的数据决定模式
{ case 'A':LED1=~LED1,LED2=1;break;
case 'B':LED2=~LED2,LED1=1;break;
case 'C': LED1=~LED1,LED2=~LED2;break;
}
}
else
LED1=LED2=1;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=0;
TR1=1;
while(1)
{ if(K1==0)
{ while(K1==0);
Operation_NO=(Operation_NO+1)%4; //计按键次数决定模式
}
switch(Operation_NO)
{ case 0:LED1=LED2=1;break;
{uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
void main()//主函数
{SCON=0x50;//以下为串行口初始化
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
LED1=LED2=1;
while(1)
{ if(RI)
DelayMS(10);
}}
#include<reg52.h>(LCD1602)
#define uint unsigned int
#define uchar unsigned char
---C51例程

初学者必备第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
C51单片机实现呼吸灯和花样流水灯程序

C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。
{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。
C51流水灯多样显示程序

C51流水灯多样显示程序流水,多样,程序功能说明:1、单个LED流水灯从左到右2、单个LED流水灯从右到左3、从左边一个个点亮8个LED4、从右边一个个点亮8个LED5、所有的LED开关8次6、左右闪烁8次7、8个流水灯两边向中间依次点亮8次8、8个流水灯中间向两边依次点亮8次测试环境:在ME300B开发板上测试通过*************************************************************/ #include<reg51."h> //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数void delay(uint); //声明延时函数void main(void); //声明主函数/***********************************************************主程序/***********************************************************/void main(void){uint i;uchar temp;while(1){/***********************************************************8个流水灯逐个闪动/***********************************************************/temp=0x01;for(i=0;i<8;i++){P0=~temp;delay(100);temp<<=1;}/******************************************************* ****8个流水灯反向逐个闪动/***********************************************************/temp=0x80;for(i=0;i<8;i++){P0=~temp;delay(100);temp>>=1;}/******************************************************* ****8个流水灯依次全部点亮/***********************************************************/temp =0xFE;for(i=0;i<8;i++){P0=temp;delay(100);temp<<=1;}/******************************************************* ****8个流水灯依次全部熄灭/***********************************************************/temp =0xFE;for(i=0;i<8;i++){P0=~temp;delay(100);temp<<=1;}/******************************************************* ****8个流水灯依次反向全部点亮/***********************************************************/temp=0x7F;for(i=0;i<8;i++){P0=temp;delay(100);temp>>=1;}/******************************************************* ****8个流水灯依次反向全部熄灭/***********************************************************/temp=0x7F;for(i=0;i<8;i++){P0=~temp;delay(100);temp>>=1;}/******************************************************* ****8个流水灯全部点亮关闭8次/***********************************************************/temp=0xfF;for(i=0;i<8;i++){P0=temp;delay(100);P0=~temp;delay(100);}/***********************************************************8个流水灯左右晃动8次/***********************************************************/temp=0xAA;for(i=0;i<8;i++){P0=temp;delay(100);P0=~temp;delay(100);}/*********************************************************** 8个流水灯两边向中间点亮8次/***********************************************************/P0=0XFF;delay(200);for(i=0;i<8;i++){P0=0x7e;delay(100);P0=0xbd;delay(100);P0=0xdb;delay(100);P0=0xe7;delay(100);}/***********************************************************8个流水灯中间向两边点亮8次/***********************************************************/P0=0XFF;delay(200);for(i=0;i<8;i++){P0=0xe7;delay(100);P0=0xdb;delay(100);P0=0xbd;delay(100);P0=0x7e;delay(100);}}}/********************************************************** *延时程序/***********************************************************/void delay(uint t) //定义延时函数{register uint bt; for(;t;t--)for(bt=0;bt<255;bt++);}。
实验一 51单片机流水灯实验 实验报告

“流水灯”实验报告一、实验目的1.了解单片机I/O口的工作原理。
2.掌握51单片机的汇编指令。
3.熟悉汇编程序开发,调试以及仿真环境。
二、实验内容通过汇编指令对单片机I/O进行编程(本实验使用P0口),以控制八个发光二极管以一定顺序亮灭。
(即流水灯效果)三、实验原理通过更改P0口8位的高低电平,分别控制8个发光二极管的亮灭。
具体的亮灭情况如下表:要实现“流水灯”效果,也就是需要将P0口的输出值发生以下变化:FE→FD→FB→F7→EF→DF→BF→7F→BF→DF→EF→F7→FB→FD→FE→......可以使用一个循环,不断对数据进行移位运算实现。
这里的移位指令采用RL和RR,即不带进位的位移运算指令。
如果使用带进位的位移运算指令(RLC和RRC),则需要定期把CY置0,否则会出现同时亮起两个发光二极管的情况。
四、实验过程1.在仿真系统中绘制好单片机的电路图2.编写汇编程序,程序如下:ORG 0000H Delay: MOV R0, #0FFHSJMP Start Delay1: MOV R1, #0FFH Start: MOV A, #0FEH Delay2: NOPMOV P0, A DJNZ R1, Delay2CLR P2.7 DJNZ R0, Delay1CLR P3.7 RETMove: MOV R2, #7H ENDMOV R3, #7HRMove: RL AMOV P0, ACALL DelayDJNZ R2, RMoveLMove: RR AMOV P0, ACALL DelayDJNZ R3, LMoveSJMP Move五、实验结果为了便于实验结果的描述,下面分别把P0.0, P0.1…, P0.7对应的发光二极管编号为1, 2, …, 8号二极管。
在仿真系统中,先从1号二极管下面是在仿真系统中的实验结果:1.只有1号二极管点亮2.只有2号二极管点亮3.只有3号二极管点亮4.只有4号二极管点亮5.只有5号二极管点亮6.只有6号二极管点亮7.只有7号二极管点亮8.只有8号二极管点亮实验的结果:二极管的发光状态从1→2→3→4→5→6→7→8→7→…→1→2;如此往复循环。
C51单片机实验报告流水灯交通灯定时器双机交互时钟

C51单片机实验报告流水灯交通灯定时器双机交互时钟C51单片机实验报告流水灯交通灯定时器双机交互时钟学号:班级:自动化10 班姓名:张指导老师:胡2019.12单片机核心板实验要求一、流水灯实验、实验目的:) 简单I/O 引脚的输出2 ) 掌握软件延时编程方法3 ) 简单按键输入捕获判断 2 、完成功能要求) 开机是点亮12 发光二极管,闪烁三下2 ) 按照顺时针循环依次点亮发光二极管3 ) 通过按键将发光二极管的显示改为顺逆时针方式二、定时器或实时时钟实验、实验目的) 数码管动态显示技术2 ) 定时器的应用3 ) 按键功能定义 2 、完成功能要求) 通过按键可以设定定时时间,启动定时器,定时时间到,让12 个发光二极管闪烁,完成定时器功能。
) 实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。
上述二个功能至少完成一种功能。
三、双机通信实验1 、实验目的UART 串行通信接口技术应用2 、完成功能要求用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。
四、交通灯实验1 、实验目的1 )按键、数码管、发光二极管综合应用编程技术2 )数据存储于EEPRO的技术(也可以不使用)3 )定时中断技术4 )按键中断技术2 、完成功能要求)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。
)设定参数掉电后不丢失(如果不使用EEPRO,此功能可以不实现)。
)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。
再按该键,恢复正常显示。
实验一流水灯实验一、实验目的1 )简单I/O 引脚的输出2 )掌握软件延时编程方法 3 )简单按键输入捕获判断二、实验实现的功能 1 )开机是点亮12发光二极管,闪烁三下 2 )按照顺时针循环依次点亮发光二极管 3 )通过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计1 )如单片机核心板所示的硬件电路。
四、系统软件设计设计思路:1 )定义数组使得调用数组可以使led 灯能够顺时针和逆时针显示;2 )将按键的输入端全部置零,做单独按键使用;3 )利用“ while ”循环使得数码管可以闪烁三下;)利用“ for ”循环使得小灯能够依次点亮一个周期;5 )将以上思想汇总,编程,实现功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}}
#include<reg52.h>(LCD1602)
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="Zhoubo ";
uchar code table1[]="12311207";
case 1:putc_to_serialPort('A');
LED1=~LED1,LED2=1;break;
case 2:putc_to_serialPort('B');
LED2=~LED2,LED1=1;break;
case 3:putc_to_serialPort('C');
LED1=~LED1,LED2=~LED2;break;
/*write_com(0x80+0x40); //定义指针位置(第二行第一个字处即0xc0)*/
for(num=0;num<8;num++)
{write_data(table1[num]);DelayMS(5);}
flash();flash();}
}
if(key2==0){
init();
lcd_pos(0,5);
/*write_com(0x80); //将数据指针第一行第一个字处,*/
for(num=0;num<6;num++)
{write_data(table[num]);DelayMS(5);}
flash();flash();
lcd_pos(1,4);
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar Pre_KeyNO=16,KeyNO=16;
void DelayMS(uint ms)
{uchar t;
while(ms--)
{P2=_crol_(P2,1);
DelayMS(500);}
for(i=7;i>0;i--)//循环右移7次
{P2=_cror_(P2,1);
DelayMS(500);}
}
else //若按键接口为电平
{
for(i=7;i>0;i--)//隔灯左移次数视情况而定
{P2=_crol_(P2,2);
DelayMS(500);}
DelayMS(5);}
//指定显示一个字符位置
void lcd_pos(unsigned char row,unsigned char pos)
{
row &= 0x1;
pos &= 0xF;//限制pos不能大于15,row不能大于1
if (row) pos |= 0x40;//当要显示第二行时地址码+0x40;
case 8: KeyNO=3;break;
default:KeyNO=16;
}
P1=0xf0;
DelayMS(1);
Tmp=P1>>4^0x0f;
switch(Tmp)
{ case 1: KeyNO+=0;break;
case 2: KeyNO+=4;break;
case 4: KeyNO+=8;break;
P0=date; //将数据赋给P0口
DelayMS(5); //延时
lcden=1; //置高
/*DelayMS(5); //高脉冲*/
lcden=0; //置低完成高脉冲
}
void init()//初始化函数
{void fbusy();
lcdrw=0; //写操作
lcden=0;
write_com(0x38); //设置16x2显示5x7点阵,8位数据接口
write_com(pos | 0x80);
}//row为:0行,1行;pos:0<pos<16
void flash()//动闪烁
{
DelayMS(300); //控制停留时间
write_com(0x08); //关闭显示
DelayMS(100); //延时
write_com(0x0c); //开显示
{
for(t=0;t<120;t++);
}
}
void Keys_Scan()
{
uchar Tmp;
P1=0x0f;
DelayMS(1);
Tmp= P1 ^ 0x0f;
switch(Tmp)
{
case 1: KeyNO=0;break;
case 2: KeyNO=1;break;
case 4: KeyNO=2;break;
for(i=7;i>0;i--)//隔灯右移次数视情况而定
{P2=_cror_(P2,2);
DelayMS(500);}
}
}
}
#include <reg52.h>(矩阵键盘)
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
for(num=0;num<6;num++)
{write_data(table[num]);DelayMS(5);}
lcd_pos(1,4);
/*write_com(0x80+0x40); //定义指针位置(第二行第一个字处即0xc0)*/
for(num=0;num<8;num++)
{write_data(table1[num]);DelayMS(5);} while(key0==0){};
#include<reg52.h>(流水灯)
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P1^0;//按键接P1.0
void DelayMS(uint X)//延时1ms子程序
{uchar t;
void DelayMS(uint ms)
{uchar t;
while(ms--)
{for(t=0;t<120;t++);}
} //1ms延时子程序
void write_com(uchar com) //写入命令
{void fbusy();
lcdrw=0; //写操作
lcdrs=0; //LCD选择输入命令
}
DelayMS(100);
}
}
#include<reg52.h>(甲机)
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit K1=P1^0;
void DelayMS(uint ms)//1ms延时子程序
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=0;
TR1=1;
while(1)
{ if(K1==0)
{ while(K1==0);
Operation_NO=(Operation_NO+1)%4; //计按键次数决定模式
}
switch(Operation_NO)
{ case 0:LED1=LED2=1;break;
write_com(0x0c); //设置开始显示不显示光标
write_com(0x06); //写一个字符后地址指针加1
write_com(0x01); //显示清零数据指针清零
}
//检查忙函数
void fbusy()
{
lcdrw=1;//读操作
lcdrs=0;
lcden=1;
lcden=0;
while(P0&0x80){lcden=0;lcden=1;}//忙,等待
while(X--)
{for(t=120;t>0;t--);}
}
void main()//主函数
{uchar i;
P2=0x01;
DelayMS(500);
//此处延时为了从最低位开始点亮可见
while(1)
{
if(key==0)//若按键口为Байду номын сангаас电平
{
for(i=7;i>0;i--)//循环左移7次
{uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
void main()//主函数
{SCON=0x50;//以下为串行口初始化
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
LED1=LED2=1;
while(1)
{ if(RI)
for(num=0;num<8;num++)
{write_data(table1[num]);DelayMS(5);}
//分别显示完字符后,将字符整体,一次一列的左移一格,移动32次
for(num=0;num<32;num++)
{write_com(0x1c);