barriers / 阅读 / 详情

单片机课程设计以89C51为基础设计SPWM波发生器

2023-10-05 13:04:01
共1条回复
豆豆staR

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

FileName : main.c

Author : 9long

Date : 2010.5.11

Target : STC89C51

Crystal : 12M

*******************************************************************************

模块功能 : 用定时中断调试PWM可调模块,可以接在直流电机上调速

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

#include <REG52.H>

/*-----------------------------------宏定义----------------------------------*/

//键值表-----------------------------------------------------------------------

#define NOKEY 0

#define KEY1 128

#define KEY2 129

#define KEY3 131

#define KEY4 135

#define KEY5 64

#define KEY6 65

#define KEY7 67

#define KEY8 71

#define KEY9 32

#define KEY10 33

#define KEY11 35

#define KEY12 39

#define KEY13 16

#define KEY14 17

#define KEY15 19

#define KEY16 23

//数码管位驱动-----------------------------------------------------------------

#define DIG0 0xfe

#define DIG1 0xfd

#define DIG2 0xfb

#define DIG3 0xf7

#define DIG4 0xef

#define DIG5 0xdf

#define DIG6 0xbf

#define DIG7 0x7f

//字符表-----------------------------------------------------------------------

#define CODE0 0xc0

#define CODE1 0xf9

#define CODE2 0xa4

#define CODE3 0xb0

#define CODE4 0x99

#define CODE5 0x92

#define CODE6 0x82

#define CODE7 0xf8

#define CODE8 0x80

#define CODE9 0x90

#define CODEA 0x88

#define CODEB 0x83

#define CODEC 0xc6

#define CODED 0xa1

#define CODEE 0x86

#define CODEF 0x8e

#define CODEH 0x89

#define CODEP 0x8c

#define POINT 0x7f

#define CODE_ 0xf7

#define CODENO 0xff

//LED控制位(PWM模块接口定义,根据自已的需要更改)------------------------

sbit LED = P1^2;

/*---------------------------------变量定义----------------------------------*/

code const unsigned char NUMBER_CODE[10] =

{CODE0,CODE1,CODE2,CODE3,CODE4,CODE5,CODE6,CODE7,CODE8,CODE9};

code const unsigned char LED_DIG[8] =

{DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7};

unsigned char LED_SEG[8] = {0}; //显示缓冲区

unsigned char flag_10ms = 0; //10ms标志位

unsigned char last_key = 0;

unsigned char key = 0;

unsigned char PWM_CYCLE = 0; //PWM的周期

unsigned char PWM_ON = 0; //PWM的占空比

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

函数名称:Delay1ms()

函数功能: 延时count*1ms

输入参数:count,无符号整型,最多计65535ms count

输出参数:无

全局变量:无

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

void Delay1ms(unsigned int count)

{

unsigned int i=0;

unsigned int j=0;

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

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

}

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

函数名称:DisplayCode()

函数功能: 数码管显示缓冲,送段驱动

输入参数:x,无符号整型,最多显示65535

输出参数:无

全局变量:LED_SEG[i],NUMBER_CODE[i]

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

void DisplayCode(unsigned int x)

{

unsigned char m=0;

LED_SEG[7]=CODEF;

LED_SEG[6]=CODE_;

LED_SEG[5]=CODE_;

while(x>=10000){x=x-10000;m++;}LED_SEG[4]=NUMBER_CODE[m];m=0;

while(x>=1000) {x=x-1000;m++;} LED_SEG[3]=NUMBER_CODE[m];m=0;

while(x>=100) {x=x-100;m++;} LED_SEG[2]=NUMBER_CODE[m];m=0;

while(x>=10) {x=x-10;m++;} LED_SEG[1]=NUMBER_CODE[m];m=0;

while(x>=1) {x=x-1;m++;} LED_SEG[0]=NUMBER_CODE[m];m=0;

}

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

函数名称:ReadKey()

函数功能: 读取4*4矩阵按键的键值

输入参数:无

输出参数:按键的键值

全局变量:无

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

unsigned char ReadKey(void)

{

unsigned char cord_x=0; //定义行和列

unsigned char cord_y=0;

P3 = 0x0f; //行扫描,高四位输出低电平,低四位高电平输入状态,进行行扫描

cord_x = (P3 & 0x0f); //行扫描值送入cord_x

if(cord_x == 0x0f)

return (0); //无键按下,返回0

else //有键按下,则继续进行按键扫描

{

P3 = (cord_x | 0xf0); //列扫描,高四位高电平输入状态,低四位扫描到的行进行回扫,那一行输出低电平

cord_y = P3 & 0xf0; //列扫描值送入cord_y

return (~cord_x + ~cord_y); //返回组合码

}

}

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

函数名称:Play()

函数功能: 每10ms刷新显示和扫描按键

输入参数:无

输出参数:无

全局变量:flag_10ms,last_key,key,LED_DIG[i],LED_SEG[i]

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

void Play(void)

{

unsigned char i=0;

while(!flag_10ms); //有标志位则退出循环

flag_10ms = 0; //标志位清零

for(i=0;i<8;i++) //数码管显示

{

P2 = LED_DIG[i]; //位驱动

P0 = LED_SEG[i]; //段驱动

Delay1ms(1); //延时1ms

}

P2 = 0xff; //清显示

P0 = 0xff;

last_key = key; //记住上次键值

key = ReadKey(); //读新键值

}

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

