关键词不能为空

当前您在: 主页 > 英语 >

瓶颈STC15F204EA单片机旋转编码器版白光T12控制器代码(开发固件)(by金向维)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-24 08:47
tags:

-

2021年1月24日发(作者:蹈)
/*************STC15F204EA
单片机旋转编码器版白光
T1 2
控制器代码
(
开发固件
)(by
金向维
)******* ************/


#include


#include









//
单片机头文件
,24MHz
时钟频率

//
头文件

unsigned
char
code
duanma[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,



0x7d,0x07,0x7f,0x6f,0x40,0x73};


















//
共阴数码管 段码数据
(0,1,2,3,4,5,6,7,8,9),


数第二个是显 示负号
-
的数据
,
倒数第一个
是显示字母
P
的数据

unsigned
int
code
wendubiao[6 2]={924,959,996,1033,1071,1110,1150,1190,1232,1273 ,1315,1358,1401,1443,1487,

1501,1574,1619, 1663,1706,1751,1756,1776,1810,1853,1903,1958,2017, 2078,2141,

2204,2266,2327,2387,2444,2500,2 554,2607,2657,2706,2738,2800,2844,2889,2931,




sbit
t12=P2^0;

sbit
bw=P3^4;

sbit
sw=P3^5;

sbit
gw=P3^6;



















2974,3016,3056,3098,3139,3179,3 218,3257,3296,3333,3372,3408,3446,3484,3519,
35 54,3590};






//
根据
NTC
电阻随温度变化进而引起电压变化









得出的数据
,
用来查表计算室温
(
进而对热









电偶冷端补偿
)

//T12
通过
P2.0
控制

//
数码管百位位选为
P3.4

//
数码管十位位选为
P3.5

//
数码管个位位选为
P3.6

//
数码管的
a
段本应该用
P1.0
控制
,
由于
P1.0
被用来控 制
T12,
所以要用
P3.7
替代
P1.0

//
编码器的
b
脚接
P1.4

//
编码器的
a
脚接
P3.2

//
震动开关接
P0.1

//
编码器的按键接
P3.3

sbit
tihuan=P3^7;


sbit
encoderb=P1^4;

sbit
encodera=P3^2;

sbit
zhendongkaiguan=P0^1;

sbit
bianmaanniu=P3^3;

sbit
a7=P2^7;

sbit
a6=P2^6;

sbit
a5=P2^5;

sbit
a4=P2^4;

sbit
a3=P2^3;

sbit
a2=P2^2;

sbit
a1=P2^1;

bit
e=1,
f=1;



















//
数码管小数点

//
数码管
g


//
数码管
f


//
数码管
e


//
数码管
d


//
数码管
c


//
数码管
d







//e
f
用来保存编码器上一次的状态

//
用于改变设定温度后延时显示设定温度
(
而不是立刻显示
t12
温度
)

//
显示函数直接显示
huancun,
要显示一个数据将必 须这个数据赋值给缓存
(
由于数

码管只有三位
,
为了在显 示三位数同时保持四位数的精度
,
所以实际显示的是数

据除以
10,
并支持显示负数
)

bit
huancunkaiguan=0;


signed
int
huancun;














signed
int
shiwen;




//10倍实际室温
,
即实际室温乘以
10(
为了精确
)(
允许 的室温范围为
-
11
度至
50

)

// T12
烙铁头的实际温度
(
非热电偶的温差
)(
同样为
10
倍温度
)

//
设定温度
(
范围
200~450

)

//T12
两个周期间的温差

//

200ms
加热周期内需要加热的次数
(
一次等于
1ms,
相当于加热占空比
)

//
加热周期
200ms
计数

//
用 于改变设定温度后延时显示设定温度
(
而不是立刻显示
t12
温度
)

signed
int
t12wendu;


signed
int
shedingwendu;


signed
int
wencha;

signed
int
jiareshu;





unsigned
char
zhouqijishu;


