文档库 最新最全的文档下载
当前位置:文档库 › 51单片机模拟spi串行接口程序

51单片机模拟spi串行接口程序

51单片机模拟spi串行接口程序
51单片机模拟spi串行接口程序

51单片机模拟spi串行接口程序

51单片机模拟spi串行接口程序,在keilc51下编写

sbit CS=P3^5;

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val)

{

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--)

{ CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

sbit CLK= P1^5;

sbit DataI=P1^7;

sbit DataO=P1^6;

#define SD_Disable() CS=1 //片选关

#define SD_Enable() CS=0 //片选开

unsigned char SPI_TransferByte(unsigned char val) {

unsigned char BitCounter;

for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0;

DataI=0; // write

if(val&0x80) DataI=1;

val<<=1;

CLK=1;

if(DataO)val|=1; // read

}

CLK=0;

return val;

}

单片机整点报时闹钟

单片机最小应用系统 设 计 报 告 指导老师:吴兆华 学生:曾雅琼 学号: 092011109 机电工程学院 2010年五月

目录 一设计题目 (3) 二设计目的 (3) 2.1 设计目的要求 (3) 2.2 系统设计意义 (3) 三系统硬件图 (3) 四程序流程图 (4) 五、系统说明与分析 (4) 5.1 系统主要组成部分 (5) 5.2 单片机最小系统部分 (5) 5.2.1 MCS-51系列单片机概述 (5) 5.2.2 MCS-51系列单片机的并行I/O口 (6) 5.2.3 MCS-51系列单片机的工作方式和时序 (7) 5.3 数码显示部分 (8) 5.3.1概述 (8) 5.3.2 LED数码管引脚结构 (8) 5.3.3 LED数码管显示原理 (9) 5.3.4 LED数码管的驱动方式 (10) 5.4电路板的制作 (11) 5.5 系统连线说明分析 (12) 六源程序 (13) 七总结 (19) 八参考文献 (20)

一设计题目 整点报时闹钟 二设计目的 该单片机最小应用系统设计目的及要求如下: 2.1 设计目的要求 1、通过本次实验,掌握单片机I/O口的使用,6位7段数码管动态显示数据的方法 以及蜂鸣器的用法; 2、通过对单片机的使用和编程,了解单片机的应用编程; 3、掌握单片机汇编语言设计和分析方法; 4、学会使用并熟练掌握电路绘制软件Protel99SE; 5、掌握电路图绘制及PCB图布线技巧。 2.2 系统设计意义 1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。 2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。 3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。 4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。 5、用AT89S51,DAC0823设计出题目所要求的电压输出,实现电压值动态显示,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。

设计单片机通讯协议论文(非常经典)

如何设计单片机常用通信 协议论文

目录 1.自定义数据通信协议 (3) 2.上位机和下位机中的数据发送 (3) 3.下位机中的数据接收和协议解析 (4) 4.上位机中的数据接收和命令处理 (8) 5.总结 (9)

单片机通信协议现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。 1.自定义数据通信协议 这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上, 底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。 帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。 地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。 数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令还是数据。数据长度用于指示有效数据的个数。 校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CR C运算等等,可以根据运算速度、容错度等要求来选取。 2.上位机和下位机中的数据发送 物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据 包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方

商业银行综合业务模拟实习

商业银行综合业务模拟实习 一、实习目的 本实习在《金融学》《金融市场学》、《经济学》、《商业银行经营管理》等专业课程基础上设置的综合性实践环节。实习为学生提供了了解商业银行经营管理实务操作的机会。通过商业银行综合业务模拟操作系统的学习,使得同学了解商业银行个人和对公各类业务的操作流程,熟练运用商业银行管理知识,熟悉商业银行的运行规律,并且提升在银行业的实际工作能力。本实习是专业教学的重要组成部分。 二、实习内容 1、商业银行管理理论在实习操作中的运用 2、商业银行对公业务的操作 3、商业银行私人业务的操作 4、商业银行风险管理的操作 三、实习的组织形式及时间 本实习采用校内实验室实习方式。学生在掌握了商业银行经营管理课程理论知识的前提之下,学生可以在校内的金融实验室进行商业银行综合业务的操作,其中包括个人储蓄业务、对公会计业务以及、信息的查询、对公存贷业务;与此同时,还安排让学生在校内的图书馆和资料室查阅我国商业银行的统计数据和有关经济政策的时间。使得学生将所学的银行理论知识与商业银行综合业务管理系统相结合,使得学生理解所学的银行理论知识与实际应用系统的联系,培养学生分析问题和解决问题的能力。四、实习步骤