函数名称:Timer1()

函数功能: 定时器0定时0.1ms

输入参数:无

输出参数:无

全局变量:PWM_ON为占空比,PWM_CYCLE为周期

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

void timer1(void) interrupt 3

{

static unsigned char pwm=0;

pwm++;

if(pwm==PWM_ON)

LED=1; //灯灭

if(pwm==PWM_CYCLE)

{

pwm=0;

if(PWM_ON!=0)

LED=0; //灯亮

}

}

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

函数名称:Timer0()

函数功能: 定时器0定时10ms

输入参数:无

输出参数:无

全局变量:flag_10ms

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

void Timer0(void) interrupt 1

{

TH0 = 0xd8; //定时10ms

TL0 = 0xf0;

flag_10ms = 1; //设定标志位

}

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

函数名称:main()

函数功能: 主函数

输入参数:无

输出参数:无

全局变量:last_key,key,PWM_ON为占空比,PWM_CYCLE为周期

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

void main (void)

{

TMOD = 0x21; //time0方式1,timer1方式2

EA = 1; //开总中断

ET0 = 1; //开定时器0中断

TR0 = 1; //启动定时器0

ET1 = 1; //开定时器1中断

TR1 = 1; //启动定时器1

TH1 = 0x9c; //定时0.1ms

TL1 = 0x9c;

PWM_ON= 1; //设定占空比为1/10;

PWM_CYCLE = 10; //周期为10*0.1ms,可调,随便设置

P2 = 0x00; /*ULN2003有反向作用,ULN2003输出为高电平*/

for(;;)

{

Play();

DisplayCode(PWM_ON);

if((last_key == NOKEY) && (key == KEY1))

{

PWM_ON++;

if(PWM_ON>=10)

PWM_ON=0; //调占空比

}

}

}

相关推荐

单片机课程设计哪个题目简单

据我的了解,单片机课程设计,最简单当然是最小系统,控制一个LED灯点亮或者闪烁。
2023-09-11 23:04:473

单片机课程设计,数字温度计。

选用AT89C2051单片机,再选一个DS18B20温度传感器,将DS18B20温度传感器的中文资料下载看一下就会了。
2023-09-11 23:05:115

单片机课程设计指导的介绍

《单片机课程设计指导》根据对大学生整体动手能力和实践能力的培养要求,精心选择了30个单片机课程设计与工程应用实例,典型实例包括了单片机接口、A/D转换、D/A转换、道路交通灯控制、温度测量、微机通信、LED点阵字符显示、电子万年历、抢答器等,在内容的编写上采用统一格式,包括项目概述、项目要求、系统设计、硬件设计、软件设计、系统仿真及调试。书中提供了完整的程序清单和电路原理图,同时考虑培养学生解决工程实际问题和综合应用的能力,并提供了PROTEUS ISIS软件仿真,有助于学生动手能力的培养和锻炼。
2023-09-11 23:05:411

51单片机课程设计要怎么写

第一次见有人这样问!!--自己学单片机都不知道该做什么啊,看样子复杂的你是没指望了,看看书,写个计算器、万年历、变压器啦什么的还可以追问:我不会啊回答:真干脆!你们老师也没说题目,就是让你自己想题目然后设计啊?要是那样,也不怪乎你会问这种问题课程设计的一般要求:1、设计任务书:说明设计的内容,达到什么程度2、硬件电路图:设计硬件电路板(若不要求做实物的话,可用protues仿真,但无论如何硬件电路一定要有)3、软件设计:根据硬件电路开发,去实现要设计的目的。4、流程图:绘制软件流程图(其实,应该是根据先流程图再设计程序的,不过一般具体流程图都是要根据软件细化,所以就放在了编程后便..)5.设计说明书:总结是设计的过程//-----------------------------一般单片机设计的流程就是这样了,可以根据你们要求具体做哪些....
2023-09-11 23:06:111

单片机课程设计!不要复制百度!高分悬赏!!

1.单片机控制的60s倒计时这个太简单了,不用什么提示吧?硬件上只要单片机最小系统加上数码管两个,程序上只要设置好定时器就行.2.基于单片机的电子钟设计这个要复杂一点.大概要单片机+数码管+实时时钟芯片如DS系列(ds1302加要电池)+存储芯片如24C02,当然驱动数码管的如译码器或锁存器也要有.实在说你第一个设计网上能找到现成的,第二个设计网上也能找到现成的,不过要你自己使用keil、proteus软件综合调试仿真,这两个内容都有,自己动手百度一下吧,不要太依赖别人.毕竟这样才能提高一下你自己.
2023-09-11 23:06:231

单片机课程设计 设计制作一个24小时制多功能数字钟

额。。。。。这个东西就是零碎的东西加起来变成一个一个整体的啊,讲个思路,写个中断服务程序,里面的是led灯亮的程序,和1秒的计时程序,写个beep子程序控制蜂鸣器,写个display子程序,控制icl0809,主程序循环控制,显示数码管,显示am,过了12,进入中断,显示pm,这个其实很简单的,我才大三,单片机才学了四个星期,我都会做,相信你能行的。。。
2023-09-11 23:06:351

