❶ 15单片机编写程序,时钟
#include<reg51.h>
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsigned char sec=0,min=0,hour=12,scanled;
unsigned char key,flashbit,mode,time;
unsigned char disdat[6];
sbit led=P1^0;
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
void flash()
{
switch(flashbit)
{
case 0:break;
case 1:
disdat[4]=0x10;
disdat[5]=0x10;
delay(50);
dischg();
delay(80);
break;
case 2:
disdat[2]=0x10;
disdat[3]=0x10;
delay(50);
dischg();
delay(80);
break;
case 3:
disdat[0]=0x10;
disdat[1]=0x10;
delay(50);
dischg();
delay(80);
break;
default:break;
}
}
void t0isr() interrupt 1//秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case 0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
hour++;
if(hour>23)hour=0;
}
}
}
break;
case 1:
if(time==20)
{
time=0;
if(sec>0)sec--;
else if(min>0){sec=59;min--;}
else if(hour>0){sec=59;min=59;hour--;}
else {hour=0;min=0;sec=0;}
}
break;
}
dischg();
}
void t1isr() interrupt 3//显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case 4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case 5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=55;
min=59;
hour=23;
flashbit=0;
scanled=0;
time=0;
mode=0;
dischg();
while(1)
{
flash();//闪烁
//led=1;
if((P3&0x0f)!=0x0f){
key=P3&0x0f;
while((P3&0x0f)!=0x0f);
led=0;
delay(10);
key|=0xf0;
switch(~key)
{
case 0x01://p3.1选择调时、分、秒
TR0=0;
flashbit+=1;
if(flashbit>3){flashbit=0;TR0=1;}
break;
case 0x02://p3.2调数
if(flashbit==0)break;
if(flashbit==1)
{
hour++;
if(hour>99)hour=0;
}
if(flashbit==2)
{
min++;
if(min>59)min=0;
}
if(flashbit==3)
{
sec++;
if(sec>59)sec=0;
}
break;
case 0x04: //选择正/倒
TR0=0;
mode++;
mode&=0x01;
if(mode==0){sec=0;min=0;hour=0;}
dischg();
break;
case 0x08://启动/暂停
TR0=~TR0;
break;
default:break;
}
}
}
}
❷ 怎么让stc15单片机全部的io口工作模式和普通51一样
普通51,默认P0是开漏模式,其它是准双向模式。
STC的增强型单片机,一般都有PxM0、PxM1两组寄存器,可以设置IO模式,具体你看一下DataSheet文档。默认好像都是准双向模式。
❸ 15单片机和51的区别
15单片机是STC系列单片机的一大类别,属于51单片机范畴。1T模式,比传统的51单片机速度快8~12倍。
❹ 15单片机的1us延时,要精确,11.0592MHZ,1T的,就是蓝桥杯的那个板子,谢谢^_^
纠正一下,STC12C5A60S2内核是1T的,默认是没有进行12分频的,11.0592晶振,那么机器周期=时钟周期=1/11.0592=0.09042us
这个软件延时是有点误差,1us左右,想要精准,还是用定时器吧。
那么1us延时如下:
void Delay1us() //@11.0592MHz
{
_nop_();
}
或者
void delay1us(void) //误差 -0.005353009259us
{
unsigned char a;
for(a=4;a>0;a--);
}
或者
void delayus(unsigned int us)
{
while(us--);
}
❺ stc15单片机和51关于模式0的区别
区别15系列和51系列单片机定时器的区别 STC-ISP这个定时器所有的生成代码的部分应该是基于15系列(博主测试15系列设置好基本不需要更改可以直接使用。
15单片机是STC系列单片机的一大类别,属于51单片机范畴。1T模式,比传统的51单片机速度快8~12倍。STC的51单片机。
为了更多更能的使用和运用于不同场合,STC51单片机设计了4中IO口模式,分别是:准双向IO口模式、推挽输出模式、高阻输入模式和开漏输出模式。
基本信息
同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51,PHILIPS,和WINBOND等,我们常说的已经停产的89C51指的是ATMEL公司的AT89C51单片机,同时是在原基础上增强了许多特性。
如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。
❻ 关于R80515单片机
你用fpga的代码因该有两部分,一部分是fpga模拟这个单片机的核,另一个是单片机本身的程序,你买个单片机将单片机那部分程序烧进去就好了
❼ stc8单片机比stc15单片机有哪些地方好的
STC8是最新一代的,和STC15比指令周期又有加快。硬件也更强悍,5个16位自动重装定时器,4路高速串口复用了可当九组,15路12位800K高速ADC 并且有了ADC参考电压引脚(STC15是10位AD),STC15没有。多达59个IO。还有就是STC8现在没直插型号了,这一点的话,STC15更灵活一些。
❽ stc15系列单片机哪个型号的最流行
这两个系列,并没有哪个好,哪个不好的说法。关键要看你的应用了,要看应用在什么产品上。
STC15系列型号较多,封装也多,选择性很大。因STC15的功能也很强大了,速度也很快的。对于一般的中低档产品是足够用了。更主要是开发软件都通用,学习和开发也是最容易的。是目前各高校开设单片机课程的首选。属于51系列,应用的时间最长了,已成为一个工业标准了。
而STM8是STC32的低端产品,属于ARM的内核,学习和开发,对于初者是有一定的难度。功能很强大,速度快。但是新型的单片机,销售和开发应用的时间并不长。目前还并不是高校开设的课程。
❾ STC15系列单片机的延时函数问题
你这里的系统频率应该是指晶振频率,和指令周期是两码事,不过他们是存在个比率关系;
如C51芯片,通常系统频率为12MHz,但是其最小指令周期为 1uS,即 1MHz;
又如STM32f1xx芯片,其晶振频率为12MHz,可在内部就把这个频率提升到了72MHz,这样其最小指令周期就会比 1uS小得多了;
❿ stc15单片机
先解决收发一个字符的问题。