1.了解商业银行综合业务操作系统 2.商业银行个人业务操作 3.商业银行对公业务操作 4.商业银行报表管理系统操作 5.商业银行信贷业务及风险管理系统操作 五、实习报告/论文 实习报告/论文可以包括内容之一: 1、商业银行综合业务的流程; 2、商业银行的个人业务操作总结; 3、商业银行对公业务的操作总结; 4、对于整个实习课程的体会和建议 实验报告要求资料真实、准确、完整,用A4纸,4号宋体字打印,学校统一封面装订,必须附带操作过程的图表。 六、实习报告/论文内容 1、商业银行综合业务的流程; 1)登陆2)增加钱箱 3)普通活期客户录入 4)凭证领用5)凭证出库

脉冲控制器

科信学院 课程设计说明书(2012 /2013学年第二学期) 课程名称:《单片机应用》课程设计 题目:脉冲控制器 专业班级:电气2班 学生姓名:赵永章 学号:100062223 指导教师:段广玉王静爽韩昱 设计周数:两周 设计成绩: 2013年07月11日

目录 1. 课程设计目的................................................................................................32. 课程设计内容及设计过程说明...........................................................................32.1功能介绍................................................................................................32.2.1电路原理..........................................................................................32.2.2protel原理图....................................................................................42.2.3各功能模块电路设计...........................................................................52.2.3.1LED和蜂鸣器模块.....................................................................52.2.3.2硬件复位模块和晶振模块............................................................52.2.3.3段码输出和共阴极数码管模块......................................................62.2.4 PCB图.............................................................................................72.2.5 共阴极数码管显示码对照表..................................................................72.3元件清单................................................................................................82.4实际电路板成品图....................................................................................92.5程序流程图 (10) 2.6汇编程序 (11) 2.6.1程序源代码 (11) 2.6.2代码分析 (13) 3. 课程设计结论 (13) 4. 参考文献 (14) 1、课程设计目的

语音芯片时钟电路(整点报时名闹铃设置)程序

#include unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code tab[]={0xfd,0xfb,0xf7,0xef,0xdf,0xbf}; unsigned char code ts[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50}; unsigned char wei[]={0,1,2,3,4,5}; unsigned char sec,min,hou,rsec,rmin,rhou,tcont; unsigned char a0,a1,a2; unsigned char smh; void delay(void) //延时子程序 { unsigned char i,j; for (i=10;i>0;i--) for(j=248;j>0;j--); } void delay2(void) //1420专用延时子程序 { unsigned char i,j,k; for (i=200;i>0;i--) for(j=248;j>0;j--) for(k=20;k>0;k--); } void play(unsigned char temp) //1420播放子程序 { P1=0;P3_0=1;P3_1=1;P1=temp; P3_1=0; delay2(); P1=0; P3_1=1; } void display(void) //显示子程序 { for(a2=0;a2<6;a2++) { wei[0]=hou/10; wei[1]=hou%10; wei[2]=min/10; wei[3]=min%10; wei[4]=sec/10; wei[5]=sec%10; P2=tab[a2]; P0=table[wei[a2]]; delay(); } } void rdisplay(void) //闹钟显示子程序 { for(a2=0;a2<6;a2++) { wei[0]=rhou/10; wei[1]=rhou%10;

银行系统模拟

数 据 结 构 实 验 报 告 实验3:银行业务模拟系统姓名:范亚平 年级:2010级 学号:1008114061 专业:计算机科学与技术专业(1)班