单片机课程设计 读串行e2prom. 具体要求:

扔段程序define BUS_SPEED 4300000 // Hz#define CONST (BUS_SPEED / 1000 /32 ) // 1000 ms 8 循环void Wait1ms(void){ asm { PSHX PSHH LDHX #CONST loop: AIX #-1 ;2 cycles CPHX #0 ;3 cycles BNE loop ;3 cycles PULH PULX } } //等待n毫秒void WaitNms(int n){ int i; for(i=1;i<=n;i++) Wait1ms();}//EEPROM 24C256 NEWtypedef union{ word EE_Address; struct { byte addr_H; byte addr_L; }Addr_bytes;}tAddr; tAddr sAddr;#define Address sAddr.EE_Address#define Addr_H sAddr.Addr_bytes.addr_H#define Addr_L sAddr.Addr_bytes.addr_L //word Address; uchar length; uchar i; uchar IIC_Res_flg; uchar flag; #define MAX_LENGTH 64 #define MAX_PAGE 64 #define IIC_OK 1 #define IIC_SLAVE 0xa0 extern uchar WR_Data[64]; extern uchar RD_Data[64]; extern uchar dummy;void Init_IIC(void) { IICF=89; // frequency divider register: BUS=8Mhz => 400Khz IICC1=0XC0; // enable IIC module with interrupt;IICA=0; //salve address of this module IICS=0X12; // clear the IBAL and IICIF flags}void IIC_read_block(word addr,byte len) { Address= addr; length=len; i=0; // for interrupt only; IIC_Res_flg=0;// for interrupt only;flag=10; // defines receive function in the interrupt service routine if(length>MAX_LENGTH)length=MAX_LENGTH; IICC1_TXAK=0; //RX/TX=1;MS/SL=1,TXAK=0; IICC1 |=0X30; // And generate START condition; IICD=IIC_SLAVE; // Address the slave and set up for master transmit;} void IIC_write_block(word addr,byte len) {Address=addr; //load address;length=len; // load length of data pack to be written;i=0; // for interrupt only;IIC_Res_flg=0; // for interrupt only;flag=2; // define transmit function in the interrupt service routine;if(length>MAX_PAGE) length=MAX_PAGE; // set limit;IICC1_TXAK=0; // RX/TX=1;MS/SL=1;TXAK=0;IICC1 |=0X30; // And generate START condition;IICD=IIC_SLAVE; // Address the slave and set up for master transmit;}
2023-09-11 23:06:441

单片机课程设计 题目:模拟电压显示器

我这有个数字电压表啊1. 实验任务 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。 2. 电路原理图 (图)见插图 3. 系统板上硬件连线 a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 b) 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 c) 把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。 d) 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。 e) 把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。 f) 把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。 g) 把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。 h) 把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。 i) 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。 4. 程序设计内容 i. 由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。 ii. 由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值 (D/256*VREF) 5. 汇编源程序 (略) 6. C语言源程序 #include <AT89X52.H>unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,<br> 0xef,0xdf,0xbf,0x7f}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,<br> 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned char dispbuf[8]={10,10,10,10,0,0,0,0}; unsigned char dispcount; unsigned char getdata; unsigned int temp; unsigned char i;sbit ST=P3^0; sbit OE=P3^1; sbit EOC=P3^2; sbit CLK=P3^3; void main(void) { ST=0; OE=0; ET0=1; ET1=1; EA=1; TMOD=0x12; TH0=216; TL0=216; TH1=(65536-4000)/256; TL1=(65536-4000)%256; TR1=1; TR0=1; ST=1; ST=0; while(1) { if(EOC==1) { OE=1; getdata=P0; OE=0; temp=getdata*235; temp=temp/128; i=5; dispbuf[0]=10; dispbuf[1]=10; dispbuf[2]=10; dispbuf[3]=10; dispbuf[4]=10; dispbuf[5]=0; dispbuf[6]=0; dispbuf[7]=0; while(temp/10) { dispbuf[i]=temp%10; temp=temp/10; i++; } dispbuf[i]=temp; ST=1; ST=0; } } }void t0(void) interrupt 1 using 0 { CLK=~CLK; }void t1(void) interrupt 3 using 0 { TH1=(65536-4000)/256; TL1=(65536-4000)%256; P1=dispcode[dispbuf[dispcount]]; P2=dispbitcode[dispcount]; if(dispcount==7) { P1=P1 | 0x80; } dispcount++; if(dispcount==8) { dispcount=0; } }
2023-09-11 23:06:541

单片机C51课程设计 16进制转为10进制

姚创艺你这个问题哥可以回答,来找哥
2023-09-11 23:07:155

单片机课程设计要生成一个LST格式文件!我有程序ASM,也有硬件图,怎么生成LST?

建立一个项目,选择所选的单片机然后导入你的ASM文件编译一次就会得到项目文件名.LST文件
2023-09-11 23:07:341

单片机89c51的电子时钟课程设计

