数码管动态扫描实验报告

时间:2024.4.20

数码管动态扫描实验

一、实验目的

学习计数器的设计、分析合测试方法。

学习硬件扫描显示电路的设计方法。

二、实验仪器

1、PC机

2、SW-51PROC单片机综合实验平台

三、实验内容

编写一段程序,用单片机P0口和P2口的I/O输出去控制8位的数码管显示,实现如下功能:使数码管上显示1、2、3、4、5、6、7、8。

四、实验步骤:

1、用Protues设计数码管动态扫描显示电路;

2、在KeilC51中编写识别程序,通过后与Protues联合调试;

3、启动仿真,观察数码管显示是否正确;

4、用Protues设计脉冲计数电路,仿真调试、运行程序并查看效果。

五、电路设计及调试:

1、实验电路:

2、程序设计与调试:①实验程序:

【12345678】

#include<reg52.h>

#define uintunsigned int

#define ucharunsigned char

uchar codeDisplsy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};

uchar codeTemble[]={0,1,2,3,4,5,6,7};

void  delay(uint z)

{

  uchar t;

  while(z--) for(t=120;t>0;t--);

}

void  main()

{

    uchar i;

  P0=0xff;

  P1=0;

  while(1)

  {

       if(i==8)

       i=0;

       P1=Temble[i];

       P0=~Displsy[i+1];

        i++;

       delay(2);

  }

}

【脉冲计时】

#include<reg52.h>

#define uintunsigned int

#define ucharunsigned char

