TX-1C 单片机开发板实验
- 格式:pdf
- 大小:1.85 MB
- 文档页数:24
简单51单片机开发板的电路设计51单片机开发板电路设计详细步骤及说明如下:一、准备工作1.定义开发板功能需求:根据具体需求确定开发板所需的功能模块,如AD转换、LCD显示、键盘输入等。
2.确定系统时钟源:选择合适的晶振,并确定时钟源用于驱动单片机。
二、电源设计1.选择适当的电源电压:根据单片机的工作电压范围选择合适的电源电压,并设计电源电路。
2.设计稳压电路:根据电源要求设计合适的稳压电路,保证单片机工作时电压稳定。
三、时钟电路设计1.选择合适的晶振:根据系统时钟需求选择合适的晶振,并设计相应的晶振电路。
2.设计时钟源电路:根据晶振的工作参数设计合适的时钟源电路,确保时钟信号稳定且频率准确。
四、复位电路设计1.根据单片机复位要求设计复位电路,保证单片机正常复位。
2.设计复位延时电路:根据需要设计复位延时电路,保证单片机复位后稳定运行。
五、外部IO电路设计1.根据开发板需求,设计并布局合适的IO接口电路,如LED指示灯、按键输入接口等。
2.设计并连接AD转换电路:根据需求设计和连接AD转换电路,实现模拟信号的采集和处理。
六、通信接口电路设计1.根据需求设计并连接串口接口电路,实现与其他设备的通信。
2.根据需要设计并连接其他通信接口电路,如SPI、I2C等。
七、存储器电路设计1.根据需求设计并连接存储器电路,如RAM、ROM等。
2.根据需要设计和连接外部存储器接口电路,实现扩展存储器的功能。
八、电路调试与优化1.完成电路设计后,进行电路连线、焊接等工作,并检查和修正可能存在的错误。
2.进行电路测试并优化,确保电路正常工作,并根据需要进行性能优化。
九、布局设计与外壳制作1.进行电路板的布局设计,合理安排各个模块的位置。
2.制作外壳和连接线,并进行电路板的安装。
最后,完成电路设计之后,可以进行软件编程和调试,将单片机与外设模块进行连接和通信,实现开发板的各项功能。
51单片机实验手册一、概述51单片机是一种经典的8位微控制器,具有广泛的应用领域。
本实验手册旨在提供详细的实验指导,帮助初学者快速入门,并为进一步的学习提供基础。
二、实验准备在进行51单片机实验之前,我们需要准备以下材料:1. 一块51单片机开发板2. USB数据线或者串口线3. 电脑及编程软件4. 面包板及对应的连接线5. 红、绿、蓝LED以及相应的电阻三、实验一:LED闪烁LED闪烁是最基础的实验之一,通过控制51单片机的I/O口状态,使LED灯交替亮灭。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将LED的长脚连接到P1.0引脚,短脚连接到GND引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>void main() {while(1) {P1 = 0x00; // P1置低电平,LED灯熄灭Delay(1000); // 延时1秒P1 = 0xFF; // P1置高电平,LED灯点亮Delay(1000); // 延时1秒}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
4. 运行实验将USB数据线或串口线连接到51单片机开发板和电脑,将开发板上的开关打开,观察LED灯的闪烁情况。
四、实验二:数码管显示通过控制51单片机的I/O口状态,驱动数码管显示数字。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将数码管的A、B、C、D、E、F、G引脚分别连接到P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>unsigned char code segment[] = { // 数码管段码表0x3F, // 数字00x06, // 数字10x5B, // 数字20x4F, // 数字30x66, // 数字40x6D, // 数字50x7D, // 数字60x07, // 数字70x7F, // 数字80x6F // 数字9};void main() {unsigned int i;while(1) {for(i = 0; i < 10; i++) {P1 = segment[i]; // 依次在数码管上显示数字0-9 Delay(1000); // 延时1秒}}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
一时兴起所做,基于TX-1C开发板。
内包含二极管、发光管、内部中断、独立按键等知识点。
简要操作说明b1-b4对应开发板四个独立按键。
启动之后b1进入计时器,同时计时开始。
进入计时器之后b2可以暂停计时、b3可以记录成绩。
对应发光管上依次是分个位,秒十位,秒个位、毫秒百位、毫秒十位、毫秒个位。
同时用发光二级管作为分十位的补充,每亮一个发光二级管计十分钟。
按b3记录成绩,针对该程序最多十组成绩。
但由于数码管位数,仅能精确到100毫秒。
在计时中可按b4键退出计时,同样计满十组数据也将强制退出计时部分。
退出计时部分后可按b2进入查看功能,未进行记录成绩之前无法进入该功能。
进入之后按b1、b2切换数据,10号采用A计数(16位),有兴趣的也可以对这部分进行修改、调整。
同样按b4退出该功能。
#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar code weixuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};sbit wela=P2^7;sbit dula=P2^6;sbit b1=P3^4;//声明四个按键sbit b2=P3^5;sbit b3=P3^6;sbit b4=P3^7;sbit beep=P2^3;//蜂鸣器uchar clock[]={0,0};//时钟分秒部分uint clock1ms=0;//毫秒部分uint chengji[10];//成绩记录uchar num=0;//记录十位分钟数uchar renshu=0;//记录人数uchar n=0;//二极管记录十位分钟uchar zanting=0;//计时暂停void delay(uchar ms)//延时函数{uchar n,m;for(n=ms;n>0;n--)for(m=110;m>0;m--);}void clock1()//时间计算{if(zanting==0)//判断是否进行暂停{clock10ms++;if(clock10ms==1000){clock[1]++;clock10ms=0;if(clock[1]==60){clock[0]++;clock[1]=0;}}}}void add()//控制发光二级管显示分钟十位{if(n==0) n=0xfe;else n=n<<1;//采用位操作P1=n;num++;}void warning(uchar n)//蜂鸣器控制,n位次数{uchar i;for(i=0;i<n;i++){beep=0;delay(500);beep=1;}}void display()//计时部分{uchar temp1[6],i;while(1){if(clock[0]==10){clock[0]=0;add();}temp1[0]=clock[0];//分别记录数码管每位显示的数字temp1[1]=clock[1]/10;temp1[2]=clock[1]%10;temp1[3]=clock10ms/100;temp1[4]=clock10ms%100/10;temp1[5]=clock10ms%10;for(i=0;i<6;i++)//将数字显示在数码管上{wela=1;P0=weixuan[i];wela=0;P0=0xff;dula=1;P0=table[temp1[i]];dula=0;delay(3);//稳定在20ms-10ms数码管显示的比较清晰//delay(800);//←调试用的可以无视}if(b2==0)//计时暂停{delay(10);if(b2==0){zanting=~zanting;warning(1);while(b2==0)for(i=0;i<6;i++)//将数字显示在数码管上,防止按下暂停时屏幕显示错误{wela=1;P0=weixuan[i];wela=0;P0=0xff;dula=1;P0=table[temp1[i]];dula=0;delay(3);}}}if(b3==0&&b2!=0)//记录成绩{delay(10);if(b3==0){renshu++;if(renshu==10)//人数计满{warning(3);}chengji[renshu-1]=num*10000+clock[0]*1000+clock[1]*10+clock10ms/100;warning(1);while(b3==0)for(i=0;i<6;i++)//将数字显示在数码管上{wela=1;P0=weixuan[i];wela=0;P0=0xff;dula=1;P0=table[temp1[i]];dula=0;delay(3); /}if(renshu==10) goto loopfinish;}}if(b4==0){delay(10);if(b4==0){warning(1);loopfinish:wela=1;P0=0xff;wela=0;break;}}}}void check()//显示成绩{uint p=0,temp2[6],i;if(renshu==0){warning(3);while(b2==0); goto loopend; }//人数为0则返回,并警报while(1){temp2[0]=p+1;//将数据拆分处理便于显示temp2[1]=chengji[p]/10000;temp2[2]=chengji[p]%10000/1000;temp2[3]=chengji[p]%1000/100;temp2[4]=chengji[p]%100/10;temp2[5]=chengji[p]%10;for(i=0;i<6;i++){wela=1;P0=weixuan[i];wela=0;P0=0xff;dula=1;P0=table[temp2[i]];dula=0;delay(15);}if(b1==0)//选择上一人{delay(10);if(b1==0){wela=1;P0=0xff;wela=0;while(b1==0);if(p==0) p=renshu-1;elsep--;}}if(b2==0)//选择下一人{delay(10);if(b2==0){wela=1;P0=0xff;wela=0;while(b2==0);if(p==renshu-1) p=0;elsep++;}}if(b4==0)//退出{delay(10);if(b4==0){loopend:wela=1;P0=0xff;wela=0;break;}}}}void main(){TMOD=0x01;TH0=(65535-1000)/256;TL0=(65535-10000)%256;EA=1;ET0=1;loopmain:while(1){if(b1==0){delay(10);if(b1==0){while(b1==0);goto loop1;}}if(b2==0){delay(10);if(b2==0){while(b2==0);goto loop2;}}}loop1://计时TR0=1;//while(b1==0);display();zanting=0;while(b4==0);clock10ms=0;clock[0]=0;clock[1]=0;TR0=0;;goto loopmain;loop2://时间查询//while(b2==0);check();while(b4==0);goto loopmain;}void time() interrupt 1//中断服务{clock1();TH0=(65535-1000)/256;TL0=(65535-1000)%256;}。
单片机实验开发板测试程序详解测试程序对于初学者来说可能比较复杂,但是也是由网站上几个小程序组合而成的,初学者可以通过后面教程的学习来掌握这段程序。
这个测试程序的功能是:接通电源后P0口的八个发光二极管依次从下往上点亮,然后蜂鸣器鸣叫一声,两个继电器轮流动作一次,数码管的个位显示8,再换成十位显示8,然后不断循环,如果这时按下红外遥控器的按键时,蜂鸣器立即发出“滴滴滴”的提示音,同时将这个按键的键值通过串口在电脑屏幕上显示出来(需要运行串口调试软件)通过这个程序可以判断单片机实验开发板的各个部分的硬件和软件都是完好的,具体的源程序如下:ORG 0000HAJMP MAIN;转入主程序ORG 0003H;外部中断P3.2脚INT0入口地址AJMP INT;转入外部中断服务子程序(红外遥控解码程序);以下为主程序进行CPU中断方式设置MAIN:LCALL YS3;等待硬件上电稳定SETB EA;打开CPU总中断请求SETB IT0;设定INT0的触发方式为脉冲负边沿触发SETB EX0;打开INT0中断请求MOV SCON,#50H;设置成串口1方式MOV TMOD,#20H;波特率发生器T1工作在模式2上MOV PCON,#80H;波特率翻倍为2400x2=4800BPSMOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值) MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值) SETB TR1;启动定时器T1;以上完成串口通讯初始化设置START:MOV P1,#01111111BLCALL DELAYMOV P1,#10111111BLCALL DELAYMOV P1,#11011111BLCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110B;P1口的LED循环由下往上点亮一次,延时约250毫秒LCALL DELAYMOV P2,#11011111B;蜂鸣器鸣响一声LCALL DELAYMOV P2,#11101111B;继电器J1吸合一次LCALL DELAYMOV P2,#11110111B;继电器J2吸合一次LCALL DELAYMOV P0,#0FFHMOV P2,#01111111B;数码管个位显示8LCALL DELAYMOV P0,#0FFHMOV P2,#10111111B;数码管十位显示8LCALL DELAYAJMP START;反复循环;以下为进入P3.2脚外部中断子程序,也就是解码程序INT: CLR EA;暂时关闭CPU的所有中断请求MOV R6,#10SB: ACALL YS1;调用882微秒延时子程序JB P3.2,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序DJNZ R6, SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
单片机开发板实验指导书目录实验一熟悉编程软件的使用 (1)实验二熟悉下载环境 (9)实验三延时流水灯实验 (12)实验四IO口中断实验 (13)实验五定时中断实验 (13)实验六独立按键实验 (14)实验七CH451驱动数码管显示实验 (15)实验八矩阵键盘扫描与数码管显示实验 (15)实验九串口通信实验 (16)实验十数字温度传感器DS18B20实验 (17)实验十一RTC实时时钟DS1302实验 (18)实验十二DAC0832实验 (18)实验十三ADC0804实验 (19)附录一元器件的极性识别 (21)附录二焊接要求与注意事项 (23)实验一熟悉编程软件的使用一、实验目的掌握KEIL编程软件的安装及使用方法,熟悉KEIL编程环境。
二、实验步骤(一)、先安装下载软件:1.在单片机开发板的开发工具文件夹中找到KEIL文件夹,然后双击“C51V900修正版1.1.exe”,按照提示安装即可。
安装完成后会在桌面上出现一个KEIL uVision4的图标。
2.对KEIL软件进行在线注册,首先打开uVision4,在菜单栏中找到File选项,然后再File栏中选择License Management选项,如图1所示,在打开的License Management窗口,复制右上角的CID。
图1在KEIL文件夹中找到“Keil_lic-v3.2.exe”,然后双击。
打开注册机,在CID窗口里填上刚刚复制的CID,其它设置不变,点击Generate生成许可号,复制许可号,如图2所示。
将许可号复制到License Management窗口下部的New LicenseID Code,点击右侧的Add LIC。
若上方的Product显示的是PK51 Prof。
Developers Kit即注册成功,Support Period为有效期,一般可以到30年左右,若有效期较短,可多次生成许可号重新注册。
如图3所示。
图2图3(二)、此时,KEIL软件我们就注册成功了。
C51单片机实验报告实验目的本实验旨在通过对C51单片机的学习和实践,了解单片机的基本原理和使用方法,掌握C语言与单片机的编程技巧。
实验器材•C51单片机•电脑•C语言开发环境•连接线实验步骤步骤一:准备工作1.将C51单片机与电脑连接,确保连接线连接正确且稳固。
2.在电脑上安装C语言开发环境,如Keil等。
3.打开C语言开发环境,创建一个新的工程。
步骤二:编写程序1.在新建的工程中,打开主程序文件。
2.根据实验要求,编写相应的C语言程序。
3.确保程序逻辑正确,没有语法错误。
步骤三:编译程序1.在C语言开发环境中,点击编译按钮,对程序进行编译。
2.检查编译结果,确保没有出现错误提示。
步骤四:下载程序1.将编译成功的程序下载到C51单片机中。
2.确保下载过程中连接稳定,避免中断导致下载失败。
步骤五:运行程序1.完成程序下载后,断开C51单片机与电脑的连接。
2.将C51单片机连接到相应的电路中。
3.打开电源,启动C51单片机。
4.观察程序的运行情况,检查是否符合预期的结果。
实验结果根据实验要求,我们可以通过观察C51单片机的运行结果来验证程序的正确性。
如果程序实现了预期的功能,且单片机能够正常运行,即可认为实验结果是成功的。
实验总结本次实验通过对C51单片机的学习和实践,我们掌握了单片机的基本原理和使用方法,同时也提升了C语言与单片机的编程技巧。
在实验中,我们遵循了一步一步的思路,从准备工作到编写程序、编译程序、下载程序以及最终的运行程序,每个步骤都有条不紊地进行,确保实验的顺利进行。
通过本次实验,我们深刻认识到了单片机在现代电子技术中的重要性,它广泛应用于各个领域,如家电、汽车、通信等。
掌握单片机的原理和使用方法,对于我们今后的学习和工作都具有重要的意义。
参考资料[1] C51单片机实验指导书[2] C语言与单片机编程教程。
谈STC的1T指令51单片机上一周,我为了我们的创新基金项目而做了一个ds18b20温度显示试验,用的是郭天祥郭老师的TX-1C实验板,将温度传感器采集到的温度显示在1602液晶屏幕上,显示一切正常因为之前上一个寒假也做过。
所以也没什么难的,很顺利就做好了。
实验室一女生看到后就想让我给他们寝室做一个这温度显示的玩意儿,随时能知道外边的温度以不至于他们女生穿得太少而挨冻!然后我就觉得小菜一碟嘛,看我的,三下五除二给你整一个,然后我就开始找了一块5*7的洞洞板开始焊接了。
我准备用一个20脚的单片机11f02e来做,然后用一个3位的共阳数码管来显示温度,16个IO口用12个够用了。
然后我就开工了,很快我就把硬件给焊接好了。
把单片机烧好我写的程序,上电之后竟然数码管显示3位零。
然后就到处调程序但是还是没有作用。
在调试程序的过程中我发现18b20根本就没有应答单片机,数码管显示的零是各位的默认初值。
也就是说单片机根本就没有检测到存在脉冲,难道是时序有问题?然后我就把程序烧到我的开发板上,哎,一切显示正常。
这见鬼了,怎么会出现这种事情呢?后来我就想硬件有问题吗?然后我就把我焊接的小板上的所有的引脚都用杜邦线连接到单片机开发板上的IO口,一模一样的程序结果还是能够正常显示,这就很有力地印证了第一,我焊接的板子没问题;第二,问题绝对出在单片机上。
然后我就换了一块20脚的单片机烧好程序后发现还是老样子。
顿时我都没有信心继续搞了,但是当时已经答应人家,怎么能说不做就不做呢?必须得把问题找出来。
最起码我现在已经确定是单片机的问题,而且单片机没有损坏,那说明我用的不对。
然后我就上网查这款单片机,我发现一句至关重要的话:“11系列是后来研发生产的,STC11系列:1T时钟周期,高速运算能力,是89系列的8-12倍。
”然后我就恍然大悟,原来是11系列的单片机是1T指令的;然后就是原来ds18b20里的时序里边的延时库函数延时要比89系列的短好多,这也就印证了为什么用开发板(板载单片机为89C52RC)可以用,而我焊的板就不行。
实验一并行输入输出口的使用一、实验目的:学会设计proteus 7仿真电路,学习P1口的使用方法和延时子程序的编写用Keil uVision 3编程实现发光二极管的流水点亮。
二、实验原理:P1口为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1)。
P1口作为输出,接8个发光二极管D1~D8三、实验代码:#include<reg51.h>#include<intrins.h> //移位库函数包含于此头文件中void delay(unsigned int d) //定义延时子函数{ while(--d>0);}void main(){ unsigned char i,sel;while(1){ sel=0xfe;for(i=0;i<=8;i++){ P1=sel; //显示变量赋给P1口delay(50000); //延时sel=_crol_(sel,1); //改变显示变量}}}四、实验结论:用while语句实现发光二极管循环流水点亮,从上到下一次点亮。
实验二C51分支程序设计一、实验目的:学习多分支选择结构和switch语句,了解循环的嵌套。
二、实验原理:do while 循环先执行后判断是否循环,switch括号中的表达式的值与某case后的常量表达式的值相同时,就执行它后面的语句,遇到break语句则退出switch语句。
本实验仿真电路图、流程图如下:(仿真电路图)(流程图)三、实验代码:#include <reg51.h>void main(){ char a;do{ P1=0xff;a=P1;a=a&0x03;switch(a){ case 0:P2=0x0e;break;case 1:P2=0x0d;break;case 2:P2=0x0b;break;case 3:P2=0x07;break;}}while(1);}四、实验结论:多分支选择的switch/case语句,可直接处理并行多分支选择问题,从匹配表达式的括号开始执行,不再进行判断。