单片机课程设计总结

单片机课程设计总结
单片机课程设计总结

单片机基础知识

单片机的外部结构:

1、DIP40双列直插;

2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)

3、电源VCC(PIN40)和地线GND(PIN20);

4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)

5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)

6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)

7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1

单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)

1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3;

2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)

3、一个串行通信接口;(SCON,SBUF)

4、一个中断控制器;(IE,IP)

C语言编程基础:

1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。

2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。

3、++var表示对变量var先增一;var—表示对变量后减一。

4、x |= 0x0f;表示为x = x | 0x0f;

5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。

6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}

第一章单片机最小应用系统:

单片机最小系统的硬件原理接线图:

1、接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF

2、接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF

3、接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理

4、接配置:EA(PIN31)。说明原因。

具体接法如下图所示:

第二章基本I/O口的应用。

例1:用P1口输出一倍频方波。

#include //reg52.h为包含51资源的库文件

void main ( void )

{

while (1==1)

{

++P1; //使P1口加一完成一倍频方波,

}

}

注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。

例2:用P1口输出一倍频方波,要求能用万用表测出方波。

其实,只需要在上面的程序中添加延时程序即可。

#include

void main ( void )

{

unsigned int i,j;

while (1==1)

{

++P1;

for (i=0;i<1000;i++)

for(j=0;j<1000;j++); //该循环是一个大概的延时,具体时间要看汇编语言的指令才能判断。

}

}

例3:要求从P1口输出一方波,要求P1.7变化的最快,P1.0变化的最慢。

#include

void main ( void )

{

unsigned char m,n; //定义两个中间变量完成交换过程

unsigned int i,j;

while (1)

{

n = 0;

++m;

n|=(m<<7)&0x80; //将第0位的值送至第7位

n|=(m<<5)&0x40; //将第1位的值送至第6位

n|=(m<<3)&0x20; //将第2位的值送至第5位

n|=(m<<1)&0x10; //将第3位的值送至第4位

n|=(m>>1)&0x08; //将第4位的值送至第3位

n|=(m>>3)&0x04; //将第5位的值送至第2位

n|=(m>>5)&0x02; //将第6位的值送至第1位

n|=(m>>7)&0x01; //将第7位的值送至第0位

P1 = n;

for(i=0;i<1000;i++)

for(j=0;j<1000;j++);

}

}

注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。

第三章显示驱动

数码管的接法和驱动原理

一支七段数码管实际由8个发光二极管构成,其中7个组形构成数字8的七段笔画,所以称为七段数码管,而余下的1个发光二极管作为小数点。作为习惯,分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画,按顺时针方向排,中间一画为g,小数点为h。

我们通常又将各二极与一个字节的8位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相应8个发光二极管正好与单片机一个端口Pn的8个引脚连接,这样单片机就可以通过引脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字和符号;对应字节,引脚接法为:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。

