单片机的电路原理

单片机的电路原理 单片机技术自发展以来已走过了近20年的发展路程 。单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。小到遥控电子玩具,大到航空航天技术等电子行业都有单片机应用的影子。针对单片机技术在电子行业自动化方面的重要应用,为满足广大学生、爱好者、产品开发者迅速学会掌握单片机这门技术,于是产生单片机实验板普遍称为单片机开发板、也有单片机学习板的称呼。比较有名的例如电子人DZR-01A单片机开发板。

单片机开发板是用于学习51、STC、AVR型号的单片机实验设备。根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。例如电子人单片机开发板,针对部分学者需要特别配套有VB上位机软件开发,游戏开发等教程学习资料。开发此类单片机开发板的公司一般提供完善的售后服务与技术支持。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。

而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。高端的32位Soc单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。

常见配套资源如下:

1、硬件实验板及其配件如:连接线、CPU芯片、流水灯、点阵显示、ds18b20温度检测、彩色TFT液晶屏,SD卡,游戏开发(推箱子游戏)、收音机、mp3解码等。

2、实验程序源码,包含汇编源程序、C语言源程序。

3、电路原理图、PCB电路图。

4、实验手册、使用手册。

5、针对单片机开发板的详细讲解视频。

6、附加PCB设计制作、VB软件开发等计算机学习资料

1、8个LED灯,可以练习基本单片机IO操作,在其他程序中可以做指示灯使用。

2、2个四联8段数码管,显示温度数据,HELLO欢迎词、时钟等。

3、高亮8*8点阵,如练习数字,字母,图片显示,或者小游戏的开发如贪吃蛇等。 4、4个独立按键,可以配置为中断键盘,为程序的按键扫描节省更多的时间。

5、8个AD按键,主要设计为游戏开发如推箱子等,去掉了矩阵键盘,AD键盘在实际中的应用相当广泛,如电视机加减搜台等都是采用AD键盘,一根AD线可以扩展几百个按键,更接近工程。

6、PCF8591具有AD/DA功能,其采用IIC总线协议,可练习IIC总线的操作。

7、DS18B20温度检测:单线多点检测支持。

8、光敏电阻测试光线强度,感受白天黑夜的区别。

9、FM收音机:能接收80M到110MHz之间的FM频段。可实现自动搜台和手动搜台。

10、DS1302时钟芯片提供实时时钟,带3V电池,在掉电的情况下,时钟仍然可以继续运行。

11、可读写SD卡文件系统,保存数据显示到TFT液晶屏等。

12、继电器可以控制高电压的设备,高压危险,请小心使用。

13、直流电机接口,控制直流电机。

14、步进电机接口,控制步进电机运行。

15、蜂鸣器,可以做电子琴、音乐发声等。

16、74HC595芯片练习串行转并行数据扩展。

17、74HC573锁存扩展芯片,可以扩展接口。

18、ULN2003电机驱动芯片。(这里用它来驱动步进电机,直流电机,继电器和蜂鸣器)

19、MAX232串口数据传输延长发送距离。(可与计算机通信,同时也可做为STC单片机下载程序的接口) 20、PL2303下载单片机,一线下载,直接的USB下载方式,高速下载。

21、TFT液晶屏,单片机也可以控制彩屏了,让你的学习充满乐趣

22、nRF24L01无线数据传输芯片接口,可以插nRF24L01芯片,做高速无线数据传输。

23、LCD1602液晶接口,字符液晶两行,每行可以显示16个字符。

24、LCD12864带字库液晶接口。

25、LCD12864图形液晶接口。

26、DS18B20单线多点温度采集接口。一根线上便可拓展多个DS18B20温度传感器,先提供两个。

27、提供ISP下载接口,可下载AVR、AT的单片机。支持AVR单片机。

28、40针扩展接口,可以无限扩展。以后的DZR-01A开发板配件将从此端口扩展出去。

29、PS2鼠标键盘接口。配合红外遥控器甚至可以遥控我们的电脑!(配例程)

30、AVR/51复位按键。可以复位51 STC AVR单片机,全部支持

31、TEA5767的IIC总线控制。学习IIC控制

32、SD卡的SPI总线控制。扩展大容量存储器

33、红外遥控接收器,可采集红外遥控发出的信号,可使用遥控信号控制其他设备。

34、外接5V供电电源座。

