-
/*************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
-
上一篇:二年级英语上 周末作业(八)
下一篇:2021届高二英语周末卷week1