十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#includereg51.h
创新互联建站专注于仁布网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供仁布营销型网站建设,仁布网站制作、仁布网页设计、仁布网站官网定制、微信小程序定制开发服务,打造仁布网络公司原创品牌,更为您提供仁布网站排名全网营销落地服务。
#includeINTRINS.h
#define u16 unsigned int
#define u8 unsigned char
/*********************************************************/
u8 ds[3]; //数码管显示缓存
//共阳
code u8 w[]={0x01,0x02,0x04,0x08}; //位码
code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//断码
void dispaly(){//显示函数
static u8 a;
if(++a=3)a=0;
P0=0xff;
P2=w[a];
P0=d[ds[a]];
}
/****************************************/
void init() //初始化函数
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
u16 count=0; //计数
u16 V=0;//速度
u16 js;//计时
u8 mc=P1^1;//脉冲引脚
u8 tt=0xff;
void smmc(){
tt=1;
if(mc)tt|=0x01;
if((tt0x03)==0x02){//下降沿脉冲
if(count65535)count++;
}
}
/***********************************/
void main()//主函数
{
init();//系统初始化
TR0=1; //定时器开始计时
while(1){
ds[0]=V/100%10; //计数送到数码管显示缓存中
ds[1]=V/10%10;
ds[2]=V%10;
smmc();
if(js=10000){//10s
js=0;
V=4*count/10+2;//计算速度
count=0;
}
}
}
/****************************/
void timer0() interrupt 1//1ms定时器
{
TH0=(65536-1000)/256;//重载初值
TL0=(65536-1000)%256;
dispaly();//显示
js++;
}
定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料
1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。
2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
#include stdlib.h
srand(dat); //初始化随机种子,使用该函数需要上面的头文件。如果不要这个,每次开机,对应的随机数都是相同的. dat 也是需要是个随机数,一般可以用掉电存储的方式来读取。
dat = rand() ;
extern void _nop_ (void); //空操作,相当于8051的NOP指令
extern bit _testbit_ (bit); //测试并清零位,相当于8051的JBC指令
extern unsigned char _cror_ (unsigned char, unsigned char); //字符循环右移
extern unsigned int _iror_ (unsigned int, unsigned char); //整数循环右移
extern unsigned long _lror_ (unsigned long, unsigned char); //长整数循环右移
extern unsigned char _crol_ (unsigned char, unsigned char); //字符循环左移
extern unsigned int _irol_ (unsigned int, unsigned char); //整数循环左移
extern unsigned long _lrol_ (unsigned long, unsigned char); //长整数循环左移
extern unsigned char _chkfloat_(float); //测试并返回源点数状态
看你的要求~~
C51定义的库函数与标准c语言中定义的库函数不同;与标准c的输入输出处理不相同;与标准c在函数使用方面也有一定的区别。数据类型和标准c语言中的数据类型有一定的区别,变量类型比如int类型占用空间不一样,像特殊位型sbit在标准c中就没有;变量中的存储模式与标准c语言中的变量的存储模式不相同,C51存储类型有ddata、bdata、idata等多种;与标准c的输入输出处理不相同;与标准c在函数使用方面有一定的区别。
单片机C51语言是建立在标准c语言架构基础上的,两者基本语法和结构是相通、一样的,但是单片机C51语言由于加入了对单片机I/O口,寄存器的控制,所以才与标准c语言有所差异。
C51是基于标准的C语言扩展而来的,所以,标准C语言能做的东西,C51也可以。
平方运算,自不必说,就是两个数相乘:
例如:float a,b,c; c = a*b;
开方,则需要用到库函数:
标准c语言里用的是 sqrt()函数,这个函数包含在math.h文件中。
所以:
#include math.h
c = sqrt(a);
就可以了