name sy11
cseg at 0000h
ljmp start
cseg at 4100h
start:mov a,#01h
loop:mov p1,a
mov r1,#5
del1:mov r2,#200
del2:mov r3,#126
del3:djnz r3,del3
djnz r2,del2
djnz r1,del1
rl a
jmp loop
sjmp start
end
这是我写的一个温控程序 你参考下
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar tem;
sbit aa=P2^0;
sbit bb=P2^1;
sbit cc=P2^2;
sbit DQ=P3^7;
sbit jia=P3^0;
sbit jian=P3^2;
sbit ji=P2^3;
sbit deng=P2^5;
//////////////////////////////////////
char gong,gongshi,gongge;
uint num,num0;
/////////////////////////////////////
void delay(uint z) //z=110为一毫秒
{
while(z--);
}
void delay_50us(uint t) //延时50us
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//////////////////////////////////////////////////////////////////////////////////
void init18b20() //初始化18b20
{
uchar t;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
t=DQ;
delay(6);
}
void wb18b20(uchar dat) //向18b20写入1字节的数据
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat=dat>>1;
}
delay(5);
}
uchar rb18b20() //从18b20读1字节的数据
{
uchar i, value;
for(i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value=value|0x80;
delay(4);
}
return value;
}
void rt18b20() //从18b20度温度值
{
uchar a,b,c;
init18b20();
wb18b20(0xcc);
wb18b20(0x44);
delay_50us(1);
init18b20();
wb18b20(0xcc);
wb18b20(0xbe);
a=rb18b20();
b=rb18b20();
b<<=4;
b+=(a&0xf0)>>4;
c=b&0x80;
if(c==0x00)
{}
else
{
b=~b;
}
tem=b;
}
void inittimer0()
{
TMOD=0x01;
EA=1;
ET0=1;
TH0=(65536-20500)/256;
TL0=(65536-20500)%256;
TR0=1;
}
//////////////////////////////////////////////////////////////////////////////////
void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
P0=table[10];
gong++;
if(gong==100)
{
gong=0;
}
};
while(!jia);
delay(10);
while(!jia);
}
if(jian==0)
{
delay(10);
if(jian==0)
{
P0=table[10];
gong--;
if(gong==-1)
{
gong=99;
}
};
while(!jian);
delay(10);
while(!jian);
}
}
void led()
{
cc=0;bb=0;aa=0;P0=table[gong/10];delay(500);
cc=0;bb=0;aa=1;P0=table[gong%10];delay(500);
cc=0;bb=1;aa=0;P0=table[tem/10];delay(500);
cc=0;bb=1;aa=1;P0=table[tem%10];delay(500);
}
void wenkong()
{
if((tem>gong)|(tem==gong))
{
ji=1;
deng=1;
}
else
{
ji=0;
deng=0;
}
}
void main()
{
gong=30;
ji=0;
inittimer0();
while(1)
{
wenkong();
keyscan();
}
}
void timer0() interrupt 1
{
TH0=(65536-20500)/256;
TL0=(65536-20500)%256;
num++;
led();
if(num==10)
{
rt18b20();
num=0;
}
}
1、用Proteus软件画出电路原理图。要求在P1.0至P1.7口 线上分别接LED0至LED7八个发光二极管,在P3.0口线上 接一蜂鸣器。
2、编写程序:要求LED0至LED7以秒速率循环右移。
3、编写程序:要求LED0至LED7以秒速率循环左移。
4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。
查询方式右移
ORG 0000H
CLRO: MOV IE, #00H;关闭中断
MOV TMOD, #10H;方式1
MOV SP, #30H; 开辟栈底
MOV TH1, #3CH;采用定时器1定时50ms
MOV TL1, #0B0H;
SETB TR1;开启定时器
MOV P1, #07FH;起始状态LED7亮
MOV A, #7FH;
MOV P3, #0FFH;
MAIN: MOV R3,#14H;20次
LCALL TIME; 定时一秒
CLR P3.0;
RR A;右移
MOV P1, A;灯右移
LJMP MAIN;
定时一秒的子程序
TIME: JBC TF1, LOOP2;溢出标志位为1跳转
AJMP TIME;
LOOP2: MOV TH1, #3CH;
MOV TL1, #0B0H;
DJNZ R3, TIME;R3先自减再,判断R3是否为0,为0跳转 RET;返回主程序
END
中断方式左移低电平有效
START: LJMP MAIN
ORG 000BH
LJMP TTCO
ORG 0100H
MAIN: MOV SP, #30H; 开辟栈底
SETB EA; 打开总中断
SETB ET0; 打开定时器中断
MOV R1, #00H;
MOV R2, #14H;
MOV A, #0FEH; 给A送值 MOV P1, A;初始状态LED0亮
LOOP: LCALL TIME;调用一秒的延时子程序
RL A;左移
MOV P1, A;灯左移
CLR P3.0;开启蜂鸣器
LJMP LOOP;
定时为1S,
TIME: MOV TMOD, #01H; 设置定时器为工作方式1 MOV TH0, #3CH;
MOV TL0, #0B0H;
SETB TR0;
LOOP2: CJNE R1, #14H,
MOV R1, #00H;
RET
ORG 2000H
中断程序
TTCO: MOV TH0, #3CH
MOV TL0, #0B0H;
INC R1
LOOP1: RETI
END
双向流水灯循环
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TTC0
MAIN: MOV R0, #08H
MOV R1, #00H
MOV A, #0FEH
SETB EA
SETB ET0;
LOOP1: LCALL TIME
MOV P1, A
RL A
CPL P3.0;
DJNZ R0, LOOP1
MOV R0,#08H;
LOOP2: LCALL TIME
RR A ;
MOV P1,A;
CPL P3.0
DJNZ R0, LOOP2;
MOV R0,#08H; 初始化定时时间50us LOOP2; 出现R1=14H才往下执行,再次初始化定时时间
LJMP LOOP1;
TIME: MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0;
HERE: CJNE R1, #14H, HERE
MOV R1, #00H
RET
ORG 2000H
TTC0: INC R1;
MOV TH0, #3CH
MOV TL0, #0B0H
RETI
END
十六进制数,12MHZ,
ORG 0000H
CLRO: MOV IE, #00H;
MOV TMOD, #10H;方式1
MOV TH1, #3CH;定时器1定时50ms MOV TL1, #0B0H;
SETB TR1;开始定时器
MOV R3, #00H;
MOV P1, #0FFH;led初始全灭 MOV A, #00H;
MOV P3, #0FFH;
MOV SP, #30H;开辟堆栈 MAIN: LCALL TIME;
MOV R3, #00H;
ADDC A, #01H;高电平有效 MOV R2, A;保护A,
CPL A;对A取反
MOV P1, A;把A赋格P1 MOV A, R2;取出以前的A CLR P3.0;开启蜂鸣器
CJNE A, #0FFH, MAIN; MOV A, #00H;清零重新开始 LJMP MAIN;
延时1ms子程序
TIME: JBC TF1, LOOP2;溢出标志位 AJMP TIME;
LOOP2: INC R3;
MOV TH1, #3CH;
MOV TL1, #0B0H;
CJNE R3, #14H, TIME;执行20次
RET
END
LED0表示第七位--LED7表示第0位
ORG 0000H ; 十六进制计数规律翻转亮灯(由原来 子程序——查询 改写)
MAIN: MOV
CLR
MOV
MOV
LOOP1: LCALL
MOV
INC
MOV
JB
NEXT1: JB
NEXT2: JB
NEXT3: JB
NEXT4: JB
NEXT5: JB
NEXT6: JB
NEXT7: JB
LJMP
FZ1: SETB
LJMP
FZ2: SETB
LJMP
FZ3: SETB
LJMP
FZ4: SETB
LJMP
FZ5: SETB
LJMP
FZ6: SETB
LJMP
FZ7: SETB
LJMP
FZ8: SETB
OUT: MOV A, #01H EA R0, #14H;定20次 P1, #80H DELAY R0, #14H A 20H, A; 将A的值存入20H位寻址区 20H.0, FZ1; 判断20H.0是否为1 20H.1, FZ2; 。。。 20H.2, FZ3; 。。。 20H.3, FZ4; 。。。 20H.4, FZ5; 。。。 20H.5, FZ6; 。。。 20H.6, FZ7; 。。。 20H.7, FZ8; 。。。 OUT 0FH; 如果20H.0为1则将21H.7(0FH)置1 NEXT1; 跳转到上面继续判断下一位 0EH; 。。。 NEXT2; 。。。 0DH; NEXT3; 0CH; NEXT4; 0BH; NEXT5; 0AH; NEXT6; 09H; NEXT7; 08H; P1, 21H; 将翻过来的数输入到P1口
MOV 21H, #00H; 清零为重新输入新的值做准备 LJMP LOOP1
DELAY: MOV TMOD, #01H ;方式1
MOV TH0, #03CH; 定时50MS
MOV TL0, #0B0H
MOV IE, #00H
SETB TR0
LOOP2: JBC TF0, LOOP3
LJMP
LOOP3: DJNZ
RET
END LOOP2 R0, DELAY;R0自减判断循环
电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2流水灯实验时间:20xx-10-21班级:电信092姓名:蔡…
51单片机流水灯试验一实验目的1了解51单片机的引脚结构2根据所学汇编语言编写代码实现LED灯的流水功能3利用开发板下载hex文件…
单片机流水灯实验报告一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KE…
实验一单片机并口简单应用流水灯一实验目的1了解单片机汇编语言程序的基本结构2了解单片机汇编语言程序的设计和调试方法3掌握顺序控制程…
大学物理学院单片机花样流水灯设计实验课题花样流水灯设计班级物理姓名学号摘要当今时代的智能控制电子技术给人们的生活带来了方便和舒适而…
单片机流水灯实验一任务让8个LED灯轮流亮起来实现流水灯的功能二思路让接在P00口的LED灯亮起来那么只要把P00口的电平变为低电…
井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100…
电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2流水灯实验时间:20xx-10-21班级:电信092姓名:蔡…
实验报告课程名称单片机实习专业班级姓名戴秀锋学号1104451216电气与信息学院和谐勤奋求是创新1234实验教学考核和成绩评定办…
单片机流水灯实验报告一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KE…