导航:首页 > 操作系统 > 单片机p15开发

单片机p15开发

发布时间:2022-09-08 02:53:19

A. 如何用单片机做一个简单的倒计时器

我已经完成了,下面是电路图和实际效果,你也试试,程序已经调试完成了!!!是使用秒表程序改编完成的,喜欢的话,点一个赞吧!希望能帮到你!!!

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};//显示0~F的值

u8 ssec=100,sec=60,min=04;

u8 DisplayData[8];

sbit beep=P1^5;

unsigned long counter=0;

unsigned int c=0;

sbit p15=P1^5;

bit p;

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

* 函 数 名 : delay

* 函数功能 : 延时函数,i=1时,大约延时10us

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

void delay(u16 i)

{

while(i--);

}

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

* 函 数 名 : Timer0Init

* 函数功能 : 定时器0初始化

* 输 入 : 无

* 输 出 : 无

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

void Timer0Init()

{

TMOD=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0Xd8; //给定时器赋初值,定时10ms

TL0=0Xf0;

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

EA=1;//打开总中断

TR0=1;//打开定时器 -->启动定时器中断!

ET1=1;

TR1=1;

TH1=(65536-250)/256; //FC

TL1=(65536-250)%256;

}

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

* 函 数 名 : DigDisplay

* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示

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

void DigDisplay()

{

u8 i;

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

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

P0=DisplayData[i];//发送段码

delay(100); //间隔一段时间扫描

P0=0x00;//消隐-->撤销选中;

}

}

void datapros()

{

DisplayData[0]=smgan[ssec%10];

DisplayData[1]=smgan[ssec/10];

DisplayData[2]=0x40;

DisplayData[3]=smgan[sec%10];

DisplayData[4]=smgan[sec/10];

DisplayData[5]=0x40;

DisplayData[6]=smgan[min%10];

DisplayData[7]=smgan[min/10];

}

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

* 函 数 名 : main

* 函数功能 : 主函数

* 输 入 : 无

* 输 出 : 无

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

void main()

{

Timer0Init(); //定时器0初始化

while(1)

{

datapros();

DigDisplay();

}

}

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

* 函 数 名 : void Timer0() interrupt 1

* 函数功能 : 定时器0中断函数

* 输 入 : 无

* 输 出 : 无

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

void Timer0() interrupt 1

{

TH0=0Xd8; //给定时器赋初值,定时10ms

TL0=0Xf0;

ssec--;

if(ssec==00) //1s

{

ssec=100;

sec--;

if(sec==00)

{

sec=60;

min--;

if(min==-1)

{

P1=1;

ssec=0;sec=0;min=0;

TR0=0;

}

}

}

}

void Timer1() interrupt 3

{

TH1=(65536-250)/256; //FC

TL1=(65536-250)%256;

if(p!=1) p15=~p15;

if(p==1) p15=0;

c++;

if(c==250)

{

//c=0;

p=~p;

}

if(c>=250&&1695);

if(c==1696) c=0;

}

B. 谁有单片机的学习板

我有旧的 是我自己用的 +Q,Q:6,4,1,8,2,9,5,1,4 图片