一. 数码钟工作简介  本作品采用Atmel公司的AT89C51单片机,以汇编语言为程序设计的基础,设计一个用四位数码管显示时、分的时钟。在实物图中,左边靠近电源的绿色发光二极管(长亮)是电源指示灯,表示的是5V稳定电源工作正常;单片机左下角红色发光二极管是秒灯,每闪烁一次表示时间走动一秒钟;按键正上方绿色发光二极管是设置灯,当时间正常走动时此时不亮,当第一次按下设置键(右键)时,此绿灯亮,同时秒时熄灭,且分钟的两位数码管出现闪烁,时间停止走动,进入校时状态,表示此时可以进行分钟的调整,当按一次加一键(左键)可实现分钟的加一功能,分钟以60分为极限,超出60分则返回数值0,从0再重新算起;如果再次按下设置键时,这时秒灯和设置灯仍旧保持熄灭和点亮状态,表示分钟的数码管停止闪烁,反过来表示小时的两位数码管则开始闪烁,此时可进行小时的调整,按加1键可实现小时的加1功能,小时调整以24为上限,同样超出24小时则从新回0;当第三次按下设置键时,数码管停止闪烁,设置灯熄灭,秒灯重新闪烁,时间以设定值计时。
2023-09-11 23:07:491

单片机课程设计 广告灯 求C语言的

#include<reg52.h>void delayMs(unsigned char m); //函数声明void delayUs2x(unsigned char t);void delay1s(unsigned int r);/*------------------------------------------------ 主函数------------------------------------------------*/void main (void){ unsigned char i; unsigned char temp;//临时转换变量while (1) { for(i=0;i<4;i++) //for循环,执行4次 { P1=0xff; //LED全灭 delay1s(1); P1=0x00; //LED全亮 delay1s(1); } temp=0xfc; //11111100 P1=temp; for(i=0;i<7;i++) //for循环,执行7次 { delay1s(1); //调用1s延时程序 temp<<=1; //移位 temp=temp|0x01; }}}/*------------------------------------------------ μs级延时函数------------------------------------------------*/void delayUs2x(unsigned char t){ while(--t);}/*------------------------------------------------ mS级延时函数------------------------------------------------*/void delayMs(unsigned char m){ while(m--) { //大致延时1mS delayUs2x(245); delayUs2x(245); }}/*------------------------------------------------s级延时函数-------------------------------------------------*/void delay1s(unsigned int r){ while(r--) { //大致延时1s delayMs(1000); delayMs(1000); }}
2023-09-11 23:08:061

求单片机课程设计《255秒定时器》

这是一个典型的测控系统。A/D转换,进行采样,之后,数据串行输出显示;并以此数据,进行倒计时,输出音频控制信号。很好的题目,认真做吧。
2023-09-11 23:08:141

单片机课程设计程序 独立键盘点亮发光二极管

4个按键可以控制8个发光二极管灯么?还得是独立式键盘,题目有没有问题啊?
2023-09-11 23:08:462

单片机音乐盒课程设计一般会遇到什么问题.

音乐盒设计单片机课程设计报告 程序调试中出现的问题及解决的办法: (1) 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序 中有的指令书写得不规*导致的,例如有的 RET 返回指令一定要按正确格式书写或在两行指
2023-09-11 23:08:551

请教高手单片机课程设计:先点亮奇数位灯再点亮偶数位灯``````

用数组表示LED灯的状态
2023-09-11 23:09:062

单片机交通灯课程设计数码管时间走太快了,不知道是不是代码问题(附代码)?

单片机交通灯数码管时间走太快了,就是代码问题。这代码写的太神奇了。看程序,T0定时是50ms,那应该是中断20次才是1秒,那个9是怎么算的来的?这个结果就是秒计时快了。还不只是1秒要快,那秒计数是用disp显示子程序来完成的,那个num--; 是调一次disp子程序为1秒,这写程序的思路真是脑洞大开呀。这样计秒非常不准确。
2023-09-11 23:09:171

单片机C51课程设计 16进制转为10进制

#include <AT89X52.H>unsigned char Get_Key;unsigned char Dis[4]={0xff,0xff,0xff,0xff}; unsigned char Seg;unsigned char Delay;unsigned int Conut;unsigned char code disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void scanf(void){unsigned char recode,j;P1=~(0x01<<Seg); //行扫描recode=P1>>4; //读取列 if(recode<0x0f) //判断是否有键按下 { if(++Delay>2) Delay=3; if(Delay==2) //延时去抖动 16ms { if(Conut==0) { Dis[0]=Dis[1]=Dis[2]=Dis[3]=0xff; } Conut=1000; for(j=0;j<4;j++){if(!(recode&0x01<<j))break;}//判断按键所在列 Get_Key=(Seg<<2)+(j+1); //键值 1-16 } } P1=0xf0; if(P1==0xf0) //判断按键是否松开 Delay=0;}void InitTimer0(void) //2ms{ TMOD = 0x01; TH0 = 0xF8; TL0 = 0x30; EA = 1; ET0 = 1; TR0 = 1;}void getdec(void){unsigned char i;unsigned int temp; for(i=0;i<4;i++) { if(Dis[3]==0xff) { Dis[3]=Dis[2]; Dis[2]=Dis[1]; Dis[1]=Dis[0]; Dis[0]=0; } } temp=Dis[3]+Dis[2]*16+Dis[1]*256+Dis[0]*4096; Dis[0]=temp/1000; Dis[1]=temp%1000/100; Dis[2]=temp%100/10; Dis[3]=temp%10; for(i=0;i<4;i++) { if(Dis[i]==0) Dis[i]=0xff; else break; }}void Timer0Interrupt(void) interrupt 1{ TH0 = 0xF8; TL0 = 0x30; Seg=(++Seg)&0x03; P3=0x01<<Seg; //位选 if(Dis[Seg]!=0xff) P2=disp_code[Dis[Seg]]; //显示数据 else P2=0xff; scanf(); //按键扫描 if(Conut)Conut--; if(Conut==1)getdec();}main(void){unsigned char i;InitTimer0(); while(1) { if(Get_Key) { for(i=3;i>0;i--) //显示数据移动 { Dis[i]=Dis[i-1]; } Dis[0]=Get_Key-1; Get_Key=0; } }}
2023-09-11 23:10:132

