用c语言写出P1.0驱动发光二极管闪烁,要求亮 2s,灭 1 秒. 晶振 11.0592Mhz?
- 基于51单片机的简易计数器设计,求c语言程序!
- 试编写一个流水灯的程序(C语言)
- 单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波
- 51单片机c语言延时程序 求解 请问下列程序中的110 是怎么计算出来的 晶振是11.0592
基于51单片机的简易计数器设计,求c语言程序!
#include
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsigned char sec=0,scanled;
unsigned char disdat[2];
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
}
void t0isr() interrupt 1 //秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==20)
{
time=0;
sec++;
if(sec>60)sec=0;
}
dischg();
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[7]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[6]];
break;
default:break;
}
scanled++;
scanled%=2;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
sec=0;
scanled=0;
time=0;
dischg();
while(1)
{
if(key1==0)
{
while(key1==0);
TR0=0;
}
if(key2==0)
{
while(key2==0);
TR0=1;
}
if(key3==0)
{
while(key3==0);
sec=0;
dischg();
}
}
}
试编写一个流水灯的程序(C语言)
#include<reg52.h>
#include <intrins.h>
void main()
{
unsigned int x,y;
P1=0xfe;
while(1)
{
P1=_crol_(P1,1);
for(x=500;x>0;x--)
for(y=113;y>0;y--);
}
}
P1接二极管(低电平有效)每隔x毫秒流动一下(可改变x的值)
震荡周期为11.0592MHz
把上面的P1=0xfe;改为P1=0x01;!!!
高电平也许要用上拉电阻!!
单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波
1
2
3
4
5
6
7
8
9
10
11
12
#include<reg52.h>
sbit squ_out=P1^7 ;
voidmain()
{
bit squ_mirror;
unsigned inta,b;
EA =0;
while(1){
for(a=106;a;a--)for(b=1085;b;b--);
squ_out = squ_mirror = ~ squ_mirror;
}
}
周期小了一点点,大约少了57微秒左右。
如果要很准,你的晶振也真的很准,就用下面这个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<reg52.h>
sbit squ_out=P1^7 ;
voidmain()
{
bit squ_mirror;
unsigned inta,b;
unsigned charc;
EA =0;
while(1){
for(a=106;a;a--)for(b=1085;b;b--);
for(c=12;c;c--);
c++;
squ_out = squ_mirror = ~ squ_mirror;
}
}
51单片机c语言延时程序 求解 请问下列程序中的110 是怎么计算出来的 晶振是11.0592
在keil里单步调试的时候查看汇编代码,就知道了是怎么运行的了,楼主要是懂汇编一看就会明白的,好运