数据结构实验报告 一、实验目的: 1)通过实验掌握对离散事件模拟的认识; 2)进一步理解队列的实现与应用; 3)对链表的操作有更深层次的理解; 二、实验条件: 学院提供公共机房,1台/学生微型计算机。 三、实验要求: 1问题描述: 假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。 2.一个完整的系统应具有以下功能: 1)初始化(OpenForDay),模拟银行开门时各数据结构的状态。 2事件驱动(EventDrived), 对客户到达和离开事件做相应处理。 3下班处理(CloseForDay), 模拟银行关门时的动作,统计客户平均逗留时间。 [备注]: 假设银行开门的时刻(间)设为0 , 银行每天营业的时间在程序运行时输入(例如480分钟)。 每个客户办理业务的时间不超过30分钟,两个相邻客户到达银行的时间间隔不超过5分钟要求程序执行时,只要给出银行每天的营业时间即可输出客户平均逗留的时间。四、总的设计思想: 为了计算这个平均的逗留时间,自然需要知道每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行的逗留时间。所有客户逗留时间的总和被一天内进入银行的客户数除便是所求的平均时间。称客户到达银行和离开银行这两个时间发生的事情为“事件”,则整个模拟程序将按事件的先后顺序进行处理。这样一种程序称做事件驱动模拟。下面是上述银行客户的离散事件驱动的模拟算法。 void Bank_Simulation( int CloseTime ){ // OpenForDay ( ); //初始化,模拟银行开门时各数据结构的状态。 while(有要处理的事件时) //有事件可处理 { EventDrived ; //事件驱动,从事件表中取出事件en; //根据en的类型(客户到达事件或客户离开事件)做相应的处理

基于单片机的温度控制器设计

技术参数和设计任务:1、利用单片机AT89S51实现对温度物理量的控制,以实现对温度控制的目的;2、为达到电源输出5V电压目标,完成电源电路的设计;3、为达到数码管显示目标,完成显示电路的设计;4、为达到键盘控制的目标,完成键盘电路的设计;5、为达到检测温度的目标,完成检测电路的设计;6、完成报警设计;7、进行软件设计[分配系统资源,编写系统初始化和主程序模块;编写数字调节器软件模块;编写A/D转换器处理程序模块;编写输出控制程序模块;其它程序模块(数字滤波、显示与键盘等处理程)等等。一、本课程设计系统概述1、系统原理温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机 AT89S51 获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备 (压缩制冷器) ,当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) 。当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声。系统中将通过串口通讯连接PC机存储温度变化时的历史数据,以便观察整个温度的控制过程及监控温度的变化全过程。2、系统结构图本设计以AT89S51单片机为主控核心设计的一个温度控制系统,低温时可控制加热设备,高温时控制风扇,超出设定最高温度值时蜂鸣器发出声响报警。 图1 总体硬件方框图 3、文字说明控制方案(1)温度测量部分方案 DS18B20是DALLAS公司生产的一线式数字温度传感器,它具有微型化、低功耗、高性能抗干扰能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接将温度

51单片机实验程序

3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729}; //将0~9 对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255 或-128~+127 之间的话就用char ,而现在的值明显超过这个范围,用int 较合适。int 的范围是0~65535 或-32768~32767 。 int y,x1,x2,x3; //此处定义根据习惯,也可写成char x1,x2,x3 但是变量y 一定要用int 来定义。 x1=2; x2=4; x3=9; //x1,x2,x3 三个的值是自定的,只要是0~9 当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1); //单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。 } //结果的查询在Keilvision 软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch 的框架内双击“double-click or F2 to add”文字输入y 后按回车,右侧会显示其16 进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10 进制数。 1、有10 个8 位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的 数据(1 的个数为偶数)都要存到内RAM50H 开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105}; // 将所要处理的值存入RAM 中,这些可以根据个人随意设定,但建议不要超过0~255 的范围。 char i; // 定义一个变量 char *q=0x50; // 定义一个指针*q 指向内部0x50 这个地址。 for(i=9;i>=0;i--) //9~0 循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i]; //将a[i] 的值赋给累加器ACC if (P==0) //PSW0 位上的奇偶校验位,如果累加器ACC 内数值1 的个数为偶数那么P 为0,若为奇数,P 为1。这里的P 是大写的。 { *q=a[i]; q++; // 每赋一个值,指针挪一个位置指向下一个。 } } while(1); //同实验一,程序不能停。 }

