单片机,红绿灯显示实验报告
单片机,红绿灯显示实验报告(精选5篇)
单片机,红绿灯显示实验报告 第1篇
实
验
报
告
学生姓名:
学 号:
指导教师:
实验地点:
实验时间:2018年4月2日 实验 红绿灯显示实验
一、实验目的:
1.掌握程序控制指令。
2.掌握分支程序、子程序、循环程序的编写方法。
3.掌握软件延时的方法、了解机器周期和指令周期的概念。4.了解“静态显示”的含义。
二、实验内容:
在显示实验的基础上,如果将第7位,第3位,第1位分别看成红灯、黄灯和绿灯,红灯5秒(对应位显示0)后,显示黄灯1秒(对应位显示0),再显示绿灯3秒,编写对应程序,程序要求,延时使用子程序,最好使用标志位。其它内容见显示实验
三、实验步骤:
1.程序清单:
a)DpyDisplay.c: #include
typedef unsigned char u8;typedef unsigned int u16;
#define Dpy P0 sbit LSA = P2^2;sbit LSB = P2^3;sbit LSC = P2^4;
u8 code array[17] = {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71,0x00};
void ls(u8 c, u8 b, u8 a)
{ LSA = a;LSB = b;LSC = c;}
void delay(u16 i){ while(i>0)i--;}
void Dpy1Display(u8 i){ ls(1,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy2Display(u8 i){ ls(1,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy3Display(u8 i){ ls(1,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy4Display(u8 i){ ls(1,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy5Display(u8 i){ ls(0,1,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy6Display(u8 i){ ls(0,1,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy7Display(u8 i){ ls(0,0,1);Dpy = array[i];delay(100);Dpy = 0x00;}
void Dpy8Display(u8 i){ ls(0,0,0);Dpy = array[i];delay(100);Dpy = 0x00;}
void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h){ Dpy1Display(a);Dpy2Display(b);Dpy3Display(c);Dpy4Display(d);Dpy5Display(e);Dpy6Display(f);Dpy7Display(g);Dpy8Display(h);} b)main.c: #include
typedef unsigned char u8;typedef unsigned int u16;
extern void DpyDisplay(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h);
void main(){ u16 i, j, n;n = 108;
while(1){ for(j=10;j>0;j--){
for(i=0;i DpyDisplay(j-1,16,16,16,16,16,16,16);} for(j=2;j>0;j--){ for(i=0;i DpyDisplay(16,16,j-1,16,16,16,16,16);} for(j=5;j>0;j--) } } { } for(i=0;i 2.实验现象: 开发板数码管第一位从9逐秒递减至0后,第三位从1逐秒递减至0,之后第五位从4逐秒递减至0。3.实验原理: a)通过发送段码选定某位后向该位发送位码以点亮一根数码管。b)数码管以非常短的时间重复点亮,利用人的视觉暂留给人以稳定显示字符之感。 c)利用for循环使数码管稳定显示,并使数字逐秒减少。4.实验中的注意事项、遇到的问题以及总结: a)点亮数码管的循环函数中语句尽可能少,防止数码管显示过程中的闪烁。b)最好制作编码表,设置输入值与显示字符的关系,后续即可通过查表完成显示,可大大减小工作量。 c)利用for控制每位显示可大大减少代码量。5.实验改进方向与设想 可外接不同色LED模拟红绿灯。 一、实验目的 1、了解液晶显示屏的控制原理及方法。 2、了解点阵汉字的显示原理。 二、实验说明 1、利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。 2、本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。图形液晶显示模块有两种连接方式。一种为直接访问方式,一种为间接控制方式。本实验仪采用直接控制方式。 三、实验仪器 计算机 伟福实验箱(lab2000P) 四、实验内容与软件流程图 1、利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。 2、本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。图形液晶显示模块有两种连接方式。一种为直接访问方式,一种为间接控制方式。本实验仪采用直接控制方式。 3、直接控制方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在计算机总线上。计算机通过地址译码控制 E1和 E2的选通;读/写操作信号 R/W由地址线 A1控制;命令/数据寄存器选择信号 AO由地址线 A0控制。实际电路如上图所示。地址映射如下(地址中的X由LCD CS决定,可参见地址译码部分说明) 4、实验流程图 5、实验电路及及连线 五、思考题 1、显示自己的班级和姓名; 2、可以动态显示,上下或者左右移动; 六、源程序修改原理及其仿真结果 初始程序实验结果图 显示自己班级和姓名的修改结果图 动态显示修改的结果图 综上所述,实验要求的显示自己班级和姓名,并且动态显示的基本实现。 七、心得体会 机器人控制 综合仿真实验 ——红绿灯 姓名:李铃 年级:2011级 系别:信息工程学院 计科(师)学号:1111000048 同组人姓名:杨晨 年级:2011级 系别:信息工程学院 计科(师)同组人学号:1111000054 2013年5月14日 第 1 页 【实验目的】 进一步熟悉keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和数码管的电路结构学会构建简单的红绿灯电路。掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。 【实验要求】 利用proteus仿真软件和keil仿真软件实现交通信号灯的功能。 【实验环境】 Proteus与keil联合,语言环境为汇编语言。 【实验用品】 proteus仿真软件,keil仿真软件,个人计算机一台。 【实验内容】 一、利用proteus软件画出电路图 1、打开proteus软件,点击P选择电器元件(见图1.1),在keywords中搜索要用到的电器元件(见图1.2和图1.3),在本次试验中选择型号为AT89C51单片机。找到后双击元件名称,这样元件就显示在DEVICES中了(见图1.4),选好后点击“OK”关闭窗口。 图 1.1 图 1.2 图 1.3 图 1.4 2、选中左侧的AT89C51元件,在作图区域内单击鼠标左键,会出现图1.5左边的图象,再次单击鼠标左键,会出现图1.5右边的图像,此时已经安放好了AT89C51元件。 图 1.5 3、按照上述步骤找齐电路中还需要的电器元件,包括:电阻(RES17个,RESPACE1个),电容(CAP2个,CAPELEC1个),三极管(2N222 2个),发光二级管(LED-GREEN1个,LED-RED1个,LED-YELLOW1个),数码管(7SEG1个),开关(BUTTON1个),晶振(GRYSTAL1个)。 4、将各个元件组合,最终形成如图1.6的电路图。 二、利用keil软件编写程序并生成.asm文件和.hex文件 1、打开keil软件,选择工程->新建工程(见图1.7),并确定存放位置。 图 1.7 2、选择单片机:Atmel->AT89C51,之后的对话框选择“否”,如图1.8。 图 1.8 3、新建程序:文件->新程序文件,如图1.9.4、编辑程序文件如下: ORG 0000H TEMP EQU 24H TEMN EQU 25H LJMP MAIN ORG 0003H LJMP T0_INT ORG 0013H LJMP TI_INT T0_INT: MOV A, P1 PUSH ACC MOV P1, #0FFH MOV P1, #0F3H MOV P0, #00H JNB P3.2,$ POP ACC MOV P1, ACC RETI TI_INT: MOV A, P1 PUSH ACC MOV P1, #0FFH MOV P1, #0DEH 图 1.9 MOV P0,#00H JNB P3.3,$ POP ACC MOV P1, A RETI MAIN: SETB EA SETB EX0 SETB EX1 CLR F0 START1: MOV TEMP, #25 MOV P1, #0F3H LOOP1: ACALL DELAY DEC TEMP MOV A,TEMP MOV P0, TEMP JNB P1.6,START3 JNB P1.7,START11 CJNE A,#0, NEXT1 LJMP START2 NEXT1: LJMP LOOP1 START11: MOV TEMP, #65 MOV P1, #0F3H LOOP11: ACALL DELAY DEC TEMP MOV A,TEMP MOV P0, TEMP JNB P1.6,START33 JNB P1.7,START1 CJNE A,#0, NEXT11 LJMP START11 NEXT11: LJMP LOOP11 START2: MOV P1, #0F5H MOV TEMN,#05 LOOP2: ACALL DELAY1 DEC TEMN MOV A,TEMN CJNE A, #0,NEXT2 LJMP START3 NEXT2: LJMP LOOP2 START3: MOV TEMP, #25 MOV P1,#0DEH LOOP3: ACALL DELAY DEC TEMP MOV A,TEMP MOV P0, TEMP JNB P1.6,START1 JNB P1.7,START33 CJNE A, #0,NEXT3 LJMP START4 NEXT3: LJMP LOOP3 START33: MOV TEMP, #65 MOV P1,#0DEH LOOP33: ACALL DELAY DEC TEMP MOV A,TEMP MOV P0, TEMP JNB P1.6,START11 JNB P1.7,START3 CJNE A, #0,NEXT33 LJMP START4 NEXT33: LJMP LOOP33 START4: MOV P1, #0EEH MOV TEMN,#05 LOOP4: ACALL DELAY1 DEC TEMN MOV A, TEMN CJNE A,#0,NEXT4 LJMP START1 NEXT4: LJMP LOOP4 RETI DELAY: MOV A,TEMP MOV B, #10 DIV AB MOV R5, A MOV R6, B MOV R0, #10 L0: MOV R1, #250 L1:MOV A,R5 MOV P0, A CLR P2.4 ACALL DIMS SETB P2.4 MOV A,R6 MOV P0,R6 CLR P2.5 ACALL DIMS SETB P2.5 DEC R1 DJNZ R1,L1 DEC R0 DJNZ R0,L0 RETI DELAY1: MOV A,TEMN MOV B, #10 DIV AB MOV R5, A MOV R6, B MOV R2, #10 L2: MOV R3, #250 L3:MOV A,R5 MOV P0, A CLR P2.4 ACALL DIMS SETB P2.4 MOV A,R6 MOV P0,R6 CLR P2.5 ACALL DIMS SETB P2.5 DEC R3 DJNZ R3,L3 DEC R2 DJNZ R2,L2 RETI DELAY11: MOV A,TEMP MOV B, #10 DIV AB MOV R5, A MOV R6, B MOV R0, #10 Y0: MOV R1, #250 Y1:MOV A,R5 MOV P2, A CLR P2.6 ACALL DIMS SETB P2.6 MOV A,R6 MOV P2,R6 CLR P2.7 ACALL DIMS SETB P2.7 DEC R1 DJNZ R1,Y1 DEC R0 DJNZ R0,Y0 RETI DIMS: MOV R7,#250 DJNZ R7,$ RET END 4、生成asm文件。文件->保存,如图1.10,注意后缀为.asm 图 1.10 5、生成hex文件。Target->source group 1->右键->Add Files to Group‘Source Group 1’,单击Add,然后单击Close。单击Build Toolbar->Options for Target,如图1.11进行设置。调试正常后,project->build target生成hex文件(十六进制文件)。 图 1.11 【实验小组分工情况】 李铃负责Proteus软件部分,杨晨负责keil软件和p-k联动部分。 【结论】 基本实现红绿灯电路,进一步熟悉了keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和数码管的电路结构。掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。 【收获和体会】 我们来到实训室,根据老师发下来的项目实训资料来完成单片机控制4个8×8LED显示实训。我们认真阅读实训内容,打开电脑,打开单片机系统,打开proteu软件,放置以及排序芯片,电阻、译码器、单片机控制的4个8×8LED点阵显示屏。 第二天: 对做好的硬件连接之后,检查所连接好的线是否正确。根据任意编程进行点阵显示,排查连接的是否有错误。 第三天: 分别打开EAT589、字模软件,在EAT598软件上进行编程的时候分清子程序码,使用字模软件的横向取模,取汉字的A51格式。 第四天: 打开软件,在软件上进行汇编语言程序设计,设计出了汉字显示,学习和熟悉单片机的指令程序。第五天: 根据之前所设计的汉字显示来修改,直到完成汉字的切换以及汉字的滚动效果。然后根据自己的兴趣完成自己的作品。 实训结果: 硬件连接完成,可以实现之后的汉字显示汉字切换以及汉字滚动,认真仔细的接好硬件连接,注意在字模上的取模,经过系列的汇编语言程序设计正常运行 体会: 通过这一周的实训,我们很好的完成了单片机的实训,收获了许多单片机的知识。完成了单片机控制4个8×8点阵显示汉字、切换以及滚动汉字。在这次的单片机实训中,了解单片机的用途,译码器原理,掌握单片机的编译程序和装载并进行运行,学习硬件和软件的基本操作,熟悉运行结果及检查进行实践。 ORG 0000H LJMP MAIN ORG 0040H MAIN:MOV SP,#5FH MOV DPTR,#TAB MOV R1,#0 LCALL LA LJMP MAIN LA: MOV R0,#00H MOV R2,#0 MOV R4,#32 LB: MOV P1,R0;行 MOV A,R2 MOVC A,@A+DPTR MOV P0,A INC R2 MOV A,R2 MOVC A,@A+DPTR MOV P2,A LCALL DELAY INC R2 INC R0 DJNZ R4,LB MOV R5,#8 DJNZ R5,LA RET DELAY:MOV R6,#20 D1: D2: MOV R7,#30DJNZ R7,$ DJNZ R6,D1 RET TAB: DB04H,20H,04H,20H,0FFH,0FEH,04H,20H,00H,00H,7CH,0F8H,44H,88H,44H,0F8H DB44H,88H,7CH,88H,44H,0F8H,44H,88H,7DH,08H,45H,08H,42H,28H,04H,10H END 实训步骤: 1.硬件连接 2.检查连线是或否正确 3.根据编程进行点阵显示 4.打开软件进行设计汉字的显示 5.分清程序各码进行编译程序并运行 主要教学目标: 掌握LED动态显示的方法。 教学的方法及教学手段:讲授法,讨论法,练习法,实验法 教学重点及难点:LED动态显示 实验内容 1.LED用动态显示123456; 2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。 (一)作法 微型机定时地对显示器件扫描。 显示器件分时工作,每次只能有一个器件显示。1.LED用动态显示123456; 2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。 (二)1、8155 的PA口输出显示码,PB口用来输出位选码。2、74LS07为 6 位驱动器,为LED提供一定的驱动电流 3、8155的PB口经75452缓冲器/驱动器反向后,作为位控信号。4、75452内部包括两个缓冲器/驱动器,它们各有两个输入端。 (三)显示原理 1、8155初始化,建立显示缓冲区为 DISBUF, 存放待显示数据。 2、用软件译码法求出待显示的数对应的七段显示码,由PA口输出,并经过74LS07驱动后送到各显示器 3、由PB口输出位选码。各位从左至右依次显示,每个数码管显示1ms。显示完最后一位数后,再重复上述过程,(四)电路图 (五)参考程序 #include 0x3F,/*0*/ 0x06, /*1*/ 0x5B, /*2*/ 0x4F, /*3*/ 0x66, /*4*/ 0x6D, /*5*/ 0x7D, /*6*/ 0x07, /*7*/ 0x7F, /*8*/ 0x6F, /*9*/ 0x77, /*A*/ 0x7C, /*b*/ 0x39,/*C*/ 0x5E,0x79,0x71,}; /*d*/ /*E*/ /*F*/ //动态扫描时间间隔50ms标志位 bit g_delay50ms = 0;//函数原型声明 void Delay1ms(void);void Delay50ms(void);void main(){ uchar i, selectLED;IT0 = 1;EX0 = 1;EA = 1;CON_8155 = 0x03;selectLED = 0x20;while(1){ for(i=1;i<7;i++){ PA_8155 = LEDDATA[i];PB_8155 = selectLED; //从8155 A口输出显示码 //PA口、PB口基本输入输出 //LED位选,从左到右扫描 //外部中断0,边沿触发 //从8155 B口输出位选码 //准备显示下一位 selectLED = _cror_(selectLED, 1);if(selectLED == 0x80){ } if(g_delay50ms){ } else { } PB_8155=0x00; //消隐 Delay1ms(); Delay50ms(); selectLED = 0x20; //动态扫描时间间隔50ms //动态扫描时间间隔1ms } } } void Int0(void)interrupt 0 { } void Delay1ms(void){ uchar i, j, k;for(j=142;j>0;j--) for(i=1;i>0;i--) } void Delay50ms(void){ unsigned char a,b; for(b=173;b>0;b--) for(a=143;a>0;a--);}单片机,红绿灯显示实验报告 第2篇
机器人-红绿灯-仿真实验报告 第3篇
单片机,红绿灯显示实验报告 第4篇
计控实验报告LED动态显示 第5篇
单片机,红绿灯显示实验报告
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


