第一篇:东华大学51单片机课程设计硬件实验答案大全6题
东华学子加油
from你们的老学长
说明:哈哈哈哈哈哈,学长造福学弟学妹们啦。有这个在手,还怕51硬件实验吗?哈哈哈哈哈哈(都能直接运行的,下载了别忘记给5分,或者跟我说声:好人一生平安)
实验2
#include
{
unsigned int i;
for(i=0;i<100;i++);
} void main(void)
{
unsigned char num,i=0;
while(1)
{
P1 = 0xff;
num = P1&3;
switch(num)
{
case 0:
P1 = 0xff;
break;//灯全灭
case 1:
if(i<100)P1 = 0xf3;
else P1 = 0xff;
break;//两个灯闪烁
case 2:
if(i<100)P1 = 0xcf;
else P1 = 0xff;//两个灯闪烁
break;
case 3:
if(i<100)P1 = 0x00;
else P1 = 0xff;//四个灯闪烁
break;
}
delay();
i++;
if(i>200)i = 0;
}
}
东华学子加油
from你们的老学长
实验3 #include
{
char i;
for(;time>0;time--)
for(i=0;i<5;i++);
} void led_out(unsigned char dat)
{
Out_port = ~dat;
} void main(void)
{
char i=0;
led_out(0x11);//两个路口的红灯全亮
delay(30000);
while(1)
{
led_out(0x12);//东西路口的绿灯亮,南北路口的红灯亮
delay(30000);
while(i<5)//东西方向黄灯闪烁5次
{
led_out(0x10);
delay(1000);
led_out(0x14);
delay(1000);
i++;
}
i=0;
while(i<10)//****将黄灯闪烁10
{
led_out(0x00);
delay(1000);
led_out(0x44);
delay(1000);
i++;
东华学子加油
from你们的老学长
}
led_out(0x21);//东西路口红灯亮,而同时南北路口的绿灯亮
delay(30000);
i=0;
while(i<5)//南北方向黄灯闪烁
{
led_out(0x01);
delay(1000);
led_out(0x41);
delay(1000);
i++;
}
/*led_out(0x03);
delay(1000);*/
}
}
实验5 #include
{
char i;
for(;time>0;time--)
for(i=0;i<5;i++);
} void led_out(unsigned char dat)
{
Out_port = ~dat;
} void urgent(void)interrupt 0//***将闪烁时间改为10秒
{
unsigned int i;
EA = 0;//现在不允许中断 while(i<25){
led_out(0x11);
delay(1000);
led_out(0x00);delay(1000);
i++;}
东华学子加油
from你们的老学长
i=0;
EA = 1;
} void main(void)
{
char i=0;
IT0 = 1;
EX0 = 1;
EA = 1;
led_out(0x11);
delay(30000);
while(1)
{
led_out(0x12);
delay(30000);
while(i<5)
{
led_out(0x10);
delay(1000);
led_out(0x14);
delay(1000);
i++;
}
led_out(0x11);
delay(1000);
led_out(0x21);
delay(30000);
i=0;
while(i<5)
{
led_out(0x01);
delay(1000);
led_out(0x41);
delay(1000);
i++;
}
led_out(0x03);
delay(1000);
}
}
东华学子加油
from你们的老学长
实验六
注意更改为“。Asm“文件不要用。C文件编译
NAME
T6
;定时器实验
CSEG AT 0000H
LJMP START
CSEG AT 001BH
;定时器/计数器1中断程序入口地址
LJMP INT
CSEG AT 4100H START: MOV
A,#01H
;首显示码
CPL
A
MOV
R1,#03H
;03是偏移量,即从基址寄存器到表首的距离
MOV
R0,#05H
;05是计数值
MOV
TMOD,#10H;计数器置为方式1
MOV
TL1,#0AFH;装入时间常数
MOV
TH1,#03CH
ORL
IE,#88H
;CPU中断开放标志位和定时器
;1溢出中断允许位均置位
SETB
TR1
;开始计数 LOOP1: CJNE
R0,#00,DISP
MOV
R0,#05H
;R0计数计完一个周期,重置初值
INC
R1
;表地址偏移量加1
CJNE
R1,#21H,LOOP2
MOV
R1,#03H
;如到表尾,则重置偏移量初值 LOOP2: MOV
A,R1
;从表中取显示码入累加器
MOVC
A,@A+PC
CPL
A
JMP
DISP
DB
01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
DB
0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
DB
03H,0FH,3FH,0FFH,0FCH,0F0H,0C0H,00H
DISP:
MOV
P1,A
;将取得的显示码从P1口输出显示
JMP
LOOP1 INT:
CLR
TR1
;停止计数
DEC
R0
;计数值减一
东华学子加油
from你们的老学长
MOV
TL1,#0AFH;重置时间常数初值
MOV
TH1,#03CH
SETB
TR1
;开始计数
RETI
;中断返回 END 实验11 #include
{
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
loc &=0xf;
Led_ctl = loc|0x80;
Led_dat = table[0];
/*显示高4位*/
loc++;
Led_ctl = loc|0x80;
g=dat&0xf;
if(g==6)
g=4;
if(g==7)
g=5;
if(g==8)
g=6;
if(g==9)
g=7;
if(g==0xc)
g=8;
if(g==0xd)
g=9;
Led_dat = table[g];
/*显示低4位 */
}
void main(void)
{
Led_ctl = 0xd1;
while((Led_ctl&0x80)==0x80);
Led_ctl = 0x31;
while(1)
{
if((Led_ctl&0xf)==0)continue;
东华学子加油
from你们的老学长
Led_ctl = 0x40;
Display_byte(0,Led_dat);
}
}
/*switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
……
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;}
*/
实验15
#include
void Display_byte(unsigned char loc,unsigned char dat)//中断结果处理后显示在数码管上
{
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
loc &=0xf;
Led_ctl = loc|0x80;
Led_dat = table[dat>>4];
/*显示高4位*/
东华学子加油
from你们的老学长
loc++;
Led_ctl = loc|0x80;
Led_dat = table[dat&0xf];
/*显示低4位*/
} void delay(unsigned int t)
{
for(;t>0;t--);
} void main(void)
{ /*中断*/
EA=1;IT0=1;EX0=1;//初始化设置中断 /*中断*/
Led_ctl = 0xd1;
while((Led_ctl&0x80)==0x80);//?
Led_ctl = 0x31;
/* while(1)
{
ad_port = 0;
while(INT0);
while(!INT0);//??
Display_byte(0,ad_port);
delay(10000);
}*/ ad_port = 0;while(1);//让程序停在这儿等待中断
} void vb()
interrupt 0 //中断函数当数值转化完成后将数值显示出来 {
if(ad_port>0xf0)
P1=0xfe;if(ad_port<0x10)
P1=0xfd;if(0x10 Display_byte(0,ad_port); delay(10000); ad_port = 0;} 电气与信息工程学院 基础教学系 单片机课程设计题基于单片机的简易电子琴的设计 设计(并制作)一个基于单片机的简易电子琴。 基本要求: (1)能够手动演奏3个八度音的乐音,音长由按键按下的持续时间控制;(2)能够存储并播放乐曲; (3)由硬件开关或键盘完成手动、自动切换; (4)输出功率不小于300mW,声音无明显失真。 提高部分: (1)频谱合成以产生不同音色及和弦; (2)由程控增益放大器产生音乐节拍; (3)能够播放MIDI音乐。 说明: 单 片 机 课 程 设 计 设计题目:简易频率计数器姓名:学号: 班级:09级电子信息工程一班指导老师:粟建新 一、实验目的1.要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。 2.熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。 二、实验要求 自制一个单片机最小系统,包括串口下载、复位电路,采用外部计数器T0或T1作为外部频率输入,外部频率由信号源提供,计算出来的频率显示在四位一体的数码管上。 三、实验器材 单片机'STC89C54RD+一个,晶振一个,电容3个,电阻3个,排阻一个(由于实验室不提供排阻,实验过程中用了10个10千欧姆的电阻代替),4位一体数码显示管一个,按钮1个。 四、实验原理图 五、硬件连线 1.将P0口与4位一体数码管的ABCDEFG和DP相连; 2.将P2口的2.0,2.1,2.2分别与数码管的S1,S2,S3相连; 3.引出14做激励输入口。 六、程序设计内容 1.定时/计数器T0 和T1 的工作方式设置,由图可知,T0 是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:T0 的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个 数,即为频率值。所以T1 工作在定时状态下,每定时1秒钟到,就停止T0 的计数,而从T0 的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。 2.T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20 次,即可完成1 秒的定时功能。 七、C语言源程序 #include #define uchar unsigned char//变量宏定义 #define uint unsigned int unsigned char code table2[]={ //共阳极0~f数码管编码 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uintnumber1[4]={0,0,0,0}; uint count=0;//定义脉冲计数变量 sbit K1=P1^0; sbit K2=P1^7; void delay(uchar y)// 延时子程序 { uchar x; while(y--)for(x=110;x>0;x--); } display(x)// 显示子程序 {uintc,g=0x01; number1[0]=x/1000; number1[1]=x%1000/100; number1[2]=x%1000%100/10; number1[3]=x%1000%100%10; for(c=0;c<4;c++) { P2=g;//位选 P0=table2[number1[c]];//段选 delay(15);//简短的延时 g=g<<1;//左移为了扫描位选 }} void main() { IE=0x8a; TMOD=0x51; TH0=(65536-50000)/256; TL0=(65536-50000)%256; while(1) { if(K1==0) { delay(10); if(K1==0) {count=0; TR0=TR1=1; } } } } void t0()interrupt 1{ uchar K; TH0=(65536-50000)/256; TL0=(65536-50000)%256;// 开总中断和T0,T1// 设置中断工作方式//当按键按下时启动T0和T1//定时计数器T0子程序 if(++K==20) { TR1=TR0=K=0; count=TH1*256+TL1; display(count); TH1=TL1=0; } } //关两个中断//当到一秒后,计下T1收到的脉冲个数 //T1清零 八、实验心得 通过这次课程设计,我熟悉了Keil C51编程与PROTUSE的使用,对单片机的使用有了更深刻的了解,在焊接与测试过程中也懂得了对任何的细节必须分外注意,不能粗心大意。实验由两部分组成,仿真和焊板子,仿真过程用运用了keil c51软件和PROTUSE,这两个软件以前没有用过,通过这次课程设计,我学习了这两种软件的基本上使用,是此次课程设计比较大的收获。焊接过程中,由于从大一开始已经有好几次的焊接经历,我吸取以前的教训,在这次的焊接过程中在排版,接线上都有了很大的改善,而且焊点基本上没有虚焊,只不过焊接复位电路时没认真看仿真图,导致后面数码管没亮,但是我仔细检查后发现了错误所在,通过检查错误这一步,我对我自己做焊接试验有了很大的信心,因为我知道了如何用万用表检查错误。总之,课程设计不仅让我们温习了单片机的设计思路与编程语言,而且锻炼了我们实际动手能力,将理论与实践相结合了。 数 字 电 路 课 程 设 计 第一章设计指标 ……………………………………....……...……....P2 设计指标 ……………………………………………………………....第二章 系统概述 ………………………………………...…..…...…....P3 2.1设计思想 …………………………………………………………..2.2可行性论证 …………………………………………….…...…...2.3各功能的组成……………………………………………………… 2.4总体工作过程 ……………………………………………………… 第三章 单元电路设计与分析 ………………………………...…...…...P4 3.1各单元电路的选择 ……………………………………………… 3.2设计及工作原理分析 ……………………………………………… 第四章 电路的组构与调试 …………………………………..…...…...P7 4.1 遇到的主要问题 …………………………………………………..4.2 现象记录及原因分析 …………………………………………….4.3 解决措施及效果 ………………………………………………… 4.4 功能的测试方法、步骤、设备、记录的数据 …………………… 第五章 结束语 ………………………………………………………...P11 5.1对设计题目的结论性意见及进一步改进的意向说明 …………..5.2 总结设计的收获与体会 ………………………………………….附图(电路图、电路总图)………………………………………………P12 第一章设计指标 在生产实践和科学实验中,经常需要测量信号的频率。数字频率计就是用数字方式测量和显示被测信号频率的仪器。实用的数字频率可以测量多种不同的周期波形。 设计要求 要求设计一个测量TTL方波信号频率的数字系统。用按键选择测量信号频率。测量值采用四个LED七段数码管显示,并以发光二极管指示测量对象:测量的单位 HZ khz。频率测量范围有四档量程。 (1)测量结果显示4位有效数字,测量结果显示四位有效数字。测量精度为万分之一。(2)频率测量范围:0.1hz~999.9khz,分四档。 第一档:100.1hz~999.9hz 第二档:1.000khz~9.999khz 第三档:10.00khz~99。99khz 第四档:100.0khz~999.9khz(3)量程切换可以采用两个按键手动切换或由电路控制自动切换。 设计思想 数字频率计的基本原理是测量周期信号在单位时间内的信号周波数。主要电路为计数器需要控制的是计数器的输入脉冲。显然切换被测信号的时基信号的路径就可以实现数字频率记测量功能的转换。 由于测量结果以十进制显示,为了显示译码方便,一般采用十进制计数器级联构成信号测试电路。本设计要求频率测量结果以四位有效数字显示,所以可以采用四个十进制计数器级联构成莫为10000的极术器对被测信号计数,最大值为9999.四个计数器的4组BCD码译码后显示的结果。 第二章 系统概述 2.1设计思想 总体思想可以分为五块: 1.量程选择(包含小数点以及单位控制)2.单稳态触发器 3.计数器和锁存器 4.译码显示 5.分频计 2.2可行性论证 该设计通过单稳态触发器输出的清零信号和锁存信号控制译码的显示 2.3各功能的组成 量程通过操作台上的两个按键组合成2x2种组合,同时控制多个74153M芯片达到同时控制时基信号,档位,小数点,单位指示灯的选择分别反馈到分频器,单稳态触发器等各个模块的控制段,达到时基信号,档位,小数点,单位指示灯一一对应的效果然后通过计数器,锁存器,以及译码显示,最终在操作台的四位七段显示器上显示结果 第三章 单元电路设计与分析 各单元电路的选择以及原理简要分析 1.量程选择(包含小数点以及单位控制) 电路如上图,A,B两个输入端子同时对档位,小数点,以及单位控制端。 2.单稳态触发器 单稳态电路如上,输出锁存端Y,然后Y通过一个D触发器产生一个延时一个周期的清零信号,因为计数器和锁存器的级联,必先锁存有效,再对计数器进行清零,所以清零信号要延时于锁存信号。 3.计数器和锁存器 计数器如下图,用四个74160十进制计数器进位输出端RCO通过一个非门进行级联,构成一个10000进制计数器,其中第一个74160的仿真图也在下面 锁存器:锁存器采用两个74374进行对四个74160输出的16个二进制数字进行锁存 其中引出清零段和锁存端,4.译码显示 采用四位动态扫描:当选着段AB选择不同的值时,分别从四片74153M中选择出同一下标的数据 6.分频器,分频器分为两个模块,一个是DIV8,即把10MHZ的信号依次分频10,最后能够达到0.1HZ的频率。 另一个是通过芯片达到任意进制的分频器(基础要求当中的8分频和四分频) 第四章 电路的组构与调试 4.1 遇到的主要问题 我在这个设计电路当中,设计,调试比较顺利,唯一让我陷入困境的问题是,当输入某一频率时,显示器不能直接显示最终结果。 4.2 现象记录及原因分析 问题现象1:显示器乱码 问题现象1:显示器一直显示0 问题现象2:例如输入为500赫兹频率的信号时,显示器从0000由一递增开始快速跳到500然后瞬间清零,达不到锁存目的。分析:锁存器输出段和显示器的连接端口不对,并且电路当中的锁存器的锁存信号没有在应该有效的时候令锁存器达到锁存目的,故我着重检查计数—锁存电路 4.3 解决措施及效果 对于问题一,在仔细对照大课题前的四位动态扫描小实验当中的引脚接入,发现,一个74160所输出的4为二进制码并不是全部接入显示电路当中的同一片74153M芯片,导致乱码,而是应该分别接入四片74153M芯片。在重新接入对应的引脚后,显示器不再显示乱码,却出现问题现象二 对于问题现象2。在仔细检查电路之后,发现单稳态输出的锁存通过非门接入锁存器锁存段导致显示一直存在于0000,而后去掉了非门,结果照成问题现象3.针对问题现象3 措施1.修改单稳态电路,一共设计了以下的新的单稳态方案 仿真 波 形 :虽然是清零信号延时于锁存信号,但理论上会带来一定的误差,不过应该还是能大致正确显示频率数,结果接入新的单稳态芯片后,发现问题没有解决,依旧是显示器从0000由一递增开始快速跳到500然后瞬间清零,达不到锁存目的。 措施二,发现74373的锁存端是高电平有效,于是在高频率的信号输入下,锁存的时间跟清零时间非常接近导致锁存失败。提出新的才想:如果换成74374锁存信号上升沿有效的锁存器。会不会解决问题,于是把原先锁存电路当中的74373换成74373.结果正常实现。问题解决,在全部连接入其他部分的电路后,达到课程设计的基础要求 拓展要求方面 对于拓展要求二当中的实现多种频率信号,开始觉得采用不同分频的分频器就能达到效果,于是利用741690的置位端以及4个按钮达到多分频的目的。结果调试发现,某些频率的第一位有效数字重复,达不到1-9的目的。 于是采用74161 十六进制计数器进行分频,发现能实现1-9当中大部分的情况,唯独“4”不能出现,分析发现,74161进制达不到25分频。于是提出了以下两个解决方案 方案一:采用两片74161进行级联,构成16X16 进制分屏器,然后最高位都置为1,低五位通过5个按键进行组合。能够组合出25进制分频器,达到出现“4”的 效果。但仍旧发现依旧显示不出“4”的效果,失败。 方案二:在原先一片74161的情况下,输出信号通过一个D触发器,在次达到二分频的效果,但在纸上演示的时候,发现,“4”能够输出,但采用这个方案之后,“9”却不能输出了。方案二失败。 4.4 功能的测试方法、步骤、设备、记录的数据 1.四位动态显示器的测试方法:遮住显示屏,采用自己设计的组合的真值表进行组合,达到自己想要的输出字符。 2.对于计数器-锁存器-显示器部分,先输入个低频测试信号,例如1hz,观察显示器是否从0一直跳到9,并在低位由9变0的时候,高位进1成功。3.接入单稳态触发器,让清零段和锁存端接入单稳态的输出信号,并输入500赫兹看能否正确稳定显示0500 4.接入量程控制,切换AB键组合看能否显示0.500 00.50 000.5,并对应的单位指示灯是否正确亮灭。 5.最后电路。通过一个外接的函数信号发生器,调节在四档量程内的频率,查看显示器的显示数值跟信号发生器的显示是否一致 附上基础要求以及拓展要求2的测试表格: 第五章 结束语 5.1对设计题目的结论性意见及进一步改进的意向说明 这次的设计题目其实很有综合性,能够用上我们在数电课上所学的大部分知识,但还有一些知识点也应该涉及到,例如:TTL门的应用,时序逻辑电路的运用,以及ROM的编程引用,这样能加强我们所学知识的联系,运用,实践的能力,并应该整体电路以及设计方案都让学生自己设计,这样我相信能够涌现出更多有新奇创意的设计方案,百花齐放。进一步改进:其实对于拓展要求1,我们可以构思一个时序逻辑电路,通过画状态转换图,状态转换表等一系列基础分析方法,构建出合理电路。对于拓展要求二,其实我们可以运用ROM的编程达到设计要求,这有待我们进一步的思考,学习和实践。 付上各个部分的电路图(详细电路图在第三章)集成该部分的芯片图: 1.div8 2.7seg(七段显示) 3.单稳态触发器 4.计数器(JSQ) 5.七段显示芯片 6.小数点,量程,单位指示灯控制芯片 7.分频器芯片 8.基础要求总电路 9.扩展要求芯片(具体电路图在第四章) 10.拓展要求电路总图 同基础电路图,只不过把基础总图当中的分频器(FENPINQI)芯片换成拓展芯片(kuozhan) 江苏大学 单片机课程设计 姓名: 学号 班级:电气 一、设计任务、原理、步骤 任务:○1从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。 显示器上显示:第一位为0表示正转,为1表示反转;第二位0~F为转速等级,第三到第六位设定步数。 2单片机依显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转○动步数减为零时停止转动。 原理: 如图,当有一相绕组被通电激励时,磁通从正相齿,经过软铁芯的转子,并以最短路径流向负相齿,为使磁通路径最短,在磁场力的作用下,转子被迫移动,使最近的一对齿与被激励的一相对准。 那么,通过对它每相线圈中电流的顺序切换可使电机作步进式旋转。相数:产生不同对极N、S磁场的激磁线圈对数。 拍数:指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.步距角:对应一个脉冲信号电机转子转过的角位移.步距角=360/(转 子齿数*拍数)系统中使用20BY-0型号步进电机,它使用+5V直流电源,步距角为18度,电机线圈由A、B、C、D四相组成。 步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。 BA、BB、BC、BD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。 步骤:先设计键盘显示程序,根据书本的键盘扫描程序与数码管显示程序,把二者整合到 一起,成功后,再做驱动电机程序,在键盘显示程序的基础上,进行扩张,实现电 机的正反转与调速控制。 二、硬件原理接线图 键盘显示原理图 连线图 步进电机模块插头接实验系统J3插座,(顺接) 把P1.0~P1.3分别接到BA~BD插孔。 4.7kX474LS04P1.0P1.18032P1.2J***4523535ABVCCBABBBCBD1359CDP1.34 三、流程图 按键流程图 数码管显示流程图 电机控制程序流程图 四、程序清单 ORG 0000H AJMP MAIN ORG 0050H MAIN: MOV SP, #40H MOV 79H, #00H MOV 7AH, #00H MOV 7BH, #00H MOV 7CH, #00H MOV 7DH, #00H MOV 7EH, #00H MOV R1, #7EH MAIN1: ACALL KEY1 MOV @R1, A CJNE R1, #78H, KS CJNE A, #16H, AGAIN LJMP RUN AGAIN: LJMP MAIN KS: DEC R1 LJMP MAIN1 RUN: MOV A,7EH JZ ZHEN JNZ FAN SJMP $ ZHEN: MOV P1, #03H ACALL DELAY MOV P1, #06H ACALL DELAY MOV P1, #0CH ACALL DELAY MOV P1, #09H ACALL DELAY ANL 79H, #0FH ANL 7AH, #0FH ANL 7BH, #0FH ANL 7CH, #0FH LCALL DIR LCALL DIR MOV R5, 79H CJNE R5, #0,Z1 DEC 79H MOV R5,7AH CJNE R5, #0,Z2 DEC 7AH MOV R5, 7BH CJNE R5, #0,Z3 DEC 7BH MOV R5, 7CH CJNE R5, #0,Z4 LJMP MAIN Z1: DEC 79H LJMP ZHEN Z2: DEC 7AH LJMP ZHEN Z3: DEC 7BH LJMP ZHEN Z4: DEC 7CH LJMP ZHEN FAN: MOV P1, #09H ACALL DELAY MOV P1, #0CH ACALL DELAY MOV P1, #06H ACALL DELAY MOV P1, #03H ACALL DELAY ANL 79H, #0FH ANL 7AH, #0FH ANL 7BH, #0FH ANL 7CH, #0FH LCALL DIR LCALL DIR MOV R5, 79H CJNE R5, #0,F1 DEC 79H MOV R5, 7AH CJNE R5, #0,F2 DEC 7AH MOV R5, 7BH CJNE R5, #0,F3 DEC 7BH MOV R5, 7CH CJNE R5, #0,F4 LJMP MAIN F1: DEC 79H LJMP FAN F2: DEC 7AH LJMP FAN F3: DEC 7BH LJMP FAN F4: DEC 7CH LJMP FAN DELAY: MOV R1, 7DH DELAY10: ACALL DIR DELAY13:DJNZ R1, DELAY10 RET DIR: MOV R0,#79H MOV R3,#01H LD0: MOV DPTR,#SEG MOV A,@R0 MOVC A,@A+DPTR CPL A MOV DPTR,#0FFDCH MOVX @DPTR,A MOV A,R3 MOV DPTR,#0FFDDH MOVX @DPTR,A ACALL DL1 INC R0 MOV A,R3 JB ACC.5,LD1 RL A MOV R3,A AJMP LD0 LD1: RET SEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH DB 7DH, 07H, 7FH, 6FH, 77H, 7CH DB 39H, 5EH, 79H, 71H, 00H, 73H DL1: MOV R7,#02H DL: MOV R6,#0FFH DLA: DJNZ R6,DLA DJNZ R7,DL RET KEY1:ACALL KS1 JNZ LK1 ACALL DIR AJMP KEY1 LK1: ACALL DIR ACALL T12ms ACALL KS1 JNZ LK2 AJMP KEY1 LK2: MOV R2, #0FEH MOV R4, #00H LK4: MOV DPTR, #0FFDDH MOV A, R2 MOVX @DPTR, A INC DPTR MOVX A, @DPTR JB ACC.0, LONE MOV A, #00H AJMP LKP LONE:JB ACC.1, LTOW MOV A, #08H AJMP LKP LTOW:JB ACC.2, LTHR MOV A, #10H AJMP LKP LTHR:JB ACC.3, NEXT MOV A, #18H LKP: ADD A, R4 MOV DPTR, #TAB MOVC A, @A+DPTR PUSH ACC LK3: ACALL DIR ACALL KS1 JNZ LK3 POP ACC RET NEXT:INC R4 MOV A,R2 JNB ACC.7,KND RL A MOV R2,A AJMP LK4 KND: AJMP KEY1 KS1: MOV DPTR,#0FFDDH MOV A,#00H MOVX @DPTR,A INC DPTR MOVX A,@DPTR CPL A ANL A,#0FH RET T12ms:MOV R7,#18H TM: MOV R6,#0FFH TM6: DJNZ R6,TM6 DJNZ R7,TM RET TAB: DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH DB 0CH,0DH,00H,00H,00H,00H,00H,00H,16H END 五、设计心得体会 为期一周的单片机课程设计,我有很多心得体会,有关于单片机方面的,更多的是人与人之间的。 此次单片机课程设计意义非凡。一开始,我们组出现了很多问题,例如,如何把键盘与显示程序整合到一起,但是在老师的悉心指导和同学的帮助下,各种问题都被解决了。此次课程设计不仅增强了同学们的动手实践能力,而且更加丰富了同学们的理论知识,熟悉了汇编语言的编程方法。除此之外,我还学到了如何与人合作,与人交流。 总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅第二篇:单片机课程设计题
第三篇:湘潭大学单片机课程设计
第四篇:东华大学数字电路课程设计_数字频率计
第五篇:江苏大学单片机课程设计