单片机实验报告5

导读:单片机程序设计实验,实验报告,实验名称学号姓名日期,一、实验内容,本次试验使用单片机及138及595芯片实现LED点阵的显示功能,单片机程序设计实验实验报告实验名称学号姓名日期一、实验内容本次试验使用单片机及138及595芯片实现LED点阵的显示功能。二、程序流图及说明开始在其余行只中间两个常亮根据138及595的功能表设置PB、PA的输出定义数组端口初始化PB、PA为输出设置for循环c《1

单片机实验报告5

单片机程序设计实验

实验报告

实验名称 学号 姓名 日期

一、 实验内容

本次试验使用单片机及138及595芯片实现LED点阵的显示功能。

二、 程序流图及说明

开始

在其余行只中间两个常亮 根据138及595的功能表设置PB、PA的输出 定义数组 端口初始化 PB、PA为输出 设置for循环 c《16 对每一行都扫描 在0,1,2,7,8,15行LED全亮

三、 程序清单

结束

#include #include

/*sbit cs=PB0; sbit clk=PB2; sbit dat=PB3; sbit key=PB4;*/

//#define

a[16]={0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00}; int b=0,c=0;

void delay_1ms(void)//延时1ms { int i;

for (i=0;i<1140;i++); }

void long_delay(void) { int i;

for (i=0;i<0x30;i++); }

void short_delay(void) {

int i;

for (i=0;i<8;i++); }

void delay(int n)//延时n ms {

int i=0;

for (i=0;i

void port_init(void)//IO口初始化 {

PORTA = 0x00; DDRA = 0xff; PORTB = 0x00; DDRB = 0xff; }

void shift(void) {

PORTB = (PORTB^0x07); delay(500);

PORTB = (PORTB^0x07); }

void main(void) {

unsigned char

a[16]={0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00}; port_init();//初始化 PORTB = (PORTB|0x00); while(1) {

PORTB = (PORTB|0x00); PORTB = 0x08; for(c=0;c<16;c++) {

PORTB=(PORTB&0xf7);

if((c==0)||(c==1)||(c==7)||(c==8)||(c==2)||(c==15)) {

for(b=0;b<16;b++) { PORTB=(PORTB|0x08); PORTB = (PORTB^0x04); PORTB = (PORTB^0x04); PORTB = (PORTB^0x01); PORTB = (PORTB^0x01);

} delay(2); } else {

for(b=0;b<16;b++) { PORTB=(PORTB&0xf7); PORTB = (PORTB^0x04); PORTB = (PORTB^0x04); PORTB = (PORTB^0x01);

PORTB = (PORTB^0x01); }

for(b=0;b<16;b++) { if((b==0)||(b==15)) { PORTB=(PORTB|0x08); } else { PORTB=(PORTB&0xf7); } PORTB = (PORTB^0x04); PORTB = (PORTB^0x04); //PORTB=(PORTB&0xf7); PORTB = (PORTB^0x01); //delay(1);

PORTB = (PORTB^0x01); //delay(500); //PORTB=(PORTB&0xf7); } delay(2); }

PORTA=a[c]; }

//delay(1);

} }

四、 存在问题及解决办法

在解决如何使LED在我们规定的点阵处亮费了很多时间,主要是由于595芯片的两个控制存储和移位的时钟脉冲没有利用好。 解决方法:

1:更改595芯片的时钟输出,让两个脉冲时钟有效。

2:在设置delay时要注意时间问题,由于在每行的时间比较多,全亮行会比其余行亮,为了解决这个问题,我们可以让for循环扫描时,让在非常亮行的时间变多,即增加delay时间,实现亮度均匀。

五星文库wxphp.com包含总结汇报、党团工作、IT计算机、考试资料、人文社科、文档下载、外语学习、工作范文、行业论文、经管营销以及单片机实验报告5等内容。

本文共2页12