基于51单片机设计的带有测温功能的电子时钟汇总

、 职业技能训练之 电子技术课程设计报告 学院电子与信息学院 设计题目基于51单片机设计的带有测温功能的电子时钟班级XXX 姓名XXX 学号XXX 指导教师XXX 时间2012年06月25日

目录 一、设计要求 二、课程设计的方案、目的及意义 三、硬件设计方案 四、软件设计方案 五、总结 六、参考资料

一、设计要求 用51单片机设计带温度显示的电子时钟,具体要求如下: 1、利用DS1302时钟芯片实现时钟功能模块。 2、时钟要求可以调节时间:年、月、日、时、分、秒。 3、利用LCD1602显示。 4、利用DS18B20芯片实现温度功能模块。 5、利用按键完成各项功能。 二、课程设计方案、目的及意义 1、总体方案: 用STC89C51单片机作为CPU主控制器,DS1302时钟芯片提供准确时钟信号,DS18B20温度传感器采集温度信息,三个按键进行加减调整、功能切换作用,通过LCD1602对外多功能显示。 2、具体方案: CPU控制所有模块,通过循环反复从DS1302中读取时钟信息,传送至LCD1602显示,得到基本时钟功能。当分为59,秒为56时开始,每隔一秒LED 灯点亮240毫秒,0分0秒时LED灯点亮700毫秒。从而实现整点光报时。 定时循环从DS18B20中读取温度信息,传送至LCD1602显示,得到基本温度计功能。当温度高于30度(包括30度)时,点亮红色LED灯,提醒当天为高温天气。低于0度时,点亮蓝色LED灯,提醒当天为冰冻天气。 键盘使用扫面方式,MENU键控制功能切换,完成时钟和温度间的转换。OK键控制时间调整与确定,UP、DOWN键调节时间,R、L 键选择调整对象。进入调整时,暂停DS1302数据读取,并将改变的时间数据写入DS1302,并送LCD1602显示,同时,启动LCD1602光标闪烁,确定调整对象,完成人机对话。退出调整时,停止写入数据,重新读取DS1302时钟信息。从而完善时钟功能。 3、目的及意义 可作为产品生产,作为居家的时钟显示与温度计。

51串口通信协议(新型篇)

51串口通信协议(新型篇) C51编程:这是网友牛毅编的一个C51串口通讯程序! //PC读MCU指令结构:(中断方式,ASCII码表示) //帧:帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志 //值: 'n' 'y'| 'r' | 0x01 | x | x | x |0x13 0x10 //字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2 //求和: ///////////////////////////////////////////////////////////////////// //公司名称:*** //模块名:protocol.c //创建者:牛毅 //修改者: //功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分 //其他说明:只提供对A T89c51具体硬件的可靠访问接口 //版本:1.0 //信息:QQ 75011221 ///////////////////////////////////////////////////////////////////// #include #include //预定义 //帧 #define F_ST1 0x6e //帧头标志n #define F_ST2 0x79 //帧头标志y #define F_R 0x72 //帧类型读r #define F_W 0x77 //帧类型写w #define F_D 0x64 //帧类型数据帧d #define F_B 0x62 //帧类型写回应帧b #define F_C 0x63 //帧类型重发命令帧c #define F_Q 0x71 //帧类型放弃帧q #define F_ADDR 0x31 //器件地址0-9 #define F_END 0x7a //帧尾标志z #define F_SPACE 0x30 //空标志0 #define F_ERR1 0x31 //错误标志1,flagerr 1 #define F_ERR2 0x32 //错误标志2 2 //常数 #define S_MAXBUF 16 //接收/发送数据的最大缓存量 #define FIELD_MAXBUF 48 //最小场缓存,可以大于48字节,因为协议是以20字节为

单片机课程设计外部脉冲计数器