一块板子集合了:单片机学习实验,在系统实时全速仿真调试,双模式编程器,增强型ISP下载线。 有了它,将贯穿于单片机学习入门 → 产品实验开发 → 产品生产的全部过程,而且价格低廉,可谓物超所值。 ▲ 可批量烧写的芯片 AT89S51 AT89S52 AT89S53 AT89S8252 ▲ 可直接在线编程实验开发芯片 AT89S51 AT89S52 AT89S53 AT89S8252 AT89LS51 AT89LS52 AT89LS53 AT89LS8252 WS803A每套共六件 ▲开发,学习,编程成品板一块。 ▲下载线1条。 ▲RS232串口电缆一条。 ▲USB电缆一条。 ▲随机赠送光盘资料 ▲赠AT89S51芯片1块。 ① 名称:RS232插座(DB9);仅在实验模式下做串口通信有用,板上注明“实验用串口”;WS803提供的RS232线一头连接电脑RS232口,另一头就与此插座相连接。 ② 名称:USB插座;WS803A提供的USB连线;此连线共有三个插头,两USB插头,一DB9插头。距DB9插头较短的USB插头连电脑USB插口,另一USB插头与此插口相连接;DB9插头与电脑的RS232口连接。 ③ 名称:蜂鸣器;用于做音乐,发音实验。 ④ 名称:电源指示灯; ⑤ 名称:状态指示灯;在下载或编程期间,此灯闪烁,若你执行的是编程操作,则编程结束后灯灭;若你执行的是下载操作,则下载结束后灯常亮; ⑥ 名称:微动开关;此开关一端接单片机的INT1脚,另一端接地;可做外部中断实验,也可做为一般的按键使用。 ⑦ 名称:微动开关;此开关一端接单片机的C/T0脚,另一端接地;可做外部计数实验,也可做为一般的按键使用。 ⑧ 名称:微动开关;六个开关都有一端接地;可做键盘实验。 ⑨ 名称:集成电路AT93C46;为SPI接口的EEPROM,可做SPI总线编程实验及存储器编程实验。 ⑩ 名称:“实验/编程晶体”;是指该晶体在实验或编程时用(也就是编程座上的单片机用晶体),可以根据需要更换其它标称晶体。 ⑾ 名称:集成电路AT24C01;为I2C接口的EEPROM,可做I2C总线编程实验及存储器编程实验。 ⑿ 名称:8位LED(发光二极管);可用于做8位流水灯实验,或做其他实验的状态指示灯。它们接成共阳形式,选通信号由 Q6等组成的电子开关控制,也就是说P3.7需清零才可点亮。 ⒀ 名称:4位共阳一体化数码管;可用于做数码管动态显示实验,选通信号分别由 Q7,Q8,Q9,Q10等组成的电子开关控制。 ⒁ 名称:下载线插座:通过WS803A配套提供的6芯下载线把WS803上标明的P14、P15、P16、P17、RES、 GND与目标板上的单片机的P14、P15、P16、P17、RES 、GND一一对应连接即可。对于AT89S51 和AT89S52,P14无用可不连接。

C. 用单片机实现P1.5=ACC.2与P2.7或ACC.1与P2.0

不明白想要说 的什么意思,位之间可以直接这样的运算啊,类似:sbit P15=P1^5;sbit P27=P2^7;sbit P20=P2^0; sbit A2=ACC^2;sbit A1=ACC^1; 然后:P15=(A2&P27)|(A1&P20);讨论进Q群127858558

D. 初学单片机,编程不太熟悉,51单片机根据开关状态输出高低电平,有逻辑判断,请教编程思路,用C语言!

编程思路:每次都是将P1口的值读取进来,再屏蔽低4位,仅对高4位进行判断
{
#define INPUTMASK 0xF0
char ReadPort = 0;
ReadPort = P1 & INPUTMASK;
switch(ReadPort)
{
case 0xf0: break; /* 没有任何按键按下,跳出 */
case 0x10: Subfunction1();break; /* P1.4按下,跳转到子函数1 */
case 0x20: Subfunction2();break; /* P1.5按下,跳转到子函数2 */
case 0x40: Subfunction3();break; /* P1.6按下,跳转到子函数3 */
case 0x80: Subfunction4();braak; /* P1.7按下,跳转到子函数4 */
default:
Subfunction5();braak; /* 任意2个或以上按键按下,跳转到子函数5 */
}
}
在switch case函数中采用模块块编程,这里的子函数,即在相应的按键状态下其它端口的状态实现,不再赘述。

E. 51单片机步进电机正反转程序