35、RXD、TXD、POWER电源指示灯

36、40PIN紧锁座(非常方便单片机芯片的取放)

37、带LM1117-3.3稳压芯片(为彩屏液晶,SD卡和无线模块供电)

38、USB供电(USB可以提供500MA的电流,完全能满足开发板的需求了)

39、预留电源+5V,GND

接口各四个(方便用户扩展其他外围电路时取电和共地)

学习51单片机必须做大量的实验,与其说51单片机是学出来的,倒不如说51单片机是“玩”出来的。就好像个人电脑一样,让你在那看十天使用说明不如你亲自玩一天收获大。为了方便大家做一些51单片 http://www.fulinmenst.com/ccgx/index.html 机的入门实验,制作了这块51单片机实验板。 该51单片机实验板,支持AT89C51、AT89C52、AT89S51、AT89S52这四款51单片机进行实验。它由DS1302、DS18B20、AT24CXX(可以更换AT24C02、AT24C04、AT24C16等存储容量大小不同的EEPROM)、蜂鸣器、继电器、六个数码管、四个发光二极管、一个四乘四的矩阵键盘、四个独立按键、一个1602液晶接口等组成。如下图所示:

电路图左上角的接口如下:

该实验板利用7805构成了自己的稳压电路,为该实验板提供 +5V

的稳压电源。其电路图如下:

说明:J4为心为负电压的DC插座;J5为接正电压的针脚;J6为接负电压的针脚;J9为接+5V的针脚。

实验板上硬件连接

利用短路帽,使P2口的P20至P25分别与数码管的位选1至6依次连接,用于控制选通哪一个数码管亮;使P0口的P00至P07分别与数码管的段码SM1至SM8依次连接,用于输出相应的段码。

数字 0 1 2 3 4 5 6 7 8 9 段码

c0

f9

a4 b0 99 92 82 f8 80

90 - 5 -

四、 源程序

#include #include #define unchar unsigned char #define unint unsigned int

/*****************************定义端口*****************************/ #define smg P2 //利用P2_0到P2_5由右向左依次选择要显示的数码管 #define dm P0 //利用P0口输出段码

/***************************************************************** 函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255 入口参数:n 出口参数:

*****************************************************************/ void delay_smg(unchar n) {

do{

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--;

}while(n); }

/***************************************************************** 函数功能:显示六位数以内的正整数,最高位不显示零 入口参数:dat 出口参数:

*****************************************************************/ void xianshi_smg(unsigned long dat) {

bit flag=0; //标志位

unchar i=0; //确定所给正整数为几位数

unchar shu[6]; //由0至5依次存放所给正整数的由高到低各位上的数 unchar code code0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,

0x90};//将数码管的段码定义到程序存储区

unchar j,k;

unsigned long n;

- 6 -