目录 摘要:单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。本课程设计的指导思想是控制单片机实现从0到99的计数功能,其结果显示在两位一体的共阳极数码管上。 关键词:脉冲计数器数码管单片机 本设计基于单片机技术原理,以单片机芯片STC89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:输出脉冲,按下键就开始计数,并将数值显示在两位一体的共阳极数码管上。 1课题原理 PCB板上设置开始计数按键和清零按键,以上按键与89C52单片机的P1口连接,通过查询按键是否被按下来判断进行计数或者清零。若按下计数健,则单片机控制两位一体的共阳极数码管显示从00开始的数字,按下一次,则数字加一,一次类推;若按下清零键,则程序返回程序开始处,并且数码管显示00。

2 硬件及软件设计 2.1 硬件系统 2.1.1 硬件系统设计 此设计是在单片机最小系统的基础上进行开发和拓展,增加了按键电路和和数码管显示电路,由于单片机输出电流不足以驱动数码管发光,所以数码管需要驱动电路。我们采用了三极管对数码管电流进行放大,使电流大小达到要求值。 2.1.2 单元电路设计 基本框架如下图2.1 2.1基本框架

1.STC89C52芯片 STC89C52RC芯片包括: 8k字节 Flash,512字节RAM, 32位I/O口 线,看门狗定时器,两个数据指针, 三个16位定时器/计数器,一个6向 量2级中断结构,全双工串行口,片 内晶振及时钟电路。STC89C52RC芯片 可降至0Hz静态逻辑操作,时钟频率 0-80MHz,支持2种软件可选择节电 模式。空闲模式下,CPU停止工作, 允许RAM、定时器/计数器、串口、中 断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片 机一切工作停止,直到下一个中断或 硬件复位为止。8位微控制器8K字节 在系统可编程。芯片如图2.4所示。 图2.4 STC89C52芯片 2.按键电路 K1键为启动键,K2键为清零键,K3键为计数键,通过按钮的连接,实现开始、计数清零功能,连接电路如图2.5所示。 图2.5 按键电路

51单片机考试常见试题简答 题

简答题部分 1、什么叫堆栈? 答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。 2、进位和溢出? 答:两数运算的结果若没有超出字长的表示范围,则由此产生的进位是自然进位;若两数的运算结果超出了字长的表示范围(即结果不合理),则称为溢出。 3、在单片机中,片内ROM的配置有几种形式?各有什么特点? 答:单片机片内程序存储器的配置形式主要有以下几种形式:(1)掩膜(Msak)ROM型单片机:内部具有工厂掩膜编程的ROM,ROM中的程序只能由单片机制造厂家用掩膜工艺固 化,用户不能修改ROM中的程序。掩膜ROM单片机适合于 大批量生产的产品。用户可委托芯片生产厂家采用掩膜方法 将程序制作在芯片的ROM。 (2)EPROM型单片机:内部具有紫外线可擦除电可编程的只读存储器,用户可以自行将程序写入到芯片内部的EPROM 中,也可以将EPROM中的信息全部擦除。擦去信息的芯片 还可以再次写入新的程序,允许反复改写。 (3)无ROM型单片机:内部没有程序存储器,它必须连接程序存储器才能组成完整的应用系统。 无ROM型单片机价格低廉,用户可根据程序的大小来选择外接 程序存储器的容量。这种单片机扩展灵活,但系统结构较复 杂。 (4)E2ROM型单片机:内部具有电可擦除叫可编程的程序存储器,使用更为方便。该类型目前比较常用 (5) OTP(One Time Programmable)ROM单片机:内部具有一次可编程的程序存储器,用户可以在编程器上将程序写入片 内程序存储器中,程序写入后不能再改写。这种芯片的价 格也较低。 4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系? 答:某条指令的执行周期由若干个机器周期(简称M周期)构成,一个机器周期包含6个状态周期(又称时钟周期,简称S周期),而一个状态周期又包含两个振荡周期(P1和P2,简称P周期)。也就是说,指令执行周期有长有短,但一个机器周期恒等于6个状态周期或12个振荡周

51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

51单片机c语言电子钟(已加入调时、闹铃、 整点报时功能) 效果图:

程序如下: //51单片机c语言电子钟(已加入调时、闹铃、整点报时功能) //WHJWNAVY 2011/10/14 #include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ //此表为 LED 的字模, 共阴数码管 0-9 - uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x40}; //段码控制 /*定义并初始化变量*/ uchar seconde=0;//秒 uchar minite=0;//分 uchar hour=12; //时 uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1 uchar shi=0;//闹铃功能 uchar fen=0;