单片机控制步进电机,我想你说的是两相步进电机,一般是控制其相序分配的顺逆从而控制正反转,一般而言,步进电机相序分配你可以做成一个数组比如step[]={0x03,0x06,0x0c,0x09},这样来说可以假设P0口是步进电机控制口,那么可以按如下方式来控制: while(1) { for(i=0;i<4;i++) { if(fx==1)P0=step[i]; //正向 else P0=step[3-i]; //反向 delay(x); //x大小决定电机速度。
根据电机相数买个驱动器。然后用单片机产生脉冲来控制电机的转动以及正反转。单片机产生脉冲的方法和单片机控制流水灯是一样的。ULN2003D 是驱动步进电机的驱动芯片,主要是匹配电机所需的电流。 由于是四相电机,步进电机之所以可以转动就需要给相绕组提供连续的脉冲,所以需要4个端口来控制四相绕组的工作状态(P15应该是不需要的),具体的编码要看电机的拍数; 一旦明白这些,你就可以很容易编写代码来控制电机的转动了,还有在脉冲间你可以设置不同的延时时间来调节电机的转速。

F. 为什么isp要连接在单片机p15 p16 p17这三个脚呢其他port口不可以吗。详细点吧谢谢

这个是单片机的设计者定的,---没有为什么

接在p15 p16 p17是AT系列51单片机

STC系列的是接在P3.0 P3.1

G. 帮解释一下这个单片机的程序

#include <reg52.h> //包含51单片机头文件
//共阳极数码管0-9数组编码
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管位选数组编码,这里有8位数码管(既8个数码管)
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//下面是变量申明
unsigned char mode=0;
unsigned int temp;
float dianya;
unsigned int dianya1;
//下面是51单片机端口位申明
sbit START=P1^5;
sbit EOC=P1^6;
sbit OE=P1^7;

sbit a=P1^0;
sbit b=P1^1;
sbit c=P1^2;

sbit key=P1^3;
//一个延时函数
void delay(unsigned int z)
{
while(z--);
}
//按键扫描函数
void key_scan()
{
if(key==0) //当key按下时,key既端口P1^3
{
delay(10); //延时
if(key==0) //在检测端口P1^3是否为低
{
/********************************************
到这里你发现你程序有问题
********************************************/
}
}
switch (mode) //这里也有问题,如果mode只为0,变量a b c清0,可以用if语句
{
case 0 : a=0;b=0;c=0;break;

}
}
void main() //主函数
{
unsigned char aa[4],i;
while(1)
{
key_scan();

P2=wei[0]; // 选中第一个数码管
P0=seg[mode]; //第一个数码管显示存在变量mode里的数

/*******************************************
下面部分应该为从AD检测一个电压
*******************************************/
START=1; //P1^5 置1
delay(10); //延时
START=0; //P1^5 置0
while(EOC==0); //如果P1^6为0,一直循环等待
OE=1; //P1^7置1
temp=P3; //把P3端口上8位数赋值给变量temp

dianya=(5.0/255)*temp; //8位AD值转换成电压显示值
dianya1=dianya*10;
aa[2]=dianya1/10; //把转换后的值除10
aa[3]=dianya1%10; //把转换后的值求模

for(i=2;i<4;i++)
{
P2=wei[i]; //数码管2,3分别位选
if(i==2)
P0=seg[aa[i]]&0x7f; //显示转换后的电压值aa[2]并加上点 (除10的值)
else P0=seg[aa[i]]; //显标转换后的电压值aa[3](求模值)
delay(1);
}
}
}

H. STC单片机的I/O口控制继电器的问题

我想问下断开之后还能吸和再断开吗?或者就永远断开 ?
而且你的中断程序里没有清零中断标志位,这样就停留在中断里了

I. 请帮忙一个单片机中断应用编程

50hz方波周期是20毫秒,5Hz方波周期是200毫秒。晶振11.0592M10毫秒定时初值为65536-9216.程序为:
#include<reg51.h>
#define uchar unsigned char
uchar cnt=0;
sbit p15=P1^5;
sbit p17=P1^7;
void d0isr() interrupt 1
{
TH0=(65536-9216)/256;
TL0=(65536-9216)%256;
cnt++;
if( cnt%2 ==0 )p15=~p15;
if(cnt%10 ==0)p17=~p17;
cnt%=100;
}
main()
{
TMOD=0x01;
TH0=(65536-9216)/256;
TL0=(65536-9216)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}

阅读全文

与单片机p15开发相关的资料

热点内容
安卓怎么弄成苹果在线 浏览:427
谷歌web服务器地址 浏览:898
安卓锁屏图片如何删除 浏览:719
python3多进程编程 浏览:711
证明代码是程序员写的 浏览:396
算法错误发现办法 浏览:409
河南省医院挂号是哪个app 浏览:627
冬日恋歌哪个APP能看 浏览:673
委内瑞拉加密货 浏览:8
程序员写日记哪个软件好 浏览:108
加密机操作手册 浏览:860
dos命令自动关闭 浏览:328
心田花开app在哪里评价 浏览:449
求索记录频道哪个app可以看 浏览:730
金梅瓶pdf下载 浏览:985
机器软件用什么编程 浏览:845
java虚拟机指令 浏览:671
shell编程入门书籍 浏览:946
大连桶装水溯源码售价 浏览:302
php怎么跳转到电脑 浏览:414