如果将8个发光二极管的负极(阴极)内接在一起,作为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极(阳极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为共阳极,8个负极则为段极。

以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据如下图:

动态显示的电路连接如下图所示:

P1口

下面,我们编程在数码管上显示出“1 2 3 4”。程序如下:

#include

Code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节

// 0 1 2 3 4 5 6 7 8 9 A b C d E F {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

void main ( void )

{

unsigned int i;

while (1)

{

P2 |= 0x0f; //消隐,让数码管开始处于不亮的状态

P0 = LedCode[1]; //将“1”的代码送出

P2 &= 0xfe; //选中第一个数码管

for(i=0;i<1000;i++);

P2 |= 0x0f;

P0 = LedCode[2];

P2 &= 0xfd;

for(i=0;i<1000;i++);

P2 |= 0x0f;

P0 = LedCode[3];

P2 &= 0xfb;

for(i=0;i<1000;i++);

P2 |= 0x0f;

P0 = LedCode[4];

P2 &= 0xf7;

for(i=0;i<1000;i++);

}

}

关于DRIVER

编写DRIVER的目的是让程序能适应更多的场合,让我们的使用更加方便,大家可以把一些自己编过的有用的程序做成DRIVER便于自己以后的使用。

下面介绍显示的驱动程序:

首先,定义一个头文档,描述可用函数,如下:

#ifndef _ LedDriver_H _ //防止重复引用该文档,如果没有定义过符号_KEY_H_,则编译下面语句#define _ LedDriver_H _ //只要引用过一次,即#include ,则定义符号_KEY_H_

void LedPrint ( unsigned char Dat ) //数据缓冲区间,完成移位功能

void LedWork ( void ) //送数到显示数码管

#endif

然后,定义函数体文档LedDriver.C,如下:

#include

#include “LedDriver.h”

Code unsigned char LedCode[16]= //Code是表示这个数组的存储空间

{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

unsigned char DisBuf[4];

void LedPrint (unsigned char Dat)

{

DisBuf[0] = DisBuf[1]; //每次用后一个数冲掉前一个数,便于扩展显示位数

DisBuf[1] = DisBuf[2];

DisBuf[2] = DisBuf[3];

DisBuf[3] = Dat;

}

void LedWork ( void )

{

static unsigned char i = 0; //static表示静态变量,指变量的赋值只在第一次定义的时候赋

P2 |= 0x0f;

P0 = LedCode[DisBuf[i]];

Switch( i ) //选择数据送到哪个管子

{

case 0: P2_0 = 0; break;

case 1: P2_1 = 0; break;

case 2: P2_2 = 0; break;

case 3: P2_3 = 0; break;

}

if (++i>=4) i = 0; //判断四位数是否都已经送完

for (m=0;m<1000;m++); //延时

}

这样DRIVER的程序就编好了,我们以后用的时候直接调用函数就可以了。

主程序可以编写如下:

#include

#include “LedDriver.h”

void mian ( void )

{

LedPrint( 1 ); //调用函数,把想显示的数据送如缓存

LedPrint( 2 );

LedPrint( 3 );

LedPrint( 4 );

While( 1 )

{

LedWork( );

}

}

下面介绍一个例子供大家参考。

显示“12345678”

P1端口接8联共阴数码管SLED8的段极:P1.7接段h,…,P1.0接段a

P2端口接8联共阴数码管SLED8的段极:P2.7接左边的共阴极,…,P2.0接右边的共阴极

方案说明:晶振频率fosc=12MHz,数码管采用动态刷新方式显示,在1ms定时断服务程序中实现

#include

unsigned char DisBuf[8]; //全局显示缓冲区,DisBuf[0]对应右SLED,DisBuf[7]对应左SLED,

void DisplayBrush( void )

{ code unsigned char cathode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //阴极控制码code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

static unsigned char i=0; // (0≤i≤7)循环刷新显示,由于是静态变量,此赋值只做一次。

P2 = 0xff; //显示消隐,以免下一段码值显示在前一支SLED

P1 = Seg7Code[ DisBuf[i] ]; //从显示缓冲区取出原始数据,查表变为七段码后送出显示

P2 = cathode[ i ]; //将对应阴极置低,显示

if( ++i >= 8 ) i=0; //指向下一个数码管和相应数据

}

void Timer0IntRoute( void ) interrupt 1

{

TL0 = -1000; //由于TL0只有8bits,所以将(-1000)低8位赋给TL0

TH0 = (-1000)>>8; //取(-1000)的高8位赋给TH0,重新定时1ms

DisplayBrush();

}

void Timer0Init( void )

{

TMOD=(TMOD & 0xf0) | 0x01; //初始化,定时器T0,工作方式1

TL0 = -1000;//定时1ms

TH0 = (-1000)>>8;

TR0 = 1; //允许T0开始计数

ET0 = 1; //允许T0计数溢出时产生中断请求

}

void Display( unsigned char index, unsigned char dataValue )

{

DisBuf[ index ] = dataValue;

}

void main( void )

{

unsigned char i;

for( i=0; i<8; i++ ){ Display(i, 8-i); } //DisBuf[0]为右,DisBuf[0]为左

Timer0Init();

EA = 1;//允许CPU响应中断请求

While(1);

}

第四章键盘驱动

单片机I/O口作为输入的前提是必须首先输出一个高电平。

char Kbhit ( void )

{

P1.0 P1_0 = 1;

if (P1_9 = = 0 ) return ( 1 );

else return ( 0 );

)

下面我们对上面的程序作个改进:

char Kbhit ( void )

{

P1 = 0xff;

if ((P1^0xff) != 0) return ( 1 );

}

一般来说,按键的时候会有抖动,我们可以用加延时的办法来去除抖动。即:P1 =0xff;

if ((P1^0xff )!= 0)

延时20ms;

if ((P1^0xff) !=0) return (1);

4X4按键。

由P1端口的高4位和低4位构成4X4的矩阵键盘,本程序只认为单键操作为合法,同时按多键时无效。

unsigned char getch ( void )

{

unsigned char X,Y,Z;

P1 = 0xf0;

X = P1;

P1 = 0x0f;

Y = P1;

Z =X | Y;

switch ( Z )

{

case 0xee: return ( 0 );

case 0xde: return ( 1 );

case 0xbe: return ( 2 );

case 0x7e: return ( 3 );

case 0xed: return ( 4 );

case 0xdd: return ( 5 );

case 0xbd: return ( 6 );

case 0x7d: return ( 7 );

case 0xeb: return ( 8 );

case 0xdb: return ( 9 );

case 0xbb: return ( 10 );

case 0x7b: return ( 11 );

case 0xe7: return ( 12 );

case 0xd7: return ( 13 );

case 0xb7: return ( 14 );

case 0x77: return ( 15 );

}

}

判断有无键按下的程序:

char Kbhit ( void )

{

P1 = 0xf0;

if (P1 = = 0xf0) return ( 0 );

else return ( 1 );

}

下面是键盘的Driver程序:

首先我们还是来写KeyDriver.h这个程序:#ifndef _KeyDriver_h_

#define _KeyDriver_h_

char Khbit ( void );

char Getch ( void );

#endif

接着,我们来写KeyDriver.c程序

#include

#include “KeyDriver.h”

char Kbhit ( void )

{

P1 = 0xf0;

if (P1 = = 0xf0) return ( 0 );

else return ( 1 );

}

unsigned char getch ( void )

{

unsigned char X,Y,Z;

P1 = 0xf0;

X = P1;

P1 = 0x0f;

Y = P1;

Z =X | Y;

switch ( Z )

{

case 0xee: return ( 0 );

case 0xde: return ( 1 );

case 0xbe: return ( 2 );

case 0x7e: return ( 3 );

case 0xed: return ( 4 );

case 0xdd: return ( 5 );

case 0xbd: return ( 6 );

case 0x7d: return ( 7 );

case 0xeb: return ( 8 );

case 0xdb: return ( 9 );

case 0xbb: return ( 10 );

case 0x7b: return ( 11 );

case 0xe7: return ( 12 );

case 0xd7: return ( 13 );

case 0xb7: return ( 14 );

case 0x77: return ( 15 );

}

}

按键显示程序如下:

#include < reg52.h >

#include “LedDriver.h”

#include “KeyDriver.h”

void main ( void )

{

unsigned char i;

for (i=1;i<5;i++)

{ LedPrint ( i );}

while ( 1 )

{

if (Kbhit( ))

{ LedPrint ( Getch( ));}

LedWork ( );

}

}

下面是另一个键盘值的算法,供大家参考。

定义一个头文档,描述可用函数,如下:

#ifndef _KEY_H_ //防止重复引用该文档,如果没有定义过符号_KEY_H_,则编译下面语句

#define _KEY_H_ //只要引用过一次,即#include ,则定义符号_KEY_H_

unsigned char keyHit( void ); //如果按键,则返回非0,否则返回0

unsigned char keyGet( void ); //读取按键值,如果没有按键则等待到按键为止

void keyPut( unsigned char ucKeyVal ); //保存按键值ucKeyVal到按键缓冲队列末

void keyBack( unsigned char ucKeyVal ); //退回键值ucKeyVal到按键缓冲队列首

#endif

定义函数体文档KEY.C,如下:

#include “key.h”

#define KeyBufSize 16 //定义按键缓冲队列字节数

unsigned char KeyBuf[ KeyBufSize ]; //定义一个无符号字符数组作为按键缓冲队列。该队列为先进

//先出,循环存取,下标从0到KeyBufSize-1

unsigned char KeyBufWp=0; //作为数组下标变量,记录存入位置

unsigned char KeyBufRp=0; //作为数组下标变量,记录读出位置

//如果存入位置与读出位置相同,则表明队列中无按键数据

unsigned char keyHit( void )

{ if( KeyBufWp == KeyBufRp ) return( 0 ); else return( 1 ); }

unsigned char keyGet( void )

{ unsigned char retVal; //暂存读出键值

while( keyHit()==0 ); //等待按键,因为函数keyHit()的返回值为0 表示无按键

retVal = KeyBuf[ KeyBufRp ]; //从数组中读出键值

if( ++KeyBufRp >= KeyBufSize ) KeyBufRp=0; //读位置加1,超出队列则循环回初始位置

return( retVal );

}

void keyPut( unsigned char ucKeyVal )

{ KeyBuf[ KeyBufWp ] = ucKeyVal; //键值存入数组

if( ++KeyBufWp >= KeyBufSize ) KeyBufWp=0; //存入位置加1,超出队列则循环回初始位置

}

/*****************************************************************************************

由于某种原因,读出的按键,没有用,但其它任务要用该按键,但传送又不方便。此时可以退回按键队列。就如取错了信件,有必要退回一样

******************************************************************************************/ void keyBack( unsigned char ucKeyVal )

{

/*

如果KeyBufRp=0; 减1后则为FFH,大于KeyBufSize,即从数组头退回到数组尾。或者由于干扰使得KeyBufRp超出队列位置,也要调整回到正常位置,

*/

if( --KeyBufRp >= KeyBufSize ) KeyBufRp=KeyBufSize-1;

KeyBuf[ KeyBufRp ] = ucKeyVal; //回存键值

}

#include

#include “KEY.H”

unsigned char keyScan( void ) //返回0表示无按键,或无效按键,其它值为按键编码值{ code unsigned char keyCode[16]=

/0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF

{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 0 };

unsigned char x, y, retVal;

P1=0x0f; //低四位输入,高四位输出0

x=P1&0x0f; //P1输入后,清高四位,作为X值

P1=0xf0; //高四位输入,低四位输出0

y=(P1 >> 4) & 0x0f; //P1输入后移位到低四位,并清高四位,作为Y值

retVal = keyCode[x]*4 + keyCode[y]; //根据本公式倒算按键编码

if( retVal==0 ) return(0); else return( retVal-4 );

}

//比如按键‘1’,得X=0x7,Y=0x7,算得retVal= 5,所以返回函数值1。

//双如按键‘7’,得X=0xb,Y=0xd,算得retVal=11,所以返回函数值7。

void main( void )

{

TMOD = (TMOD & 0xf0 )| 0x01; //不改变T1的工作方式,T0为定时器方式1 TL0 = -20000; //计数周期为20000个主频脉,自动取低8位TH0 = (-20000)>>8; //右移8位,实际上是取高8位

TR0=1; //允许T0开始计数

ET0=1; //允许T0计数溢出时产生中断请求

EA=1; //允许CPU响应中断请求

while( 1 ) //永远为真,即死循环

{

if( keyHit() != 0 ) //如果队列中有按键

P2=Seg7Code[ keyGet() ]; //从队列中取出按键值,并显示在数码管上}

}

void timer0int( void ) interrupt 1 //20ms;T0的中断号为1

{ static unsigned char sts=0;

TL0 = -20000; //方式1为软件重载

TH0 = (-20000)>>8; //右移8位,实际上是取高8位

P1_0 = 1; //作为输入引脚,必须先输出高电平

switch( sts )

{

case 0: if( keyScan()!=0 ) sts=1; break; //按键则转入状态1

case 1:

if( keyScan()==0 ) sts=0; //假按错,或干扰,回状态0

else{ sts=2; keyPut( keyScan() ); } //确实按键,键值入队列,并转状态2

break;

case 2: if(keyScan()==0 ) sts=3; break; //如果松键,则转状态3

case 3:

if( keyScan()!=0 ) sts=2; //假松键,回状态2

else sts=0; //真松键,回状态0,等待下一次按键过程}

}

第五章中断系统应用

对于51系列单片机的中断资源在本课件中就不再多加描述,同学们可以参考书上的一些资料,主要在这里是介绍它的应用。

序号中断源中断控制位(允许否)优先控制位中断状态其他

0 X0 EX0 PX0 IE0 INT0

1 Timer0 ET0 PT0 TF0 T0

2 X1 EX1 PX1 IE1 INT1

3 Timer1 ET1 PT1 TF1 T1

4 UART ES PS RXD/TXD RI/TI

5 Timer2 ET2 PT2 TF2 T2

EA

完成以下程序设计(初始化):

要求:1、将串口中断的级别设置为最高;

2、INT0工作于边沿模式,INT1工作于电平模式,这两个中断都是从外部输入;

3、允许T1定时器中断。

#include

void main ( void )

{

EA = 0;

PS = 1; PT1 = 0; PT0 = 0; PX0 = 0; PX1 = 0; //设置串口的中断级别最高

INT1 = 1; INT0 = 1; //设置外部输入中断

IT0 = 1; IT1 = 0; //设置INT0工作于边沿模式,INT1工作于电平模式

ET1 = 1; //允许定时器1中断

EX0 = 1; EX1 = 1; //允许外部中断0、1工作

ES = 1; //允许串口中断

EA = 1; //开中断

while ( 1 );

}

下面的程序为中断的具体应用,主要是针对T2定时器的中断。

#include

void main( void )

{

EA = 0; //disable interrupt for system

C_T2 = 0; //time

CP_RL2 = 0; //Reload

RCAP2L = -1000; //low 8 bits

RCAP2H = (-1000)>>8; //high 8 bits

TL2 = RCAP2L; //first load to T2

TH2 = RCAP2H;

TR2 = 1; //start count

ET2 = 1; //enable Timer2 interrupt

EA = 1; //open interrupt for system

while( 1 ){;}

}

void Timer2Int( void ) interrupt 5

{

TF2 = 0;

P1 ^= 0xff;

}

下面的程序是将按键和显示放在中断服务程序中进行处理。程序内容为上课时的例子test2。clock.h文件编写如下:

#ifndef _clock_h_

#define _clock_h_

#define SysClock 3686400

struct sClock

{

unsigned char flag;

unsigned long second; //2^32 seconds for 136 years

unsigned int ms;

};

void ClockOpen( void );

struct sClock * ClockGet( void );

//void ClockSet( struct sClock *ptr );

void ClockCall( void );

extern struct sClock gClock;

#endif

——————————————————————————————————

clock.c文件编写如下:

#include

#include "clock.h"

#include "LedDriver.h"

#include "KeyDriver.h"

void ClockCall_ms( void )

{

LedTimeCall();

KeyTimeCall();

}

void ClockOpen( void ) //初始化Timer2产生1ms定时中断

{

gClock.ms=0;

gClock.second=0;

CP_RL2 = 0; //重载模式

C_T2 = 0; //定时器方式

RCAP2H = (-(SysClock/1000)) >> 8; //重载值高8位

RCAP2L = (-(SysClock/1000)) & 0x00ff; //重载值低8位

TR2 = 1; //允许定时计数

ET2 = 1; //允许Timer2中断

}

void T2int( void ) interrupt 5

{

TF2 = 0; //clear interrupt status

ClockCall_ms();

} ——————————————————————————————————————KeyDriver.h文件编写如下:

#ifndef _KeyDriver_H_

#define _KeyDriver_H_

#define KeyBufSize 4

char kbhit( void );

char getch( void );

void KeyBufIn( char dat );

void KeyTimeCall( void );

#endif

KeyDriver.c文件编写如下:

#include

#include "KeyDriver.h"

unsigned char KeyBufWp=0;

unsigned char KeyBufRp=0;

unsigned char KeyBuf[KeyBufSize];

char kbhit( void ){ return( KeyBufWp - KeyBufRp ); }

char getch( void )

{

char ret;

ret = KeyBuf[ KeyBufRp ];

if( ++KeyBufRp >= KeyBufSize ) KeyBufRp=0;

return( ret );

}

void KeyBufIn( char dat )

{

KeyBuf[ KeyBufWp ] = dat;

if( ++KeyBufWp >= KeyBufSize ) KeyBufWp=0;

}

void KeyTimeCall( void )

{

code char KeyCode[]={

/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //0

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //1

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //2

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //3

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //4

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //5

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //6

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x0F, 0xff,0xff,0xff,0x0B, 0xff,0x07,0x03,0xff, //7

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //8

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //9

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //A

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x0E, 0xff,0xff,0xff,0x0A, 0xff,0x06,0x02,0xff, //B

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, //C

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x0D, 0xff,0xff,0xff,0x09, 0xff,0x05,0x01,0xff, //D

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x0C, 0xff,0xff,0xff,0x08, 0xff,0x04,0x00,0xff, //E

0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff //F

};

unsigned char KeyScan;

static unsigned char KeyScanCode=0;

static unsigned char sts=0;

static unsigned char ms=20;

if( --ms ) return;

ms=20;

P1=0x0f;

KeyScan=P1;

P1=0xf0;

KeyScan|=P1;

switch( sts )

{

case 0:

if( KeyScan != 0xff ) //可能有按键

{ sts=1; KeyScanCode=KeyScan; }

break;

case 1:

if( KeyScanCode == KeyScan ) //去抖后确为键按下

{

sts = 2;

KeyBufIn( KeyCode[ KeyScan ] ); //返回键值

}

else //否则认为是干扰,重新检测sts = 0;

break;

case 2:

if( KeyScanCode != KeyScan ) //检测松开按键

{

if( KeyScan == 0xff ) sts=3;

}

break;

//按键超过1秒认为是连续按键

//其后每0.2秒一次键,直到松开为止

//要处理组合按键(即0.1秒后确认读键,保证所有组合键到位

//还可能保持不松开全部按键的情况下,转换按其它键组合

//

case 3:

if( KeyScan == 0xff ) sts=0; //去抖后确为松开按键

else sts=2; //是干扰

break;

}

} ——————————————————————————————————————————————LedDriver.h文件编写如下:

#ifndef _LedDriver_H_

#define _LedDriver_H_

/*

显示数据为一个字节,由两部分组成,高三位为属性,低五位为值

BIT7:为小数点

BIT6:为闪烁位

BIT5:保留

*/

#define CharAtr_POINT 0x80

#define CharAtr_FLASH 0x40

#define Char_0 0

#define Char_1 1

#define Char_2 2

#define Char_3 3

#define Char_4 4

#define Char_5 5

#define Char_6 6

#define Char_7 7

#define Char_8 8

#define Char_9 9

#define Char_a 10

#define Char_b 11

#define Char_c 12

#define Char_d 13

#define Char_e 14

#define Char_f 15

#define Char_N 16 //singned -

#define Char_H 17

#define Char_L 18

#define Char_P 19

#define Char_o 20

extern unsigned char DisBuf[];

#define LedPutchar(bitN, Dat ) {DisBuf[bitN]=Dat;}

void LedPrint(unsigned char);

void LedTimeCall( void );

#endif

LedDriver.c文件编写如下:

#include

#include "LedDriver.h"

code unsigned char LedHexCode[]=

{

//0 1 2 3 4 5 6 7

0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,

//8 9 a b c d e f

0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,

//- H L P o

0x40, 0x76, 0x38, 0x73, 0x5c,

};

unsigned char DisBuf[4];

void LedPrint( unsigned char dat )

{

DisBuf[0] = DisBuf[1];

DisBuf[1] = DisBuf[2];

DisBuf[2] = DisBuf[3];

DisBuf[3] = dat;

}

void LedTimeCall( void )

{

static unsigned char index=0;

P2 |= 0x0f;

P0 = LedHexCode[ DisBuf[index] ];

P2 &= (1<

if( ++index == 4 ) index=0;

}

main.c文件编写如下:

程序功能描述: 多彩的世界,变化无穷

实现方法: 控制单片机左右两排发光二极管

注意事项:运行本程序时,拨码开关SW1. SW2 全部拨到'OFF'位置(即左边).

如果LED6、LED7和LED8不工作,按一下S2和S3即可

工作方式控制:按键K1、K2、K3和K4可做出不同的显示。

*/

#include //该头文档描述单片机所有特殊功能寄存器的称名,程序中可直接使用,比喻'P1' #include "LedDriver.h"

#include "KeyDriver.h"

#include "clock.h"

unsigned char function=0;

void main( void ) //一个工程项目必须有一个main函数,并且只能有一个main函数

{

char keyVal=0;

EA = 0;

ClockOpen();

LedPrint(Char_6);

LedPrint(Char_o);

LedPrint(Char_o);

LedPrint(Char_d);

EA = 1;

while( 1 )

{

if( kbhit() ) //如果有键按下返回非0值

{

keyVal=getch(); //K1---K16返回的键值分别为0---15

LedPrint( keyVal );

}

}

}

/*

1. 参考任一个显不方式的模块,增加一种显示方式对应键K4,左右两排发光二极管交替亮灭

2. 每个按键Ki(i=1...16)对应一个发光二极管LEDi,按相应的键Ki,则对应的灯LEDi亮,

再按,则灭,交替工作。

3. 你现在可以做一下十字路的交通灯管制系统了,做产品就这么容量^=^

下面的程序是test3。只有主程序部分于上面的test2有不同,现将main.c写在下面供大家参考。

#include //该头文档描述单片机所有特殊功能寄存器的称名,程序中可直接使用,比喻'P1' #include "LedDriver.h"

#include "KeyDriver.h"

单片机课程设计指导书

单片机原理及应用课程设计指导书 一、课程设计目的 《单片机原理及应用》是一门技术性,应用性、实践性很强的学科。课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的和任务就是配合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。 二、课程设计要求 1、每个学生可以从下面的课程设计题目中任选一个(也可以根据自己的兴趣选题,但选题必须是和单片机应用有关的其他控制或测试系统,同时要通过指导老师确认),选题后按任务书的要求查阅资料,完成系统的总体设计和各个模块的设计。具体实现可以用Proteus仿真,也可以用硬件。 2、进入实验室以后应根据前面的设计在2周内独立完成仿真和调试任务。课程设计过程中,要认真记录资料来源、出现的问题和解决方法。 3、不同的学生如果选题相同,相互之间可以相互探讨,但杜绝抄袭。如果发现,按零分计算。 4、设计完成后学生要按要求认真撰写课程设计报告,并于设计完成后一周内交指导老师评阅。同时准备设计测试和答辩。

三、时间安排 1、13周之前完成分组和选题,并根据选题向指导老师要任务书 2、14周根据任务书的设计要求,查阅相关的资料,完成系统总体方案设计及各模块的软硬件设计 3、15周进入实验室进行仿真、调试,并馔写设计报告,并于16周周一交给指导教师,并准备系统测试和答辩。 四、设计作品提交 1、课程设计报告书 2、proteus仿真程序(对于用proteus仿真的学生) 3、硬件实物及单片机源程序文件 五、设计报告的撰写 1、设计报告采用统一的格式,封面包括:课程设计名称、班级、姓名、学号、设计时间,具体参考设计摸板。 2、设计报告书写规范,系列分以下几个部分进行书写: 1、绪论:介绍设计的背景和意义 2、系统总体方案设计:给出系统设计硬件框图,说明实现的基本原理 3、硬件系统设计:针对框图中的硬件模块,分别介绍选择的具体元器件型号,并介绍这些器件的性能及和单片机的连接图,最后画出详细的这个系统硬件原理图。 4、系统软件设计:根据设计的功能划分模块,画出主程序和主程序的软件流程图。 5、系统调试及仿真 写出调试方法和运行结果 6、设计总结 六、课程设计内容及提示

单片机课程设计题目

《单片机原理与应用》课程设计题目 1.基于单片机的电子秒表 本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,两个按键,三位数码管显示,打开电源开关后显示8,每秒循环左移一位,即□□8—>□8□—>8□□—>□□8—>…,按A键开始计时,实时显示所经历的时间,按B键停止计时并显示从开始到当前时刻的时间,要求精确到0.1秒,量程为0~99.9秒。 要求按键输入采用中断方式,按键A接INT0,按键B接INT1。 2.智能电动百叶窗 本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,用一台直流电机控制百叶窗叶片的旋转(正转/反转),用一个光敏电阻传感器测量室内光强度,并用两位数码管显示测量结果,设置三个按键:手动/自动切换、手动正转和手动反转,用一个发光二极管显示手动/自动状态,自动状态时二极管亮。 设置两个极限位置保护行程开关,用于保护百叶窗叶片:当正转到极限位置压下行程开关时,电机停止正转,但还可以反转;当反转到极限位置压下行程开关时,电机停止反转,但还可以正转。 按键输入采用中断方式,按键中断请求信号接INT0. 单片机根据设定光强S1和S2(S2 > S1)和实测光强P控制电机M的动作:当P<=S1时,控制M正转以增加进光量; 当P>S2时,控制M反转以减少进光量; 当S1S+1时,控制R断开电加热回路; 当S-1

单片机课程设计报告实验报告

课程设计报告 学号: 1328403028 姓名:张帅华 班级: 13电子信息工程指导老师:邓晶 苏州大学电子信息学院 2016年4月

摘要 随着时代的进步和发展,单片机技术已经成为一种比较成熟的技术,普及到我们生活、工作、科研等各个领域。本次课程设计包含四个基于STC89C52单片机的设计,分别是:基于单总线数字式温度传感器DS18b20的数字温度计的设计;基于2K位串行CMOS 的EEPROM AT24C02的数字密码锁的设计;基于SPI接口实时时钟芯片DS1302的电子日历的设计以及基于无线收发芯片nrf24L01的简单无线通讯系统的设计。 关键词:单片机 DS18B20 AT24C02 DS1302 NRF24L01

目录 摘要 (1) 目录 (2) 第1章基于DS18B20的数字温度计设计 (3) 1.1 设计要求 (3) 1.2 系统组成 (3) 1.3 系统设计 (3) 1.3.1 硬件设计 (3) 1.3.2软件设计 (4) 1.4 设计结果 (6) 第2章基于AT24C02的电子密码锁设计 (7) 2.1 设计要求 (7) 2.2 系统组成 (7) 2.3 系统设计 (8) 2.3.1 硬件设计 (8) 2.3.2 软件设计 (9) 2.4 设计结果 (9) 第3章基于DS1302的电子日历的设计 (11) 3.1 系统功能 (11) 3.2 系统组成 (11) 3.3 系统设计 (11) 3.3.1 硬件设计 (11) 3.3.2 软件设计 (13) 3.4 设计结果 (14) 第4章基于NRF24L01的无线通信系统的设计 (15) 4.1 系统功能 (15) 4.2 系统组成 (15) 4.3 系统设计 (15) 4.3.1 硬件设计 (15) 4.3.2 软件设计 (16) 4.4 设计结果 (16) 总结 (17)

单片机课程设计报告模板资料

哈尔滨远东理工学院 课题名称 专业班级 学号 学生姓名 指导教师 2015年10月14日

1、例举设计过程中遇到的问题及其解决方法(至少两例)。答:(1)问题说明: 解决方法: (2)问题说明: 解决方法: 2、教师现场提的问题记录在此(不少于2个问题)。

目录 1 设计任务 (1) 2设计方案 (2) 2.1任务分析 (2) 2.2方案设计 (2) 3 系统硬件设计 (3) 3.1时钟电路设计 (3) 3.2复位电路设计 (3) 3.3 灯控制电路设计 (3) 3.4 倒计时显示电路设计 (4) 3.5 按键控制电路设计 (5) 4 系统软件设计 (6) 4.1 1S定时 (6) 4.2 定时程序流程 (6) 4.3交通灯的设计流程图 (6) 4.4定时器0 及中断响应 (7) 5仿真与性能分析 (8) 6心得体会 (9) 参考文献 (10) 附录1 系统原理图 .......................................................................错误!未定义书签。附录2 系统PCB图 .....................................................................错误!未定义书签。附录3 程序清单 .. (11) II

1 设计任务 支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。如图1.1所示。设东西向为主干道,南北为支干道。 1. 基本要求 (1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 (2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒,支干道每次放行20秒,设立30秒、20秒计时、显示电路。 (3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。黄灯亮时,原红灯按1Hz 的频率闪烁。 (4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。 2. 选做 (1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆禁行而行人通行状态,即主干道和支干道均为红灯亮。 (2) 实现绿波带。所谓‘绿波带’,是指在一定路段,只要按照规定时速,就能一路绿灯畅行无阻。“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。

单片机课程设计指导书

单片机课程设计指导书

单片机应用 课程设计指导书 中原工学院信息商务学院信息工程系 课程名称:单片机应用 适用对象:测控技术与仪器 学分/学时:3/3 选修课程:单片机应用与接口技术

一、课程设计目的 大学本科学生动手能力的培养和提高是大学本科教育的一个重要内容。如何让学生在学好基础知识的同时,迅速掌握应用技术,实验与课程设计环节起着非常重要的作用。本课程设计的目的,是让测控、自动化专业学生通过课程设计,首先建立起单片机应用系统的概念,根据实际的系统设计要求,掌握初步的单片机系统设计方法,从硬件系统和软件系统设计两个方面得到实际的提高,为今后的毕业设计打下良好的基础。 二、课程设计基本要求 1、17周:运用51系列单片机,根据设计要求绘制系统原理图(要 求用protel 或altium designer软件绘制); 2、18周:设计系统软件流程图(要求用visio绘制)、根据系统流 程图编制程序,进行运行调试;然后软硬件联机调试仿真(运用仿真软件proteus)。 3、19周:检查仿真结果,最后编写课程设计报告。 4、课程设计应由学生本人独立完成,严禁抄袭(对自己的设计不 熟悉,读不懂设计中的关键功能部分,对设计的结构不清楚,对设计的功能不了解等),一经验收教师认定其抄袭行为,成绩即为不及格。 5、认真编写课程设计报告,课程设计报告的书写格式见附录1 三、课程设计题目要求

1请设计一个基于单片机的电子时钟,画出硬件电路图、编写程序,完成电子时钟的任务,并进行proteus仿真。该控制任务应该完成下列功能: 1)电子时钟显示用LED数码管显示,格式为: XX XX XX,由左向右分别为:时、分、秒,比如:23 20 40表示23时20分40秒,刚开始工作时应该显示为:年、月、日、学号; 2)实现对时、分、秒进行校准; 3)具有闹铃功能,闹钟时间到,启动蜂鸣器。 2 题目所提供要求为基本功能要求,学生可根据实际情况,在程 序设计和实现功能上做进一步的扩展,如:具有语音播报时间功能、秒表功能等。 四、时间安排计划 时间安排:2013~2014学年下学期17周~19周,具体细分: 1、17周周一布置课设任务,查阅收集资料 周三检查系统框图,绘制打印版 周四检查系统原理图,绘制打印版 2、18周周一检查系统软件流程图,绘制打印版 周三、四检查系统源程序,电子档,自备电脑 3、19周周一、三检查仿真结果,电子档,自备电脑 周四上交课程设计报告 上交地点:传感器实验室 注意:1、本次课设要求1人/组,独立完成课设任务。 2、整个课设分大组分时进行检查,请大家按时到场。(具

单片机课程设计实习报告

【最新】单片机课程设计实习报告 单片机课程设计实习报告 实训任务: 做单一灯的左移右移,八个发光二极管l1-l8分别接在单片机的p1.0 p1.2 p1.3┅ p1.7 p1.6 ┅ p1.0亮,重复循环3次.然后左移2次,右移2次,闪烁2次(延时的时间0.2秒). 一. 实训目的和要求: (1)熟练掌握keil c51集成开发环境的使用方法 (2)熟悉keil c51集成开发环境调试功能的使用和dp?https://www.360docs.net/doc/e78830453.html,单片机仿真器.编程器.实验仪三合一综合开发平台的使用. (3)利用单片机的p1口作io口,学会利用p1口作为输入和输出口. (4)了解掌握单片机芯片的烧写方法与步骤. (5)学会用单片机汇编语言编写程序,熟悉掌握常用指令的功能运用. (6)掌握利用protel 99 se绘制电路原理图及pcb图. (7)了解pcb板的制作腐蚀过程. 二.实训器材: pc机(一台)http://shi_i.e_am8/ pcb板(一块) 5_ 电阻(八只) 10k电阻(一只) led发光二极管(八只) 25v 10 f电容(一只) 单片机ic座(一块) at89c51单片机芯片(一块) 热转印机(一台) dp?https://www.360docs.net/doc/e78830453.html,单片机仿真器.编程器.实验仪三合一综合开发平台(一台) 三.实训步骤: (1)根据原理图(下图所示),用导线把单片机综合开发平台a2区的j61接口与d1区的j52接口相连.

(2)将流水灯程序编写完整并使用tkstudy ice调试运行. (3)使用导线把a2区j61接口的p1口7个口分别与j52接口的八个led 相连. (4)打开电源,将编写好的程序运用tkstudy ice进行全速运行,看能否实现任务要求. (5)观察运行结果,若能实现功能,则将正确编译过的he_文件通过easypro51编程器写入mcu片内存储器,然后将烧写的芯片a2区的圆孔ic座进行最终实验结果的演示. (6)制板.首先利用protel 99 se画好原理图,根据原理图绘制pcb图,然后将绘制好的pcb布线图打印出来,经热转印机转印,将整个布线图印至pcb板上,最后将印有布线图的pcb板投入装有三氯化铁溶液的容器内进行腐蚀,待pcb板上布线图外的铜全部后,将其取出,清洗干净. (7)焊接.将所给元器件根据原理图一一焊至pcb板相应位置. _3下一页

单片机课程设计51实验报告DOC

福建工程学院软件学院 题目:51开发洗衣机 班级:物联网工程1202 成员: 座号:04 28 指导老师: 日期:年月日课设报告

目录 1摘要 (1) 2.设计需求 (1) 2.1功能需求 (1) 2.1.1 基本功能 (1) 2.1.2扩展功能 (1) 2.2 设计要求 (2) 2.2.1 单片机芯片部件功能 (2) 2.2.2 LCD数码显示管部件功能 (2) 2.2.3 按键部件功能 (2) 2.2.4 蜂鸣器部件功能 (2) 3硬件设计及描述 (2) 3.1总体描述 (2) 3.2系统总体框图 (3) 3.3Proteus电路图 (3) 3.4各部分硬件介绍 (4) 3.4.1晶振Protues仿真 (4) 3.4.2LCDProtues仿真 (5) 3.4.3 按键Protues仿真 (5) 3.4.4上拉电阻Protues仿真 (6) 3.4.5C51芯片Protues仿真 (6) 3.4.6上电复位电路Protues仿真 (8) 3.4.7蜂鸣器Protues仿真 (9) 4 软件设计流程及描述 (10) 4.1程序流程图 (10) 4.2函数模块及功能 (10) 5功能实现 (11) 5.1程序烧入上电调试 (11) 5.2时间递增跳变 (12) 5.3比分更变 (13) 5.4比赛得分复位 (14) 5.5比赛时间复位 (14) 6 心得体会 (15) 7源程序代码: (16)

1摘要 是为了方便足球比赛时计时与计分及时与准确公开而引申出的实用产品。在此设计中接入了一个1602液晶显示屏,第一行用来记录赛程的时间,第二行用于显示比赛的得分情况。赛程计时用倒计时来计时。在比赛结束时按下相应按键蜂鸣器会响起,提醒比赛时间结束。 这次试验运用C语言进行编程,编程后利用Keil uVision来进行编译,再生成.hex文件装入芯片中,采用Proteus软件来仿真,检验功能是否能够正常实现,最后利用单片机MCS-51实机来实现功能。 本设计以AT89S51单片机作为核心,综合应用单片机定时器、中断、LCD1602 液晶显示等知识,设计一款单片机和简单外设控制的足球计分器应用,同时显示当前的比赛进行时间,比赛队伍,比分状况。 2.设计需求 2.1功能需求 2.1.1 基本功能 (1)屏上显示比赛已运行时间 (2)屏上显示A队和B队的得分 (3)屏上显示上下半场(H-L) (4)通过按键控制比分的增减 2.1.2扩展功能 (1)按键实现比赛场次的更换 (2)按键实现比赛计时的复位 (3)按键实现比赛比分的复位 (4)在比赛结束时,蜂鸣器在主裁判的控制下响起

智能小车单片机课程设计报告

题目: 智能小车设计 打开命令行终端的快捷方式: ctr+al+t:默认的路径在家目录 ctr+shift+n:默认的路径为上一次终端所处在的路径. linux@ubuntu:~$ linux:当前登录用户名. ubuntu:主机名 :和$之间:当前用户所处在的工作路径. windows下的工作路径如C:\Intel\Logs linux下的工作路径是:/.../..../ ~:代表的是/home/linux这个路径.(家目录). ls(list):列出当前路径下的文件名和目录名. ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径 ..:上一级路径 ls -l:以横排的方式列出文件的详细信息 total 269464(当前这个路径总计所占空间的大小,单位是K) drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop 第一个位置:代表的是文件的类型. linux系统下的文件类型有以下几种. b:块设备文件 c:字符设备文件 d:directory,目录 -:普通文件. l:连接文件. s:套接字文件. p:管道文件. rwxr-xr-x:权限 r:读权限-:没有相对应的权限 w:写权限

x:可执行权限 修改权限: chmod u-或者+r/w/x 文件名 chmod g-或者+r/w/x 文件名 chmod o-或者+r/w/x 文件名 第一组:用户权限 第二组:用户组的权限 第三组:其他用户的权限. chmod 三个数(权限) 文件名 首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数 rwxr-x-wx 111101011 7 5 3 chmod 753 文件名 rwx--xr-x 第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者). 第四个位置:用户组的名字(前边的用户所处在的用户组的名字). 第五个位置:对应文件所占的空间大小(单位为b) 第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间) 最后一个位置:文件名 操作文件: 1.创建一个普通文件:touch 文件名 2.删除一个文件:rm(remove) 文件名 3.新建一个目录:mkdir(make directory) 目录名 递归创建目录:mkdir -p 目录1/目录2/目录3 4.删除一个目录:rmdir 目录名.//仅删除一个空目录 rm -rf 目录名//删除一个非空目录 5.切换目录(change directory):cd 路径 linux下的路径分两种 相对路径:以.(当前路径)为起点. 绝对路径:以/(根目录)为起点, 用相对路径的方式进入Music:cd ./Music 用绝对路径的方式进入Desktop:cd /home/linux/Desktop 返回上一级:cd ..

单片机课程设计

浙江工业大学之江学院 题目:数字时钟逻辑电路课程设计 班级:测控901 学号:200920540104 姓名:侯晓明 指导老师:刘勤贤 时间:2011年12月26日-2012年1月3日

设计课题:电子时钟课程设计 设计任务与要求根据应用电路的功能,确定封面上的题目,然后完成以下任务: 1、分析电路由几个部分组成,并用方框图对它进行整体描述; 2、对电路的每个部分分别进行单独说明,画出对应的单元电路,分析电路原理、 元件参数、所起的作用、以及与其他部分电路的关系等等; 3、用简单的电路图绘图软件绘出整体电路图,在电路图中加上自己的班级名称、 学号、姓名等信息; 4、对整体电路原理进行完整功能描述; 设计步骤1、查阅相关资料,开始撰写设计; 2、先给出总体方案并对工作原理进行大致的说明; 3、依次对各部分分别给出单元电路,并进行相应的原理、参数分析计算、功能以及与 其他部分电路的关系等等说明; 4.总体电路的绘制及总体电路原理相关说明; 5、列出设计中所涉及的所有参考文献资料。 设计说明书字数不得少于3000字。 参考文献【1】单片微型计算机原理与应用蔡菲娜浙江大学出版社2009年 【2】数字电子技术2黄瑞浙江大学出版社2008年 【3】单片机课程设计指导楼然苗,李光飞北京航空航天大学出版社2007年

设计背景 数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。 单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 课程设计目的 (1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力; (2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力; (3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。 89C51及各管脚介绍:带4K字节闪烁可编程可擦除只读存储器低电压、高性能CMOS8位微处理器

单片机课程设计题目汇总(全)

单片机课程设计题目汇总(一) 说明:为便于同学提前探讨开发思路,自学相关内容,特将本课程设计的可选题目发给大家。本次题目为其一部分,稍后会有另一部分。鼓励大家自己设计题目。 要求:每个小组2-3人,每个题目最多限两个小组选;课程设计考核内容包括:C51源程序;现场显示结果;设计报告文档(文档的格式稍后公布,请注意查收)。 一、基于单片机的交通灯显示系统(一) 设计内容:1、东西方向、南北方向均有红、黄、绿三种信号灯;(30分) 2、带紧急制动按钮,按钮按下,所有方向亮红灯;再次按下, 恢复正常显示(20分) 3、夜间模式按钮按下,所有方向显示黄灯闪烁(20分) 4、实时提醒绿灯亮的剩余时间(30分) 图示: 二、基于单片机的交通灯显示系统(二) 设计内容:1、东西干道和南北干道的通行分左行、右行、直行,其中左行、右行固定15秒;直行固定30秒(40分) 2、信号灯分绿灯(3种)、红灯、黄灯,每次绿灯换红灯时,黄 灯亮3秒钟。(30分) 3、东西干道和南北干道交替控制,每次干道绿灯交替时,有3 秒钟所有干道的交通灯都是黄灯闪烁3秒钟,提示已经进入路口的车辆迅速通过。(30分) 4、其他创新内容。(10分) 图示: 三、基于单片机的波形发生器设计 设计内容:1、设计一款能产生3种以上波形的波形发生器(30分) 2、设计波形选择按钮(采用3个独立按键)(10分) 3、点阵显示波形图案(20分) 4、能同时输出两种波形(30分)

5、显示频率(10分) 图示: 四、基于单片机的LED点阵广告牌设计 设计内容:1、能显示不同字符、图形的LED点阵广告牌(30分) 2、用独立按键控制不同字符的切换效果(如闪烁、静止、平移) (30分) 3、可通过串口从电脑下载更新需要显示的字符(30分) 4、其他创新功能(10分) 图示:略 五、基于单片机的篮球计分器设计 设计内容:1、设计LCD显示篮球比分牌(30分) 2、通过加分按钮可以给A队或B队加分(20分) 3、设计对调功能,A队和B队分数互换,意味着中场交换场地。 (20分) 4、显示比赛倒计时功能(20分) 5、创新内容:如显示第几小节(10分) 显示: 六、基于单片机的电子贺卡设计 设计内容:1、设计基于单片机的伴奏乐曲(30分) 2、设计基于单片机的彩屏图片(30分) 3、通过矩阵键盘按键显示不同彩屏图片,并伴有不同乐曲(30 分) 4、创新部分(自主设计)(10分) 显示:(略) 七、电风扇模拟控制系统设计 设计内容:1、3个独立按键分别控制“自然风”、“睡眠风”、“常风”,(三者的区别是直流电机的停歇时间不同),并在数显管上显示出区别(30分) 2、每种类型风可以根据按下独立按键次数分为4个档的风力调 节。(30分) 3、设计风扇的过热保护,用继电器实现。即当风扇运行一段时 间后,暂停10秒。(30分) 4、其他创新内容(如报警提示)(10分)

单片机电子时钟课程设计实验报告

单片机电子时钟课程设 计实验报告 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

《单片机原理与应用》课程设计 总结报告 题目:单片机电子时钟(带秒表)的设计 设计人员:张保江江润洲 学号: 班级:自动化1211 指导老师:阮海容 目录 1.题目与主要功能要求 (2) 2.整体设计框图及整机概述 (3) 3.各硬件单元电路的设计、参数分析及原理说明 (3) 4.软件流程图和流程说明 (4) 5.总结设计及调试的体会 (10) 附录 1.图一:系统电路原理图 (11) 2.图二:系统电路 PCB (12) 3.表一:元器件清单 (13) 4.时钟程序源码 (14)

题目:单片机电子时钟的设计与实现 课程设计的目的和意义 课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。 课程设计的基本任务 利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。 主要功能要求 最基本要求 1)使用MCS-51单片机设计一个时钟。要求具有6位LED显示、3个按键输入。 2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。 3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。开始计时时为000000,到235959后又变成000000。 4)使用3个键分别作为小时、分、秒的调校键。每按一次键,对应的显示值便加1。分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。在调校时均不向上一单位进位 (例如分加到59后变为00,但小时不发生改变)。 5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。 6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。7)掌握硬件和软件联合调试的方法。 8)完成系统硬件电路的设计和制作。 9)完成系统程序的设计。 10)完成整个系统的设计、调试和制作。

单片机课程设计报告

课程设计报告 课程名称单片机原理及应用 设计题目电子琴的设计 专业班级自动化1142 姓名周太永 学号1104421242 指导教师蔡长青张卓 起止时间2014.6.23-2014.7.11 成绩评定 考核内容设计 表现 设计 报告 答辩 综合 评定 成绩 电气与信息学院

2013/2014学年第二学期 《单片机控制系统设计与调试》课程设计任务书 指导教师:蔡长青班级:自动化1141、2班 地点:机房、单片机实验室(实训中心415) 课程设计题目:基于单片机原理的电子琴设计 一、课程设计目的 1.灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计, 到PCB制版,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。 2.能够上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。 3.独立完成一个小的系统设计,从硬件设计到软件设计,增强分析问题、解决问 题的能力,为日后的毕业设计及科研工作奠定良好的基础。 二、课程设计内容(包括技术指标) 1.焊接。认真、仔细,避免缺焊、漏焊。 2.频率计算。会计算脉冲值与频率的关系。 3.工作过程。开机时,第一步是对定时器T0进行初始化,设定它的工作状态(对 于本系统将T0设定为工作方式0);然后判断是否有键按下,如果没有按键按下,继续判断,如果有按键按下,则判断是哪个键按下;再根据按键的功能将计数初值装入定时器T0中中并启动T0,当T0定时完毕后,重新装入计数初值继续定时并将P3.3取反,再次定时完毕后再一次的装入计数初值 继续定时并将P3.3取反,一直循环此操作直到按键释放为止,按键释放后 停止T0工作并再次判断是否又有按键按下,并继续执行以前的过程。 三、时间安排 1.布置任务、查资料1天 2.硬件电路图设计及PCB制版3天 3.硬件电路图及PCB制版验收、电路板焊接1天 4.软件编程设计3天 5.系统调试3天 6.调试验收1天 7.完成设计报告3天 四、基本要求 1.画出硬件电路图,完成PCB制版; 2.画出软件流程图,编写程序(C51语言/汇编语言); 3.完成系统调试; 4.提交设计报告。

STC12C5A60S2单片机课程设计报告

一、课程设计基本情况介绍 1.1课程设计的基本目的与任务 本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。本实践课所要达到的主要目的是: 1、通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机 应用系统设计与防震能力。 2、本次课程设计是在生产实习所完成的“单片机核心板+电子钟模块+MP3模块+RFID模块+无线传输模块+GPS模块+脉搏传感模块”的基础上设计该硬件系统的工作程序。 1.2课程设计的基本内容 1、在生产实习设计单片机硬件系统的基础上,设计相应的应用软件系统。 2、在LCD1602上显示学号程序设计。 3、基于DS1302的实时时钟软件设计。 4、基于DS18B20的温度测量软件设计。 5、基于TL1838A的红外遥控解码软件设计。 6、设计应用软件系统框图和流程图,完成所设计软件的调试。 1.3课程设计的教学要求 1、通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调 试技巧。 2、独立设计并编写下列应用程序: (1)LCD1602学号显示程序; (2)DS1302实时时钟程序; (3)DS18B20温度测量程序; (4)TL1838A红外遥控解码程序; 3、独立完成所设计程序与硬件系统的联机仿真。 二、整机系统框图(硬件、软件) 该设计方案是以STC12C5A60S2单片机为核心,采用LCD液晶屏幕显示模块、实时时钟模块、温度测量模块、红外遥控解码等模块所构建的系统,能在LCD1602液晶屏上显示当前的日期(年、月、日)、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。 1、总体硬件设计框架图: 2、总体软件设计框架图 /////// 三、整机硬件电路原理图(见99SE图) 1、核心板电路原理图 2、蜂鸣器驱动电路 3、按键电路 4、单片机复位电路 5、LCD1602液晶显示电路 6、电子钟模块接口电路 四、软件系统设计思想 //////////// 五、系统软件资源分配表(调试程序、工作程序) ////////////// 六、显示学号的调试程序流程图、程序源代码

51单片机课程设计

课程设计说明书
课程设计名称






学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日

课程设计任务书
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。

单片机课程设计报告模板

单片机系统课程设计报告 专业:自动化 学生姓名: 学号: 指导教师: 完成日期:2011 年 3 月17 日

目录 1 设计任务和性能指标 (3) 1.1设计任务............................................................................ 错误!未定义书签。 2 设计方案 (4) 2.1任务分析 (4) 2.2方案设计 (4) 3 系统硬件设计 (5) 3.1时钟的电路设计 (5) 3.2复位电路设计 (5) 3.3灯控电路设计 (5) 3.4倒计时电路设计 (6) 3.5按键控制电路设计 (7) 4 系统软件设计 (8) 4.11秒定时 (8) 4.2定时程序流程 (8) 4.3交通灯的设计流程图 (9) 4.4定时器0与中断响应 (10) 5 仿真及性能分析 (10) 5.1仿真结果图 (11) 5.2仿真结果与分析 (12) 6 心得体会 (13) 参考文献 (14) 附录1 系统原理图 (15) 附录2 系统PCB图 .................................................................. 错误!未定义书签。附录3 程序清单 (17)

1.1设计任务 利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。如图5.1所示。设东西向为主干道,南北为支干道。 图5.1 交通灯示意图 1. 基本要求 (1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干 道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 (2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒, 支干道每次放行20秒,设立30秒、20秒计时、显示电路。 (3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。 黄灯亮时,原红灯按1Hz 的频率闪烁。 (4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。 2. 选做 (1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆 禁行而行人通行状态,即主干道和支干道均为红灯亮。 (2) 实现绿波带。所谓‘绿波带’,是指在一定路段,只要按照规定时速, 就能一路绿灯畅行无阻。“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。 南 北 东 西

单片机课程设计模板2017

课程设计(论文)课程名称单片机应用课程设计 题目 院(系) 专业班级 姓名 学号 指导教师 年月日

西安建筑科技大学课程设计(论文)任务书 专业班级:电子1302 学生姓名:王玖玲指导教师(签名): 一、课程设计(论文)题目 正弦波信号发生器设计 二、本次课程设计(论文)应达到的目的 本次课程设计是自动化专业学生在学习了《单片机原理及应用》课程及《模拟电子线路》、《数字电子线路》等专业基础课程之后进行的一次综合训练,其主要目的是加深学生对单片机软硬件技术和相关理论知识的理解,进一步熟悉51单片机系统设计的基本理论、方法和技能;掌握工程应用的基本内容和要求,力争做到理论与实际的统一;同时培养学生分析问题、解决问题的能力和独立完成系统设计的能力,并按要求编写相关的技术文档和设计报告等。 三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等) 1.设计内容 (1)选择51单片机,晶振采用12MHz。 (2)设计一个能产生0至50HZ正弦波信号。通过0832D/A芯片完成数模转换。 (3)频率值由键盘输入。 (4)将频率值由LED数码管上显示(两位)。 2.设计要求 (1)按照任务书的要个求完成系统分析及方案设计。 (2)完成硬件原理图的设计,并选择相关元器件。 (3)完成控制软件流程图的设计,编写相应的单片机控制程序。 (4)撰写设计报告。 3. 成果要求 (1)在proteus中实现仿真。 (2)提交课程设计报告。 四、应收集的资料及主要参考文献: 1.李建忠.单片机原理及应用.西安电子科技大学出版社,2008 2.杨居义.单片机课程设计指导.清华大学出版社,2009 3.李海滨等.单片机技术课程设计与项目实例.中国电力出版社,2009 以及与51系列单片机相关的文献及教材。 五、审核批准意见 教研室主任(签字)

单片机课程设计报告书----电子秤

一、设计任务及要求: 设计任务: 完成一个简单的使用数字电子秤的硬件与软件部分的设计。 设计要求: 1.利用单片机实现对所设计的电子秤的各项功能的控制。 2.电子秤能够LCD液晶显示出商品的名称、价格,重量、总价等信息。 3.电子秤具有储存几种简单商品价格的功能。 4.电子秤的测量范围要求达到5KG,测量精度要求达到0.001。 5.电子秤能够自动完成商品的价格计算。 指导教师签名: 2010 年6月16 日二、指导教师评语: 指导教师签名: 2010 年7月3日三、成绩 验收盖章 2010 年7 月日

基于单片机的实用电子秤的设计 1 设计目的 单片机以其功能强,体积小,功耗低,易开发等很多优势被广泛应用。本 次数字电子秤的设计就是需要通过选择合适的单片机来进行主控,再结合A/D 转换、键盘、液晶显示、复位电路和蜂鸣器报警驱动电路的知识,同时在软件 的设计过程中用到键盘扫描、液晶显示驱动、模数转换程序及汉字库的的设计, 做到对我们所学数电、模电、单片机等知识的综合应用,最终实现所设计数字 电子秤的各项功能,达到“巩固知识,培养技能,学而用之”的实践目的。通过这次课程设计,不但要提高我们在工作中的学习能力、探究能力、应用能力和动 手能力,还要历练我们不畏艰难、不懂便学、有漏必补的认真严谨的工作态度,强化我们的社会适应力和社会竞争力,为走向社会提前试水,完善自我。 2 设计的主要内容及要求 本设计主要完成一个简单实用数字电子秤的硬件电路部分和软件部分的设计。硬件部分包括数据采集、最小系统板、人机交互界面三大部分。其中,数 据采集部分由压力传感器和A/D 转换部分组成;人机界面部分为键盘输入、 液晶显示。软件部分应用单片机 C 语言实现了本设计的全部控制功能。本设 计的数字电子秤要求能够显示商品的名称、价格、总量、总价等;能够自动完 成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能, 一旦重量超出了自身重量的测量的范围,发出警报;同时对数字电子秤的测量 范围要达到5KG,测量精度要求达到0.001。 3 整体设计方案 整个数字电子秤电路由压力传感电路(ADC0832采样)、模数转换系统、单 片机主控制电路、LM4229显示电路、蜂鸣器报警电路和4*4键盘电路6 个部

89C51单片机课程设计之秒表设计实验报告

单片机课程设计报告 单 片 机 秒 表 系 统 课 程 设 计 班级: 课程名称:秒表设计 成员: 实训地点:北校机房 实训时间:6月4日至6月15日

目录 1课程设计的目的和任务 1.1 单片机秒表课程设计的概述 1.2课程设计思路及描述 1.3 课程设计任务和要求 2硬件与软件的设计流程 2.1系统硬件方案设计 2.2所需元器件 3 程序编写流程及课程设计效果 3.1源程序及注释 3.2原理图分析 3.3课程设计效果 4 心得体会

1. 课程设计的目的和任务 1.1单片机秒表课程设计的概述 一、课程设计题目 秒表系统设计——用STC89C51设计一个4位LED数码显示“秒表”,显示时间为000.0~9分59.9秒,每10毫秒自动加一,每1000毫秒自动加一秒。 二、增加功能 增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。 三、课程设计的难点 单片机电子秒表需要解决几个主要问题,一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程;四是如何进行安装调试。 四、课程设计内容提要 本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本课程设计有三个开关按键:其中key1按键按下去时开始计时,即秒表开始键,key2按键按下去时数码管清零,复位为“00.00”. key3按键按下去时数码管暂停。 五、课程设计的意义 1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的 应用进一步的了解。 2)掌握定时器、外部中断的设置和编程原理。 3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。 4)该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统, 拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义 1.2课程设计思路及描述

相关文档
最新文档