单片机课程设计 红绿灯的 求解(东西和南北反方向红灯亮30秒,绿灯也亮30秒,黄灯亮3秒。还要有数码管倒计

这么简单的课程设计,还需要别人给你写代码啊?自己好好看看书写写吧,大学几年不能一点东西都不学啊,以后怎么找工作呢
2023-09-11 23:10:472

单片机课程设计参考文献近几年

电气传动是通过控制电动机来进行传动,电动机和成电器传动系统通过实现两个能量之间的转换,达到生产生套的传动模块共同组成了电气传动系统,但是它不包括由活的目的。电气传动系统依靠电机的高度工作效率,依赖电动机驱动的设备。我们要弄清楚电气传动系统,首先要电能的传输分配和快速协调功能,达到电气自动化控制的了解电动机和电能,机器的运转速度快,就说明电动机的目的。 工作效率比较高,这样使用机器就会比较经济,而电能的传输和分配都比较方便,并且容易被控制,电能相比其他2单片机的发展不可再生能源来说,对资精不会造成污染,经济适用,所单片机在1971年被美国人和日本人一起发明出来,以现在绝大部分机械的传动方式都会选择电气传动,电气经历了scCM、MCU、sC三个阶段,在scN时期,单片传动系统是工业化发展的重要基础。 机都是8位或4位的。但是随着工业化的发展对单片机也1单片机技术与电气传动系统提出了更高的要求,开始出现了16位单片机,可是由于性价比不高应用不广泛。到了90年代之后,电子产品飞单片机技术、电气传动系统的含义,从外表上来说,速发展,大大的改变了世界,使人们的生活发生了翻天覆单片机的体积小、质量轻、价格便宜,是学习、应用和开地的变化,这一时期,单片机技术也得到了很大的提高,发的重要工具。从本质上来说,单片机是一块硅片,但16位单片机的高端地位,被32位单片机迅速取代,并且他不是一个简单的硅片,因为在它上面,有具有数据处理进入主流市场。过去单片机系统只能在裸机环境下开发和能力的中央处理器CPU、随机存储器RAM、只读存储器使用,现在已经进入了百花齐放,百家争鸣的时期,很多ROM、多种I/0口和中断系统、定时器/计数器,用超大专门的嵌入式操作系统被广泛应用在全系列的单片机上,规模集成电路技术把这些功能集成到这块硅片上,所以单世界上各大芯片制造公司都生产出了自己的单片机,从8片机实际上是一种集成电路芯片,是一个体积小、功能完位、16位到32位,数不胜数,应有尽有,有与主流C51善的微型计算机系统,相比其他计算机,单片机使用起来系列兼容的,也有不兼容的,但它们各具特色,互成互补,更加方便灵活,只缺少了I/0设备,所以深受工业生产的为单片机的应用提供广阔的天地。 青睐,在工业生产领域得到广泛应用。电器传动系统能将在单片机微型计算机的阶段,最佳的单片形态嵌入式相对经济的电能转换为运动的机械能,使机器运行工作,系统的最佳体系结构。这一穿新型的模式获得了成功,使 得后来SCM与通用计算机有了完全不一样的发展道路。 在开创嵌入式系统独立发展的道路上,Intel公司做出了非常大的贡献。而在微控制器(Micro Controller Unit)阶段,即MCU阶段,人们不断扩展满足嵌入式应用的可能,对象系统要求的各种外围电路与接口电路,对象的智能化控制能力不断提高。这一阶段所涉及的领域都和对象系统联系在一起,电气、电子技术厂家变成了发展MCU的最重要的行业。在这一阶段,Intel公司逐渐淡出了MCU的发展。 在MCU这一发展阶段,Philips公司成为了最著名的公司。 在嵌入式应用方面,Philips公司占有巨大的优势地位,他们将MCS-51从单片微型计算机发展到微控制器,这一速度非常只之迅速。所以,当我们研究单片机的发展历程时,一定要多关注Intel公司和Philips公司在这一过程中的历史功绩。单片机在SoC这一阶段,是单片机嵌入式系统的独立发展的过程,向MCU阶段发展的重要因素,就是要最大化的解决应用系统在芯片上的问题;所以,专用单片机的发展就自然而然的形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解便可以从单片微型计算机、单片微控制器变成了单片应用系统。
2023-09-11 23:10:551

单片机课程设计需要运用到数据库知识吗

一般情况下,单片机课程设计与数据库没有任何关系的除非你用单片机设计一个类似电表抄表设备,这个需要后台统计的,这个就要用数据库了但这个应该超出课设的范围了,可以作为毕业设计了(若你就是学习单片机相关专业的)
2023-09-11 23:11:051

急求单片机课程设计.要求:八个按键控制八个LED,按下一个按键相应的LED亮一秒

8个按键接P1口,8个LED接P0口。 ORG 00H AJCX: JNB P1.0, AJCL-1 ;键按下,转移到消抖延时程序 JNB P1.1, AJCL-2 ;键按下,转移到消抖延时程序 JNB P1.2, AJCL-3 ;键按下,转移到消抖延时程序 JNB P1.3, AJCL-4 ;键按下,转移到消抖延时程序 JNB P1.4, AJCL-5 ;键按下,转移到消抖延时程序 JNB P1.5, AJCL-6 ;键按下,转移到消抖延时程序 JNB P1.6, AJCL-7 ;键按下,转移到消抖延时程序 JNB P1.7, AJCL-8 ;键按下,转移到消抖延时程序 JMP AJCX ;无键按下,转按键查询 AJCL-1: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.0, $ ;查询P1.0等待 CLR P0.0 ;点燃P1.0口LED灯 CALL LDYS ;调亮灯延时 SETB P0.0 ;关掉P1.0口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-2: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.1, $ ;查询P1.1等待 CLR P0.1 ;点燃P0.1口LED灯 CALL LDYS ;调亮灯延时 SETB P0.1 ;关掉P0.1口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-3: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.2, $ ;查询P1.2等待 CLR P0.2 ;点燃P0.2口LED灯 CALL LDYS ;调亮灯延时 SETB P0.2 ;关掉P0.2口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-4: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.3, $ ;查询P1.3等待 CLR P0.3 ;点燃P0.3口LED灯 CALL LDYS ;调亮灯延时 SETB P0.3 ;关掉P0.3口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-5: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.4, $ ;查询P1.4等待 CLR P0.4 ;点燃P0.4口LED灯 CALL LDYS ;调亮灯延时 SETB P0.4 ;关掉P0.4口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-6: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.5, $ ;查询P1.5等待 CLR P0.5 ;点燃P0.5口LED灯 CALL LDYS ;调亮灯延时 SETB P0.5 ;关掉P0.5口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-7: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.6, $ ;查询P1.6等待 CLR P0.6 ;点燃P0.6口LED灯 CALL LDYS ;调亮灯延时 SETB P0.6 ;关掉P0.6口LED灯 SJMP AJCX ;转移到按键查询程序 AJCL-8: ;按键处理程序 CALL XDYS ;调转消抖延时程序 JNB P1.7, $ ;查询P1.7等待 CLR P0.7 ;点燃P0.7口LED灯 CALL LDYS ;调亮灯延时 SETB P0.7 ;关掉P0.7口LED灯 SJMP AJCX ;转移到按键查询程序 LDYS: MOV R7, #10 L2: MOV R6, #202 L1: MOV R5, #246 DJNZ R5, $ DJNZ R6, L1 DJNZ R7, L2 RET XDYS: MOV R4, #60 L3: MOV R3, #248 DJNZ R3, $ DJNZ R4, L3 RET END
2023-09-11 23:11:161

单片机课程设计 题目:模拟电压显示器

ADC芯片 采样模拟值,LED显示。单片机书上都有
2023-09-11 23:11:262

基于80c51单片机的交通灯课程设计汇编语言编程

简单程序流程如下:开始:绿灯东西方向南北方向的红灯延迟30秒东西方向绿灯“南北方向的红灯已关闭东西方向的,黄色的光的南北方向的,黄色的光BR/>5秒延时的东西方向的黄色指示灯熄灭南北方向黄色指示灯熄灭的方向,南北方向20秒的延迟一个南北方向绿灯东西方向红灯绿灯熄灭红灯熄灭东西方向一些黄色的光的黄色光南北方向5秒的延迟将启动...阿尔法Alpha
2023-09-11 23:11:461

单片机课程设计血压计

血压计:电子课程设计---电子血压计--半导体应用网电子课程设计---电子血压计 发送 ...基于单片机的心电血压监测仪USB接口设计 基于MSP430单片机及USB总线的便携式血宫. BP01型压力传感器在便携电子血压计...一般医院使用的水银血压计,是基于柯氏法,专业医生可以用听珍器听到动脉血管的... semiapps.com.cn/content.php?content_id=70227024218568946&node_id=198
2023-09-11 23:12:061

做单片机课程设计,用9012三极管驱动20个LED灯,电路应该怎么连?我自己做的发不了光,求好心人指导!

9012是PNP型三极管.去网上搜PNP三极管的接法就可以了,自己看懂的收获大些,电路就不画了!!!
2023-09-11 23:12:174

基于单片机课程设计密码锁

额 路过
2023-09-11 23:12:274

单片机课程设计不过会怎么样

扣除相应成绩。单片机课程设计,是很多高校,电子信息专业、自动化专业、通信专业等学生在校学习期间,必须完成的一项重要的动手实践活动,不过会扣除相应的综合成绩,会影响毕业。《单片机原理与应用》是一门实践性和实用性都很强的课程。
2023-09-11 23:12:481

单片机篮球比赛计时器课程设计 要求 24秒到计时,计两队得分

是的没错
2023-09-11 23:13:084

帮我设计单片机课程设计实验,用c语言程序写,题目是:抢答器,要求制作一个四人抢答器,4个灯跑马循环

难度不大 有需要可以找我
2023-09-11 23:13:204

两个51单片机双机通信课程设计论文

单片机双机串行通信程序+课程设计报告+电路图本次设计采用两片AT89C51单片机实现信息的串行通信,设计过程中,从双机通信背景的了解,到89C51单片机具体功能的了解,与8051单片机的区别;从串行通信的原理的熟悉,到掌握具体串行通信在双机之间的实现;从硬件电路设计到程序编写;从硬件调试到软件模拟实现等。发送方的数据由串行口TXD断输出,经过传输线(双胶线)将信号传送到接收端。接收方接收电平信号,对于接口电路,短距离传送,减少抗干扰作用,如果短离远双机串口中可以连接电平转换器常用芯片RS232,在此不再叙述。设计中,收获不少东西,也遇到了不少的问题。首先,在完成单片机课程学习任务后,对内容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,面对设计课题,无法系统地进行设计思路的拟定。其次,理解不能更好的联系实践,在巩固和学习硬件知识的同时,用软件控制协调硬件实现现实功能,通过硬件完成软件的功能等方面的融会贯通,取得了一定的效果。再次,硬件设计过程中,串行通信方式的选择,波特率的计算,在查询方式与中断方式进行串行通信。对于芯片的选择,软件编写时,对于某些指令的功能,功能模块的连接,芯片地址选择等都遇到了很大的障碍,在老师与同学帮助和自己查阅资料得到了解决,与此同时,了解了不少的问题。并掌握了KEIL的使用和程序调试,以及PROTUES单片机模拟仿真软件的使用,大大提高了学习效率。无耻悲鄙下流的网总是抄网通过本次课程设计,不仅使理论知识得到了实践,有效巩固了知识。同时对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概的系统认识,同时也初步了解了一个完整的系统开发的过程,对于创造思维的培养和开发能力的锻炼,本次设计,为此提供了一个很好的平台。同学之间的相互讨论学习,互相提高,老师知识的帮助,经验的传授,也是本次设计的一道美丽的风景线,真正起到了抛砖引玉的目的。在此,感谢老师给我们这样好的学习机会。
2023-09-11 23:13:301

89c51单片机课程设计,为什么仿真成功了,在开发板上不能运行

仿真了 不一定在开发板就可以具体是什么情况
2023-09-11 23:13:434

单片机交通灯课程设计怎么让绿灯在最后仨秒闪烁?求

最后三秒控制LED亮灭即可。
2023-09-11 23:14:063

单片机课程设计中 这个黑色的小方块有什么用??

跳线帽,跳线用的,也就是短接
2023-09-11 23:14:233

本人要做课程设计:基于单片机的温度控制系统设计。怎样用单片机来做这个设计啊?求解答!

嘿嘿 俺来帮你解决1 首先根据课程设计的温度测量的要求范围和测量的精度: 选择温度传感器 如果温度测量范围在-50度~+125度 则可以选择数字温度传感器DS18B20 超过这个范围 可以选择热电阻 如果是高温测量1000度以上 一般要选用热电偶2 设计传感器的放大电路 将传感器的电信号 一般为毫伏级的 用功率放大器放大到0~5V3 选用AD转换器 将0~5V 的电压 转换成数字信号 送给单片机4 编写单片机程序 采用标度变换公式 将AD转换器转换的数字量转换成具体的实际温度值 送显示器显示采集到的温度的实际值。5 根据采集测量的温度值 和温度的设定值 计算出温度的实际偏差 可以采用PID算法 去实现 对系统温度的控制,即通过对具体的执行装置(电加热器)功率的控制,来调节系统的温度。 呵呵 俺只给你实现课程设计的方法 具体的设计还是你自己做吧 通过自己动手做 课程设计 可以提高你的实际解决问题的能力 呵呵 满意就选满意回答啊
2023-09-11 23:14:511

本人菜鸟,做课程设计,要求89C51单片机实现4位7段数码管动态和静态显示,希望大神能给写个程序,谢谢了

这个很简单很基础啊。
2023-09-11 23:15:002

数字温度计单片机课程设计用74LS573驱动4位数码管

在proteus中用74hc573,做数码管显示的仿真。#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint z);uchar temp,aa,numdu,numwe,bai,shi,ge;uint shu;void init();sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d ,0x07, 0x7f , 0x6f ,0x77, 0x7c , 0x39 ,0x5e ,0x79 , 0x71 ,0x00};void display(uchar bai,uchar shi,uchar ge);void main(){ shu=219; 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){ wela=1; P0=0xfe; wela=0; dula=1; P0=table[bai]; dula=0; delay(1); wela=1; P0=0xfd; wela=0; dula=1; P0=table[shi]; dula=0; delay(1); wela=1; P0=0xfb; wela=0; dula=1; P0=table[ge]; dula=0; delay(1); }void init(){ TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;}void timer0() interrupt 1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; if(aa==2) { aa=0; shu--; if(shu==10) { TR0=0; ET0=0; } bai=shu/100; shi=shu%100/10; ge=shu%10; } }
2023-09-11 23:15:151

单片机课程设计4x4矩阵键盘仿真图如下,调试运行数码管就是不亮,请问是什么原因呢?

4X4矩阵键盘是非编码键盘,你把程序下载到单片机以后,要先把数据线拔掉,才能调试运行吧
2023-09-11 23:15:243

基于51单片机的万年历课程设计

我前几天还帮一位朋友做了。我有现成的程序和仿真,还有电路图。
2023-09-11 23:15:352

带有LCD显示的定时闹钟-单片机课程设计

我可以帮你你可以到这里看看这个LCD时钟http://hi.baidu.com/ylm888ylm/blog/item/584138a7db75e89dd14358d7.html
2023-09-11 23:15:444

我做得课程设计单片机的定时器 比如定时炸弹上得倒计时器 1:36下一秒1:35 然后1:34.....最后0:00报时

不要做啊!做出来后很难拆的!
2023-09-11 23:17:382

单片机stm32F103RC红绿灯课程设计 可实现键控变灯, 最好有整个详细的工程文件夹。

单片机stm32F103RC红绿灯课程设知道更多
2023-09-11 23:17:542

基于单片机的点火正时枪设计 单片机课程设计 电路图怎么做啊

http://tieba.baidu.com/p/4358972100
2023-09-11 23:18:093

单片机课程设计中数码管显示不全,2,5,6,这三个数字显示不全

如果排除硬件问题了,那就是段选错了。你在算算段选。
2023-09-11 23:18:452

步进电动机的正反转控制电路设计(单片机课程设计Proteus+keil仿真) 求大神帮助!!!

步进电机正反转很容易控制,比如正转按如下逻辑时序控制:stepz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x8,0x09};反转就是将数据掉个顺序就好。stepf[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};
2023-09-11 23:19:481