uchar bjcs;//报警次数 sbit P1_0=P1^0; //second 调整定义sbit P1_1=P1^1; //minite调整定义sbit P1_2=P1^2; //hour调整定义sbit P1_5=P1^5; //整点报时 sbit P1_3=P1^3; //闹铃功能,调整时间 sbit P1_6=P1^6; //调整时 sbit P1_7=P1^7; //调整分 sbit P1_4=P1^4; //关闭闹铃 /*函数声明*/ void delay(uint k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*延时子程序*/ void delay (uint k) { uchar j; while((k--)!=0) { for(j=0;j<125;j++)

实验报告银行业务模拟系统的设计与实现(1)

数据结构实验报告 银行业务模拟系统的设计与实现(该实验为综合性实验,共用6个学时)二、实验要求: 1.问题描述: 假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。 2.一个完整的系统应具有以下功能: 1)初始化(OpenForDay),模拟银行开门时各数据结构的状态。 2)事件驱动(EventDrived), 对客户到达和离开事件做相应处理。 3)下班处理(CloseForDay), 模拟银行关门时的动作,统计客户平均逗留时间。 [备注]: 假设银行开门的时刻(间)设为0 , 银行每天营业的时间在程序运行时输入(例如480分钟)。 每个客户办理业务的时间不超过30分钟,两个相邻客户到达银行的时间间隔不超过5分钟要求程序执行时,只要给出银行每天的营业时间即可输出客户平均逗留的时间。 三、总的设计思想、环境语言、工具等 总的设计思想: 为了计算这个平均的逗留时间,自然需要知道每个客户到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行的逗留时间。所有客户逗留时间的总和被一天内进入银行的客户数除便是所求的平均时间。称客户到达银行和离开银行这两个时间发生的事情为“事件”,则整个模拟程序将按事件的先后顺序进行处理。这样一种程序称做事件驱动模拟。下面是上述银行客户的离散事件驱动的模拟算法。 void Bank_Simulation( int CloseTime ){ // OpenForDay ( ); //初始化,模拟银行开门时各数据结构的状态。 while(有要处理的事件时) //有事件可处理 { EventDrived ; //事件驱动,从事件表中取出事件en; //根据en的类型(客户到达事件或客户离开事件)做相应的处理 if(en表示客户到达) CustomerArrived( );// 处理客户到达事件 else CustomerDeparture( ) ;// 处理客户离开事件 }//while CloseForDay( );//计算客户的平均逗留时间 }// Bank_Simulation 环境语言:Windows下的Microsoft VC++ 四、数据结构与模块说明 下面是模拟程序中需要的数据结构及其操作。

基于单片机的风扇控制器设计

基于单片机的风扇控制器设计 序言 自然风是指自然界里的天然阵风,风量时大时小,给人以舒适感觉。在生活中,我们可以感受自然风给我们带来的清爽,也可以享受空调带来的阵阵凉意。 风扇虽然在一定程度上给人们的生活带来了便捷,而电风扇的风量则不同,它是固定不变的,虽然配以摇头装置,仍不能达到自然风的效果。长时间吹固定不变的风量,不但会感到不舒服,而且对人的健康也不利,随着变频空调的发明,我们设想能否设计一种风扇,其工作效果可以象变频空调一样,象自然风一样,来解决经济条件还没有能接受空调或在一些不适合使用空调的地方的人们生活矛盾。 解决的方法是给电风扇安装一个摸拟自然风控制器,有了它可使电风扇发出变化的风量,好像自然界里的天然阵风,这种模拟自然风对老人和小孩尤为适宜,同时设计的风扇具备多档定时功能,也使其适合夜间睡眠使用。 该设计控制器期望能达到长期可靠运行,风扇速度可调节并不少于8档,能实现定时关机。风扇能模拟自然风,其转速能由快到慢,再由慢到快反复循环。 在本次设计,制作,调试过程中得到了李月红老师的大力支持,指导和帮助。特此表示感谢! ××××× 2007.5.28

第1章智能化风扇控制器硬件设计 1.1智能化风扇控制器系统设计方案及简介 方案一:采用数字电路控制。其原理方框图如图1-1所示。采用数字集成电路通过对脉冲振荡器的调节和脉冲计数实现定时关机。电路可由可控式振荡器、脉冲计数与分频器、脉冲译码与分配器与晶闸管触发电路。但是不能随意控制档速,而且硬件的连接有些复杂。不够实用。 图1-1数字电路控制方案 方案二:采用单片机控制。利用单片机丰富的I/O端口,及其控制的灵活性,采用数模转换实现基本的调速功能、还有时钟显示功能。其原理如图1-2所示。 通过比较以上两种方案,单片机有较大的活动空间,既能实现所要求的功能,又能在很大的程度上扩展功能,而且可以方便的对系统进行升级,所以我们采用后一种方案[1]。

单片机如何运行程序

单片机如何运行程序 知道了单片机通过I/O口与外设打交道,也知道了单片机的程序与数据如何保存,到底单片机是如何运行程序的?原来单片机和其他微机一样,也拥有一个中央处理器(CPU),它是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。它在单片机中的核心地位见图2.10所示。它通过单片机的内部总线,将单片机内部的各个部分:程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等联系在一起,内部总线有三种:数据总线,专门用来传送数据信息,地址总线专门用来传送地址信息,选中各操作单元,控制总线专门用来传送CPU各种控制命令,以便CPU统一指挥协调工作。完成程序所要执行的各种功能。CPU执行程序一般包括两个主要过程:第一,就是从程序存储器中取出指令,指令的地址由PC指针提供,在前面我们已经知道,PC指针在CPU取指后会自动加一,所以PC指针总是指向下一个将要取出的指令代码或操作数。这样,就能保证程序源源不断往下执行。第二,就是执指过程,取出的指令代码首先被送到CPU中控制器中的指令寄存器,再通过指令译码器译码变成各种电信号,从而实现指令的各种功能。 4.怎样保证CPU工作? 现在我们知道了单片机怎样取指、执指,即怎样运行程序了。那么怎样才能保证CPU有序的工作?这就必须提到单片机的两个非常重要的外围电路:单片机的时钟电路和复位电路。在单片机上面有两个引脚,分别是它的第18、19脚,其功能如下。

Pin19:时钟XTAL1脚,片内振荡电路的输入端。 Pin18:时钟XTAL2脚,片内振荡电路的输出端。 89S51的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体和振荡电容,振荡电容的值一般取10p~30p。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。如图2.11 当时钟电路起振后,产生一定频率的时钟信号,单片机的CPU在时钟信号的控制下,就能一步一步完成自己的工作。通常我们必须了解以下几种周期。 【振荡周期】:单片机外接石英晶体振荡器的周期。如外接石英晶体的频率若为12MHz,这其振荡周期就是1/12微秒。 【状态周期】:单片机完成一个最基本的动作所需的时间周期。如扫描一次定时器T0引脚状态所需要的时间。一个状态周期=2个振荡周期。 【机器周期】:单片机完成一次完整的具有一定功能的动作所需的时间周期。如一次完整的读操作或写操作对应的时间。一个机器周期=6个状态周期。 【指令周期】:执行完某条指令所需要的时间周期,一般需要1~4个机器周期,如MUL AB指令是四机器周期指令。一个指令周期=1~4个机器周期。 单片机工作时,除了需要时钟支持外,还必须有一个初始状态,即单片机的复位状态。在单片机外部引脚第9脚,就是专门给单片机提供复位脉冲的。 Pin9:RESET/Vpd复位信号复用脚,当89S51通电,时钟电路开始工作,在RESET 引脚上出现24个时钟周期以上的高电平,系统即初始复位。

基于51单片机控制的语音报时万年历课程设计报告书

基于51单片机控制的语音报时万年历 -----20/11/2013 SDU(WH) 一.实验要求 运用单片机及相关外设实现以下功能: 1)万年历及时钟显示 2)时间日期可调 3)可对时间进行整点报时和随机报时 二.方案分析 根据实验要求,选用STC公司的8051系列,STC12C5A16S2增强型51单片机。此单片机功能强大,具有片EEPROM、1T分频系数、片ADC转换器等较为实用功能,故选用此款。 实验中,对日期和时间进行显示,显示的字符数较多,故选用12864LCD屏幕。该屏幕操作较为便捷,外围电路相对简单,实用性较强。 为了实现要求中的时间日期可调,故按键是不可缺少的,所以使用了较多的按键。一方面,单片机的I/O口较为充足;另一方面,按键较多,选择的余地较大,方便编程控制。 实验中,并未要求对时间和日期进行保存和掉电续运行,所以并未添加EEPROM和DS12C887-RTC芯片。实际上,对万年历来说,这是较为重要的,但为了方便实现和编程的简单,此处并未添加,而是使用单片机的定时器控制时间,精度有差别。且上电默认时间为2014-01-01 09:00:00 之后需要手动调整为正确时间。 要求中的语音报时功能,这里选用ISD1760芯片的模块来帮助实现。此模块通过软件模拟SPI协议控制。先将所需要的声音片段录入芯片的EEPROM区域,之后读出各段声音的地址段,然后在程序中定义出相应地址予以控制播放哪一声音片段。 三.电路硬件设计 实际效果图 四.程序代码部分