for(j=0,n=100000;j

{ shu[j]=dat/n;

if(shu[j]!=0||flag==1) //flag初值为0。shu[j]不为0时,if语句

{ //成立,i增加1,flag置1。无论shu[j] i++; //为何值,if语句皆成立。故,可完成i flag=1; //记录所给正整数为几位数的功能。但,所 } //给正整数若为零,会出现i为0这种情况,

dat=dat%n; //故,需在最后判断i是否为0。若i为0,

} //需将i置1。 if(i==0)

i=1; for(j=1,k=0xfe;j

smg=k; dm=code0[shu[6-j]]; delay_smg(100); k=~k; k=k

while(1) //循环显示0、3、145、30705、860922这五个正整 { //数,以检验所编写的显示函数。 for(()j=0;j

) xianshi_smg(0); for(j=0;j

4×4矩阵式键盘识别实验

实验任务

用51单片机的P1口接4×4矩阵键盘;在数码管上显示每个按键的“0”至“F”序号。对应的按键的序号排列如下图所示 :

电路原理图

实验板上硬件连接

利用短路帽,使P1口的P10至P17与4×4矩阵键盘的ZJ1至ZJ8依次连接,完成51单片机与矩阵键盘的连接;使P0口的P00至P07分别与数码管的段码SM1至SM8依次连接,用于输出相应的段码;使P2口的P20与数码管的位选1连接,利用一个数码管静态显示即可完成实验。 四、源程序

#include #include

#define unchar unsigned char #define unint unsigned int

/****************************定义端口*******************************/ #define m1 P1_3 #define m2 P1_2 #define m3 P1_1

#define m4 P1_0 //m1至m4分别对应实验板由上到下对应的行 #define n1 P1_4 #define n2 P1_5 #define n3 P1_6

#define n4 P1_7 //n1至n2分别对应实验板由左向右对应的列

/******************************************************************** 函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255 入口参数:n 出口参数:

********************************************************************/ void delay_jzaj(unchar n) { do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--;

}while(n); } - 9 -

/******************************************************************** 函数功能:按矩阵键盘上的16个按键使最右边的数码管显示由0到F这16个数 入口参数: 出口参数: ********************************************************************/ void keyscan(void) {unchar m,n,a,b,c,d; m1=0; m2=0; m3=0; m4=0; if(n1==0||n2==0||n3==0||n4==0) { delay_jzaj(50); if(n1==0||n2==0||n3==0||n4==0) { a=n1; b=n2; c=n3; d=n4; switch(a*1000+b*100+c*10+d) { case 111: n=1;break; case 1011:n=2;break; case 1101:n=3;break; case 1110:n=4;break; default:break; } } } m1=1; m2=1; m3=1; m4=1; n1=0; n2=0; n3=0; n4=0; if(m1==0||m2==0||m3==0||m4==0) { delay_jzaj(50); if(m1==0||m2==0||m3==0||m4==0) { a=m1; - 10 -

b=m2; c=m3; d=m4;

switch(a*1000+b*100+c*10+d) {

case 111: m=1;break;

case 1011:m=2;break; case 1101:m=3;break; case 1110:m=4;break;

default:break;

}

} }

while(m1==0||m2==0||m3==0||m4==0); //直至按键松开此循环结束 n1=1; n2=1; n3=1; n4=1;

switch(10*m+n) {

case 11:P0=0xc0;break; //显示"0"

case 12:P0=0xf9;break; //显示"1" case 13:P0=0xa4;break; //显示"2" case 14:P0=0xb0;break; //显示"3" case 21:P0=0x99;break; //显示

"4" case 22:P0=0x92;break; //显示"5" case 23:P0=0x82;break; //"6" case 24:P0=0xf8;break; //显示"7" case 31:P0=0x80;break; //"8" case 32:P0=0x90;break; //显示"9" case 33:P0=0x88;break; //"A" case 34:P0=0x83;break; //显示"b" case 41:P0=0xc6;break; //"C" case 42:P0=0xa1;break; //显示"d" case 43:P0=0x86;break; //"E" case 44:P0=0x8e;break; //显示"F" default:break;

} }

/******************************主函数*******************************/ main() { P2=0xfe; //选择最右边的那个数码管 while(1) keyscan() 显显显显显示示示示示

单片机的电路原理 单片机技术自发展以来已走过了近20年的发展路程 。单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出较微处理器更具个性的发展趋势。小到遥控电子玩具,大到航空航天技术等电子行业都有单片机应用的影子。针对单片机技术在电子行业自动化方面的重要应用,为满足广大学生、爱好者、产品开发者迅速学会掌握单片机这门技术,于是产生单片机实验板普遍称为单片机开发板、也有单片机学习板的称呼。比较有名的例如电子人DZR-01A单片机开发板。

单片机开发板是用于学习51、STC、AVR型号的单片机实验设备。根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。例如电子人单片机开发板,针对部分学者需要特别配套有VB上位机软件开发,游戏开发等教程学习资料。开发此类单片机开发板的公司一般提供完善的售后服务与技术支持。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。

而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。高端的32位Soc单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。

常见配套资源如下:

1、硬件实验板及其配件如:连接线、CPU芯片、流水灯、点阵显示、ds18b20温度检测、彩色TFT液晶屏,SD卡,游戏开发(推箱子游戏)、收音机、mp3解码等。

2、实验程序源码,包含汇编源程序、C语言源程序。

3、电路原理图、PCB电路图。

4、实验手册、使用手册。

5、针对单片机开发板的详细讲解视频。

6、附加PCB设计制作、VB软件开发等计算机学习资料

1、8个LED灯,可以练习基本单片机IO操作,在其他程序中可以做指示灯使用。

2、2个四联8段数码管,显示温度数据,HELLO欢迎词、时钟等。

3、高亮8*8点阵,如练习数字,字母,图片显示,或者小游戏的开发如贪吃蛇等。 4、4个独立按键,可以配置为中断键盘,为程序的按键扫描节省更多的时间。

5、8个AD按键,主要设计为游戏开发如推箱子等,去掉了矩阵键盘,AD键盘在实际中的应用相当广泛,如电视机加减搜台等都是采用AD键盘,一根AD线可以扩展几百个按键,更接近工程。

6、PCF8591具有AD/DA功能,其采用IIC总线协议,可练习IIC总线的操作。

7、DS18B20温度检测:单线多点检测支持。

8、光敏电阻测试光线强度,感受白天黑夜的区别。

9、FM收音机:能接收80M到110MHz之间的FM频段。可实现自动搜台和手动搜台。

10、DS1302时钟芯片提供实时时钟,带3V电池,在掉电的情况下,时钟仍然可以继续运行。

11、可读写SD卡文件系统,保存数据显示到TFT液晶屏等。

12、继电器可以控制高电压的设备,高压危险,请小心使用。

13、直流电机接口,控制直流电机。

14、步进电机接口,控制步进电机运行。

15、蜂鸣器,可以做电子琴、音乐发声等。

16、74HC595芯片练习串行转并行数据扩展。

17、74HC573锁存扩展芯片,可以扩展接口。

18、ULN2003电机驱动芯片。(这里用它来驱动步进电机,直流电机,继电器和蜂鸣器)

19、MAX232串口数据传输延长发送距离。(可与计算机通信,同时也可做为STC单片机下载程序的接口) 20、PL2303下载单片机,一线下载,直接的USB下载方式,高速下载。

21、TFT液晶屏,单片机也可以控制彩屏了,让你的学习充满乐趣

22、nRF24L01无线数据传输芯片接口,可以插nRF24L01芯片,做高速无线数据传输。

23、LCD1602液晶接口,字符液晶两行,每行可以显示16个字符。

24、LCD12864带字库液晶接口。

25、LCD12864图形液晶接口。

26、DS18B20单线多点温度采集接口。一根线上便可拓展多个DS18B20温度传感器,先提供两个。

27、提供ISP下载接口,可下载AVR、AT的单片机。支持AVR单片机。

28、40针扩展接口,可以无限扩展。以后的DZR-01A开发板配件将从此端口扩展出去。

29、PS2鼠标键盘接口。配合红外遥控器甚至可以遥控我们的电脑!(配例程)

30、AVR/51复位按键。可以复位51 STC AVR单片机,全部支持

31、TEA5767的IIC总线控制。学习IIC控制

32、SD卡的SPI总线控制。扩展大容量存储器

33、红外遥控接收器,可采集红外遥控发出的信号,可使用遥控信号控制其他设备。

34、外接5V供电电源座。

35、RXD、TXD、POWER电源指示灯

36、40PIN紧锁座(非常方便单片机芯片的取放)

37、带LM1117-3.3稳压芯片(为彩屏液晶,SD卡和无线模块供电)

38、USB供电(USB可以提供500MA的电流,完全能满足开发板的需求了)

39、预留电源+5V,GND

接口各四个(方便用户扩展其他外围电路时取电和共地)

学习51单片机必须做大量的实验,与其说51单片机是学出来的,倒不如说51单片机是“玩”出来的。就好像个人电脑一样,让你在那看十天使用说明不如你亲自玩一天收获大。为了方便大家做一些51单片 http://www.fulinmenst.com/ccgx/index.html 机的入门实验,制作了这块51单片机实验板。 该51单片机实验板,支持AT89C51、AT89C52、AT89S51、AT89S52这四款51单片机进行实验。它由DS1302、DS18B20、AT24CXX(可以更换AT24C02、AT24C04、AT24C16等存储容量大小不同的EEPROM)、蜂鸣器、继电器、六个数码管、四个发光二极管、一个四乘四的矩阵键盘、四个独立按键、一个1602液晶接口等组成。如下图所示:

电路图左上角的接口如下:

该实验板利用7805构成了自己的稳压电路,为该实验板提供 +5V

的稳压电源。其电路图如下:

说明:J4为心为负电压的DC插座;J5为接正电压的针脚;J6为接负电压的针脚;J9为接+5V的针脚。

实验板上硬件连接

利用短路帽,使P2口的P20至P25分别与数码管的位选1至6依次连接,用于控制选通哪一个数码管亮;使P0口的P00至P07分别与数码管的段码SM1至SM8依次连接,用于输出相应的段码。

数字 0 1 2 3 4 5 6 7 8 9 段码

c0

f9

a4 b0 99 92 82 f8 80

90 - 5 -

四、 源程序

#include #include #define unchar unsigned char #define unint unsigned int

/*****************************定义端口*****************************/ #define smg P2 //利用P2_0到P2_5由右向左依次选择要显示的数码管 #define dm P0 //利用P0口输出段码

/***************************************************************** 函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255 入口参数:n 出口参数:

*****************************************************************/ void delay_smg(unchar n) {

do{

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--;

}while(n); }

/***************************************************************** 函数功能:显示六位数以内的正整数,最高位不显示零 入口参数:dat 出口参数:

*****************************************************************/ void xianshi_smg(unsigned long dat) {

bit flag=0; //标志位

unchar i=0; //确定所给正整数为几位数

unchar shu[6]; //由0至5依次存放所给正整数的由高到低各位上的数 unchar code code0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,

0x90};//将数码管的段码定义到程序存储区

unchar j,k;

unsigned long n;

- 6 -

for(j=0,n=100000;j

{ shu[j]=dat/n;

if(shu[j]!=0||flag==1) //flag初值为0。shu[j]不为0时,if语句

{ //成立,i增加1,flag置1。无论shu[j] i++; //为何值,if语句皆成立。故,可完成i flag=1; //记录所给正整数为几位数的功能。但,所 } //给正整数若为零,会出现i为0这种情况,

dat=dat%n; //故,需在最后判断i是否为0。若i为0,

} //需将i置1。 if(i==0)

i=1; for(j=1,k=0xfe;j

smg=k; dm=code0[shu[6-j]]; delay_smg(100); k=~k; k=k

while(1) //循环显示0、3、145、30705、860922这五个正整 { //数,以检验所编写的显示函数。 for(()j=0;j

) xianshi_smg(0); for(j=0;j

4×4矩阵式键盘识别实验

实验任务

用51单片机的P1口接4×4矩阵键盘;在数码管上显示每个按键的“0”至“F”序号。对应的按键的序号排列如下图所示 :

电路原理图

实验板上硬件连接

利用短路帽,使P1口的P10至P17与4×4矩阵键盘的ZJ1至ZJ8依次连接,完成51单片机与矩阵键盘的连接;使P0口的P00至P07分别与数码管的段码SM1至SM8依次连接,用于输出相应的段码;使P2口的P20与数码管的位选1连接,利用一个数码管静态显示即可完成实验。 四、源程序

#include #include

#define unchar unsigned char #define unint unsigned int

/****************************定义端口*******************************/ #define m1 P1_3 #define m2 P1_2 #define m3 P1_1

#define m4 P1_0 //m1至m4分别对应实验板由上到下对应的行 #define n1 P1_4 #define n2 P1_5 #define n3 P1_6

#define n4 P1_7 //n1至n2分别对应实验板由左向右对应的列

/******************************************************************** 函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255 入口参数:n 出口参数:

********************************************************************/ void delay_jzaj(unchar n) { do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--;

}while(n); } - 9 -

/******************************************************************** 函数功能:按矩阵键盘上的16个按键使最右边的数码管显示由0到F这16个数 入口参数: 出口参数: ********************************************************************/ void keyscan(void) {unchar m,n,a,b,c,d; m1=0; m2=0; m3=0; m4=0; if(n1==0||n2==0||n3==0||n4==0) { delay_jzaj(50); if(n1==0||n2==0||n3==0||n4==0) { a=n1; b=n2; c=n3; d=n4; switch(a*1000+b*100+c*10+d) { case 111: n=1;break; case 1011:n=2;break; case 1101:n=3;break; case 1110:n=4;break; default:break; } } } m1=1; m2=1; m3=1; m4=1; n1=0; n2=0; n3=0; n4=0; if(m1==0||m2==0||m3==0||m4==0) { delay_jzaj(50); if(m1==0||m2==0||m3==0||m4==0) { a=m1; - 10 -

b=m2; c=m3; d=m4;

switch(a*1000+b*100+c*10+d) {

case 111: m=1;break;

case 1011:m=2;break; case 1101:m=3;break; case 1110:m=4;break;

default:break;

}

} }

while(m1==0||m2==0||m3==0||m4==0); //直至按键松开此循环结束 n1=1; n2=1; n3=1; n4=1;

switch(10*m+n) {

case 11:P0=0xc0;break; //显示"0"

case 12:P0=0xf9;break; //显示"1" case 13:P0=0xa4;break; //显示"2" case 14:P0=0xb0;break; //显示"3" case 21:P0=0x99;break; //显示

"4" case 22:P0=0x92;break; //显示"5" case 23:P0=0x82;break; //"6" case 24:P0=0xf8;break; //显示"7" case 31:P0=0x80;break; //"8" case 32:P0=0x90;break; //显示"9" case 33:P0=0x88;break; //"A" case 34:P0=0x83;break; //显示"b" case 41:P0=0xc6;break; //"C" case 42:P0=0xa1;break; //显示"d" case 43:P0=0x86;break; //"E" case 44:P0=0x8e;break; //显示"F" default:break;

} }

/******************************主函数*******************************/ main() { P2=0xfe; //选择最右边的那个数码管 while(1) keyscan() 显显显显显示示示示示


相关文章

  • 单片机原理与接口技术实验室方案
  • 单片机原理与接口技术实验室方案 一.前言 单片机是当今电子信息产业发展最迅速的领域,大学单晶片教学和实验应该适应这样的变化,本方 案是针对单片机原理课程为主的单片机原理与接口技术 单片机原理与接口技术实验室的设备配置,从基础课程建设开始,对 ...查看


  • 2013全国电子大赛论文
  • 2013全国电子设计大赛瑞萨杯 2013年全国大学生电子设计竞赛 简易旋转倒立摆控制及控制装置( [本科组] 2013年9月4日 C题) 摘 要 旋转倒立摆是一个具有多变量.高阶.非线性.强耦合等系统特性的本征不稳定系统,涉及有关力学.数学 ...查看


  • 1602电子时钟电路_原理图_PCB图
  • XXXXX学院 电 子 线 路 课 程 设 计 [带LCD显示的电子时钟] 班级:XX 姓名:XX 学号:XX 指导老师:XX XX年XX月XX 日 摘要 在当代繁忙的学习与生活中,数字钟已成为人们日常生活中必不可少的 必需品,被广泛用于个 ...查看


  • 单片机应用技术实训报告
  • 单片机应用技术 课程设计 学 生 姓 名: 学 号: [**************] 年级/专业/班: 2011级机电 2 班 学 院: 应用技术学院 指 导 教 师: 黄惟公 2013年1月 目 录 任务书 1 单片机多功能测试板的设计 ...查看


  • 采用单片机设计频率计_毕业设计论文
  • 毕业设计论文 采用单片计设计频率计 系 专业 班级指导教师 职称 讲师 设计时间 目录 摘 要 ........................................................................ ...查看


  • 单片机复位电路原理
  • 单片机复位电路原理 复位电路的作用 在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令.执行错误操作,也可以提高电磁兼容性能. 无论用户使用哪种类型的单片机,总 ...查看


  • 基于单片机的防盗报警器课程设计(改良版)
  • 目 录 摘要·································································· 1 引言··········································· ...查看


  • 基于51单片机的红外遥控控制电机转速设计
  • 摘 要 本文首先描述了红外线通信原理和红外线接收电路,其次,介绍了直流电机的结构和工作原理,然后,详细的阐述了单片机内部结构及其原理,最后,着重介绍了PWM调速和直流电动机正转,反转和制动的原理. 直流电机具有良好的调速特性.调速简单,平滑 ...查看


  • 基于单片机银行排队叫号系统设计
  • 河北工业大学本科毕业设计(论文)中期报告 毕业设计(论文)题目:基于单片机银行排队叫号系统设计 专业(方向):电子信息工程 学 生 信 息: 学号: 姓名: 班级: 指导教师信息: 姓名: 职称: 告提交日期:2014年4月4日- -201 ...查看


  • 单片机危险气体报警器说明书
  • <单片机技术>课程设计说明书 危险气体报警器 湖南工学院<单片机技术>课程设计课题任务书 学院:电气与信息工程学院 专业:电气工程及其自动化 危险气体报警器通过监测气体的浓度来实现火灾防范,可以完成可燃性气体和有毒气 ...查看


热门内容