怎么设计基于51单片机的八位抢答器课程设计用c语言?

你的描述不详:下面我给出方法,自已参考:1:主持人端有一个单片机设备 且设备有一个或多个按键,单个按键,那么就做成按键复用,如果是多个按键,那就可以按要求设置按键功能和数量。参赛队每队一个设备,如果不方便能过连线来通讯,就采用无线通讯,抢答端只需一个按键按键,同时在按键里或边上用指示灯来指示状诚。2:逻辑,当主持人按下抢答键时,主持人端设备向8个参赛队发送抢答开始信号数据,参赛队8个设备向主持端应答,判断收到应答后,开始计时10秒,某一队按下按键时,这队会向主持端发送本队的编号即可,说到这里,后面的基本上都是一样的原理,就是收发数据,应答,判断数据类型和功能。即可达到你的要求。
2023-09-11 23:20:241

关于单片机可以做哪些实物为毕业设计

课设题目是什么,有什么要求?
2023-09-11 23:21:315

51单片机键盘接口电路的计算器的实现的毕业设计及开题报告

不想给,当年写的多辛苦啊
2023-09-11 23:22:052

家用洗碗机的单片机课程设计

可以参考《吴鉴鹰单片机项目实战精讲》里面的资料,吴鉴鹰吧有很多的学习设计资料,如果你有自己的吴鉴鹰单片机开发板学习辅助设计会更佳。希望给你的资料有用。百度文库 吴鉴鹰单片机项目实战精讲
2023-09-11 23:22:161