Main.h #ifndef _MAIN_H #define _MAIN_H #include "reg52.h" #include "INTRINS.H" #include "math.h" #include "string.h" #include "key.h" #include "led.h" #include "12864.h" #include "main.h" #include "isd1700.h" #include "sound.h" extern unsigned int count; extern unsigned int key_time[8]; extern unsigned char key_new; extern unsigned char key_old; extern unsigned char stop_flag; extern unsigned char key_follow[8]; extern unsigned int key_num[8]; sbit BEEP=P3^7; sbit ISD_SS=P0^7; sbit ISD_MISO=P0^4; sbit ISD_MOSI=P0^5; sbit ISD_SCLK=P0^6; extern unsigned char date_show[]; extern unsigned char time_show[]; extern unsigned char sec; extern unsigned char min; extern unsigned char hour; extern unsigned char day; extern unsigned char month; extern unsigned char year_f; extern unsigned char year_l; extern unsigned char leap_year_flag;

[实用参考]银行业务模拟操作实验指导书.docx

《银行业务模拟操作》 实验指导书 授课班级 教师: 第一部分实验概述 一、课程性质 本课程为金融学专业必修的实践环节。 课程编号: 适用专业:金融学 先修课:金融学、国际金融、商业银行经营管理、会计学或金融会计等 学时数:30课时 学分数:1学分 二、实验目的 1、将银行经营管理的理论与实践相结合,系统地实践、体验和学习银行业务的 相关内容; 2、理解银行与个人、银行与企业以及银行之间的关系; 3、在高度仿真的模拟环境中,获得实践的经验,基本掌握不同柜面业务的处理 方法。 三、实验内容 在银行模拟系统软件中,学生扮演在银行中工作的柜员,进行存款、贷款、出纳、结算、账户管理等业务处理的模拟练习。 四、成绩评定

每个学生由易到难、循序渐进地进行上述各大类业务的模拟练习,系统根据操作的熟练程度和正确率进行自动评分。 学生最终的成绩由以下三部分构成: 模拟操作分数:60% 考勤:20% 实验报告:20% 五、实验室要求 1、在实验室机器上不得从事与本课程无关的活动。 2、遵守实验室规则,保持实验室清洁。 第二部分主页操作介绍 一、登录系统 登录http://172.25.69.211/simbankv4/l00.aspG进入SimBank银行模拟教学平台登录界面。分别输入帐号(即自己的学号)及密码(初始没有密码),点击“登录”按钮,进入模拟教学系统首页,如图1。在此可以看到指导教师发布的通知、实验内容的链接列表、成绩图表和相关知识链接。 在画面右上角处: 点击“个人信息”:学生可查看个人信息、修改姓名及密码。 点击“在线帮助”:可查询各项功能的具体操作。 点击“退出系统”:可重新进入登录画面。 图1 二、营业大厅

相关文档
相关文档 最新文档