uchar codeDisplay[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar codeTemble[]={0,1,2,3,4,5,6,7};

uchar Flag;

uint Num;

void  delay(uint z)

{

  uchar t;

  while(z--) for(t=120;t>0;t--);

}

voidTest2(void)

{

  TR1 = 1;

  while(1)

  {

        Num = TH1;

        Num = Num << 8;

        Num |= TL1;

        P1 = 7;

        P0 = ~Display[Num%10];

        delay(3);

        P1 = 6;

        P0 = ~Display[Num%100/10];

        delay(3);

        P1 = 5;

        P0 = ~Display[Num%1000/100];

        delay(3);

        P1 = 4;

        P0 = ~Display[Num%10000/1000];

        delay(3);

        P1 = 3;

        P0 = ~Display[Num%100000/10000];

        delay(3);

        P1 = 2;

        P0 = ~Display[Num%1000000/100000];

        delay(3);

        P1 = 1;

        P0 = ~Display[Num%10000000/1000000];

        delay(3);

        P1 = 0;

        P0 = ~Display[Num%100000000/1000000];

        delay(3);

  }

}

void main()

{

    TMOD = 0x50;

  TH1 = 0x00;

  TL1 = 0x00;

  EA = 1;

  ET1 = 1;

  TR1 = 0;

   while(1)

   {

      Test2();

   }

}

②调试:

③实验结果:

1、数字1~8分别显示在8个数码管上,显示无闪烁。

2、定时/计数器T1统计脉冲的个数,统计结果动态实时的显示在数码管上。

七、实验总结

专业知识有一定的提高且提高我的综合能力以便在今后社会生活中不但要学会运用所学的知识来解决实际问题而且要不断的通过这次课程设计让我了解了MCS-C51在实际生活中的一些应用单片机步进电机电路的设计及工作原理。让我在学习单片机理论知识同时让我明白了要在实际生活中学会应用提高了我的动手能力要手脑并用。本次设计是通过使用PROTEL软件来进行设计让我熟悉的掌握了此软件的基本操作。本来有些遗忘的知识点通过查参考资料让我对旧的知识有所巩固同时也明白了原来疑惑的地方。让我的专业知识有一定的提高且提高我的综合能力以便在今后社会生活中不但要学会运用所学的知识来解决实际问题而且要不断的


第二篇:4数码管动态扫描显示


1.利用动态扫描方法在六位数码管上显示出稳定的87654321.

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar code tablewe[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uint numdu,numwe,a;/*用uint 或int时只能65536-(1000~5000),用uchar和char则不会*/ void main()

{numdu=8;

numwe=0;

a=0;

EA=1;

ET1=1;

TR1=1;

TMOD=0x10;

TH1=(65536-1000)/256;

TL1=(65536-1000)%256;

while(1)

{ if(a==1)

{a=0;

P0=tabledu[numdu];

numdu--;

if(numdu==0)

numdu=8;

P2=tablewe[numwe];

numwe++;

if(numwe==8)

numwe=0;

}

}

}

void time1() interrupt 3

{TH1=(65536-1000)/256;

TL1=(65536-1000)%256;

a++;

}

2.用动态扫描方法和定时器0在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uint temp,aa=0,bai,shi,ge; /*不能用uchar或char,可用uint或int*/

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void display(uchar bai,uchar shi,uchar ge);

void delay(uint z);

void init();

void main()

{

init();//初始化子程序

while(1)

{

display(bai,shi,ge);

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void display(uchar bai,uchar shi,uchar ge)

{

P2=0x7f;

P0=table[bai]+0x80;

delay(5);

P2=0xbf;

P0=table[shi];

delay(5);

P2=0xdf;

P0=table[ge];

delay(5);

}

void init()

{

temp=0;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;

ET0=1;

TR0=1;

}

void timer0() interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

aa++;

if(aa==1) /*放主函数中达不到此效果*/

{

aa=0;

temp++;

if(temp==1000)

{

temp=0;

}

bai=temp/100;

shi=temp%100/10;

ge=temp%10;

}

}

3、利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。

#include<reg52.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

uint temp,c,aa=0,bb=0,shiwan,wan,qian,bai,shi,ge,flag=0,flag1=0; /*不能用uchar或char,可用uint或int*/

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0};

void display(uchar shiwan,uchar wan,uchar qian,uchar bai,uchar shi,uchar ge); void delay(uint z);

void init();

void main()

{

init();

while(1)

{if(flag1!=1)

display(7,6,5,bai,shi,ge);

else

display(16,17,18,18,19,20);

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void display(uchar shiwan,uchar wan,uchar qian,uchar bai,uchar shi,uchar ge) {

P2=0x7f;

P0=table[shiwan];

delay(1);

P2=0xbf;

P0=table[wan];

delay(1);

P2=0xdf;

P0=table[qian];

delay(1);

P2=0xef;

P0=table[bai];

delay(1);

P2=0xf7;

P0=table[shi];

delay(1);

P2=0xfb;

P0=table[ge];

delay(1);

}

void init()

{ c=0xfe;

P3=c;

temp=432;

TMOD=0x11;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;

ET0=1;

TR0=1;

TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET1=1;

TR1=1;

}

void timer0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; bb++;

if(flag!=1)

{if(bb==10) {

bb=0;

c=_crol_(c,1); P3=c;

}

}

else

{if(bb%4==0) P3=~P3; if(bb==60) {TR0=0; P3=0xff; flag1=1; }

}

}

void timer1() interrupt 3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

aa++;

if(aa==2) {

aa=0;

temp--;

bai=temp/100;

shi=temp%100/10; ge=temp%10;

if(temp==398)

{

TR0=0;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1;

flag=1;

bb=0;

P1=0xff;

TR1=0;

} }

}

更多相关推荐:
数码管动态显示实验报告

实验四数码管动态显示实验一一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共阳共阴自选将P1口作数据输出口与7段数码管数据引脚相连P20P23引脚输...

单片机c语言版数码管动态显示实验报告

数码管动态显示实验一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共阳共阴自选将P1口作数据输出口与7段数码管数据引脚相连P20P23引脚输出选控制...

EDA八段动态数码管显示设计实验报告

第十周动态数码管显示设计报告姓名学号专业班级指导教师20xx年11月8日目录EDA技术及应用课程设计任务书3实验目的5设计要求5实验设备5扫描原理5设计任务6实验程序6时序仿真波形图7仿真结果8模拟电路8设计总...

数码管动态扫描实验实验报告及程序

实验七数码管动态扫描实验姓名专业学号20xx412381成绩一实验目的1掌握KeilC51软件与protues软件联合仿真调试的方法2掌握单片机对数码管的动态显示控制方式3掌握定时器的基本使用及编程方法二实验仪...

七段数码管的动态扫描显示实验报告

实验四七段数码管的动态扫描显示一实验目的1进一步熟悉QuartusII软件进行FPGA设计的流程2掌握利用宏功能模块进行常用的计数器译码器的设计3学习和了解动态扫描数码管的工作原理的程序设计方法二实验原理及过程...

机器人控制-数码管动态显示-仿真实验报告

机器人控制课程总结报告机器人控制仿真实验二数码管动态显示姓名李铃年级20xx级系别信息工程学院计科师学号1111000048同组人姓名杨晨年级20xx级系别信息工程学院计科师同组人学号111100005420x...

实验十二 数码管动态显示实验

实验十二数码管动态显示一实验目的1掌握数码管的显示原理2掌握利用数码管显示计算数机内部信息3掌握数码管动态显示的原理及使用二实验技术准备1数码管排列图实验箱共有8个共阴极数码管段码输入端ABCDEFGDP8个数...

嵌入式软件开发基础实验报告 数码管显示

上海电力学院嵌入式软件开发基础实验报告题目专业年级姓名学号ARM实验46数码管显示实验电子科学与技术一实验目的1通过实验掌握LED的显示控制方法2巩固实验41中所掌握的对存储区进行访问的方法二实验设备硬件Emb...

DSP键盘接口及七段数码管显示实验报告

学生实验报告实验课名称DSP原理及运用实验项目名称键盘接口及七段数码管显示实验专业名称测控技术与仪器班级24081001学号11学生姓名徐章龙教师姓名高涛20xx年6月27日组别同组同学实验日期20xx年6月2...

实验二 LED数码管动态显示(报告要求)

实验二LED数码管动态显示一实验目的1掌握LED数码管动态显示的原理和设计方法2掌握使用KeilC51项目文件创建编译运行和硬件仿真的基本操作方法二实验原理1LED数码管的结构及显示方式2实验仪的LED接口电路...

实验四、数码管动态扫描显示实验

实验四数码管动态扫描显示实验一实验目的1学习和理解数码管动态扫描的工作原理2学习和掌握数码管动态扫描的电路接口设计及程序编写二实验设备1仿真器2单片机最小系统教学实验模块3动态数码管显示模块三实验要求使8位数码...

实验四 七段数码管的动态扫描显示

实验四七段数码管的动态扫描显示专业电子信息科学与技术姓名高晓骏学号20xx02119xx10一实验目的1进一步熟悉QuartusII软件进行FPGA设计的流程2掌握利用宏功能模块进行常用的计数器译码器的设计3学...

数码管动态显示实验报告(24篇)