学校的课程设计,用proteus单片机和keil设计一个LED数码管显示的秒表,如下

你的程序有问题,仿真图不要用三极管驱动,反而不显示。如下画法就行,那4个按键不变,没有画。程序中的按键处理,方法不当。先改成如下的程序,先调出能显示,然后你自己再增加按键功能。#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit START = P1 ^0;sbit STOP = P1 ^1;sbit RESET = P1 ^2;sbit dp = P0 ^7;sbit w1 = P2 ^6;sbit w2 = P2 ^7;uchar aa,temp,STOPFLAG,STARTFLAG,miaoshi,miaoge;uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表错误void display();void delay( uint z);void init();void main(){init();while(1){display();//不用带参数if(aa == 20){aa = 0;temp ++;if(temp == 60){temp = 0;}}}}void delay(uint z){ uchar x,y;for(x = z; x > 0; x--)for(y = 110 ; y > 0; y --);//y不能小于110}void display()//不用带参数{miaoshi = temp/10;miaoge = temp%10;w1 = 1;P0 = table[miaoshi];delay(2);w1 = 0;w2 = 1;P0 = table[miaoge];delay(2);w2 = 0;}void init(){ TMOD = 0x01;TH0 = (65536 - 50000)/256;TL0 = (65536 - 50000)%256;EA = 1;ET0 = 1;TR0 = 1;}void timer0() interrupt 1{ TH0 = (65536 - 50000)/256;TL0 = (65536 - 50000)%256;aa ++;}
2023-09-11 23:22:251