unsigned
int
huancunjishu;


unsigned
long
cankaodianya0,
t12dianya,
ntcdianya,
dianyuandianya;


/**************** ****************1ms
延时函数
******************* ******************************/

void
delay_ms
(unsigned
int
a)

//24MHz
时钟时的
1
毫秒延时函数

{







unsigned
int
b;

while(a
--
)

{

for(b=0;b<1200;b++);







}


}

/********** **********************10us
延时函数
************ ************************************/

void
delay_10us
(unsigned
int
a)

{







unsigned
int
b;

while(a
--
)

{

for(b=0;b<12;b++);



//24MHz
时钟时的
10
微秒延时函数







}


}

/ ********************************
数码管延时关断函数
* *****************************************/

void
guanduan
(void)


{



delay_ms(1);




//
延时





//
用于关断数码管的位选







}


bw=1;

sw=1;

gw=1;













//
关断百位

//
关断十位

//
关断个位

/******* *************************
公共函数
10(
显示
)********************************************/

void
gonggonghanshu10(unsigned
char
a)

{

















}


/****************************** **
显示函数
************************************ ****************/

void
display(signed
int
a)


{




unsigned
char
baiwei,

shiwei,

gewei,




signed
int
c;





if(a<0)




































d;

//
定义百位
,
十位
,
个位
,
每次显示帧 数






//
用于处理数字
a

//
如果
a
是负数

//

a
的相反数

//
否则

//
就直接取
a





//
显示函数
(
显示实际数据除以
10,
支持显示负数
)

a7=a&0x80;


a6=a&0x40;


a5=a&0x20;


a4=a&0x10;


a3=a&0x08;


a2=a&0x04;


a1=a&0x02;


tihuan=a&0x01;









//
小数点

//g

//f

//e

//d

//c

//b

//a

c=
-
a;





else









c=a;

c=c/10;







//
计算百位




baiwei=c/100;




c=c%100;




shiwei=c/10;





c=c%10;




gewei=c;









//
计算十位







//
计算个位





for(d=0;d<20;d++)





{








if(a<0)









//
如果
a
是负数
,
则百位显示负号






//
显示部分
,
每次 显示
20
个循环
(20

)

gonggonghanshu10(duanma[10]);








//
否则直接显示百位
























































}

}


else



gonggonghanshu10(duanma[baiwei]);

//
显示百位













//
打开百位

//
延时关断百位

bw=0;

guanduan();


gonggonghanshu10(duanma[shiwei]);


sw=0;













//
显示十位

//
打开十位

//
延时关断十位

guanduan();


gonggonghanshu10(duanma[gewei]);


gw=0;













//
显示个位

//
打开个位

//
延时关断个位

guanduan();


/******************** ************ADC
公共函数
*********************** ***************************/

void
gonggonghanshu2(void)

{











}


/********************************ADC
测 电压函数
****************************************** ******/

void
adc
(void)

{








//ADC
函数
,
用于测量和计算各种电压

ADC_CONTR=0x88;

delay_10us(2);






//ADC_POWER,
SPEED1,
SPEED0,
ADC_FLAG
---
ADC_START,
CHS2,
CHS1,
CHS0








//
延时等待转换结束

//
取转换结果低八位中的低二位

//
把结果转换成十进制数据< br>(10

ADC,
最大值
1024)

//
计算电源电压
,
单位
mV





//
此函数测量单片机电源电压

ADC_RESL=ADC_RESL&0x03;

cankaodianya0=(ADC_RES*4+ADC_RESL);

dianyuandianya=2549760/cankaodianya0;

-


-


-


-


-


-


-


-



本文更新与2021-01-24 08:47,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/559765.html

STC15F204EA单片机旋转编码器版白光T12控制器代码(开发固件)(by金向维)的相关文章

STC15F204EA单片机旋转编码器版白光T12控制器代码(开发固件)(by金向维)随机文章