#include <REG51.H>
#include <intRIns.h>
#include <ABSACC.h>
#include <math.h>
#include <sigmod.h>
#include <tc.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define RldTmr(fr) 65536 - (11059200 / 12) / (fr << 1)
#define FuDian(n) (n << 1) / 3 //附点n分音符的换算
sfr CLK_DIV=0x97;
uchar xdata P374 _at_ 0xFA00;
sbit deng=P1^0;
sbit BUZZ = P3^6;
uchar Goflag;
long temp1; //无符号数据
long temp2; //有符号数据
long tempp; //冷端数据
float A1out; //测量值
float A2out; //冷端值
float A3out; //线电阻值
float Azero; //零点值
float AD_OUT;
float cold;
uchar in_mod;
bit enable = 1, tmrFlg = 0;
uchar T0RH = 0XFF, T0RL = 0X00;
sbit CS_CS5550 = P1^0; // --OUT
sbit MOSI = P1^1; // --OUT
sbit MISO = P1^2; // --IN
sbit CLK = P1^3; // --OUT
sbit dat = P1^4;
sbit key = P1^5;
sbit cs = P1^6;
sbit clk = P1^7;
sbit BB = P3^2; //4051-B, --OUT
sbit AA = P3^3; //4051-A, --OUT
uint code noteFreq[] = { //中音 1-7 和高音 1-7对应的频率列表
523, 587, 659, 698, 784, 880, 988,
1047, 1175, 1319, 1397, 1568, 1760, 1976
};
uint code tmrRld[] = { //中音 1-7 和高音 1-7对应的定时器重载值
RldTmr(523), RldTmr(587), RldTmr(659), RldTmr(698), RldTmr(784), RldTmr(880), RldTmr(988),
RldTmr(1047), RldTmr(1175), RldTmr(1319), RldTmr(1397), RldTmr(1568), RldTmr(1760), RldTmr(1976),
};
uchar code musicNote[] = { //音名
1, 2, 3, 1,
1, 2, 3, 1,
3, 4, 5,
3, 4, 5,
5, 6, 5, 4, 3, 1,
5, 6, 5, 4, 3, 1,
1, 5, 1,
1, 5, 1
};
uchar code noteDuration[] = { //音名对应的时值,4表示4分音符,8表示8分音符,16表示16分音符
4, 4, 4, 4,
4, 4, 4, 4,
4, 4, 2,
4, 4, 2,
FuDian(8), 16, FuDian(8), 16, 4, 4,
FuDian(8), 16, FuDian(8), 16, 4, 4,
4, 4, 2,
4, 4, 2
};
uchar code code2[] = {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x01,0x80,0x00, 0x6f};
// 0 1 2 3 4 5 6 7 8 9 - . blank error
// 函数定义
void long_delay(void);
void short_delay(void);
void delay1ms(unsigned char);
void led_write(unsigned char,unsigned char);
uchar key_read(void);
void send_byte(unsigned char);
uchar receive_byte(void);
void led_real_disp(float RealData);
void delay(int ms);
void outb(uchar dat);
uchar inb();
void wRIte_w(uchar cmd, ulong val);
ulong read_w(uchar cmd);
void CS5550Init();
float couple_liner(uchar ch,float dat);
void datadealt();
void init_time1(); //interrupt A/D samples initialization
void delayano(uint n);
void PlayMusic(uchar speed); //固定标准为4分音符的速度:例如speed = 108 表示一分钟扫过108个4分音符
uchar key_board_value_all = 0;
void main(void)
{
CLK_DIV=0x40;
Goflag = 0; in_mod = 8; //75mV
CS5550Init(); EA = 1;
wRIte_w(0x40,0x000011); delay(1);
BB = 0; AA = 0; wRIte_w(0xe8,0xffffff);
Goflag = 0;
init_time1();
TMOD = 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
while(1)
{
if (Goflag == 1)
{
tempp = read_w(0x0e); temp1 = read_w(0x16); temp2 = read_w(0x18);
A1out = temp1 /(float)0x01000000 * 124.0;
if ((tempp & 0x800000) == 0x800000) { A1out = - 1.0 * A1out; } // 测量 A/D 转换器第一通道测量mv值
A2out = (temp2 / (float)0x01000000) * 0.122264 * 1.00 + 0.0155 ; // 测量 A/D 转换器第二通道测量v值,即冷端温度
datadealt(); led_real_disp(90-AD_OUT); Goflag = 0; // 显示测量值
key_board_value_all = key_read();
}
// if (deng==1)
// {
// while(deng==1)
// {
// P374=0xfe;delay1ms(70);
// P374=0xfd;delay1ms(70);
// P374=0xfb;delay1ms(70);
// P374=0xf7;delay1ms(70);
// P374=0xef;delay1ms(70);
// P374=0xdf;delay1ms(70);
// P374=0xbf;delay1ms(70);
// P374=0x7f;delay1ms(70);
// }
// }
// else
// {P374=0xff;}
PlayMusic(72);
//delayano(40000u);
}
}
void delayano(uint n) {
uint i;
for (i = 0; i < n; i++) ;
}
void init_time1()
{
TMOD = 0x01;
TH1 = 0x4C;
TL1 = 0x00;
ET1 = 1;
TR1 = 1;
}
int key1_confirm_count = 0; // 按键滤波
int key1_value = 0;
int key1_state = 0;
int key1_count = 0;
int key1_pressed_flag = 0;
int key1_relessed_flag = 0;
int key2_confirm_count = 0; // 按键滤波
int key2_value = 0;
int key2_state = 0;
int key2_count = 0;
int key2_pressed_flag = 0;
int key2_relessed_flag = 0;
int led_index = 0;
int led_enable = 1;
unsigned char led_table[10] = {0xff, 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
void time1() interrupt 3 //50ms定时中断
{
TH1=0x4C;
TL1=0x00;
Goflag = 1;
key1_value = key_board_value_all & 0x01;
if (key1_value == key1_state)
{
key1_count = 0;
}
else
{
key1_count++;
if (key1_count > key1_confirm_count)
{
if (key1_value)
{
// 按下,触发一次
key1_pressed_flag = 1;
}
else
{
// 松开按键,触发一次
key1_relessed_flag = 1;
}
}
}
if (key1_pressed_flag)
{
key1_pressed_flag = 0;
led_enable = 1;
}
if (key1_relessed_flag)
{
key1_relessed_flag = 0;
led_enable = 0;
}
if (led_enable)
{
led_index++;
if (led_index > 7)
{
led_index = 1;
}
}
else
{
led_index = 0;
}
P374 = led_table[led_index];
}
float couple_liner(uchar ch, float dat)
{
uchar i, line_no; float kk, bb; float *ptr;
ch = ch - 10;
if (ch < 11) //cold compensation
{
ptr = cold_t[ch];
for (i = 0;i < 2;i++)
{
line_no = i; if (cold < *(ptr+i)) break;
}
ptr = cold_k[ch]; kk = *(ptr+line_no);
ptr = cold_b[ch]; bb = *(ptr+line_no);
dat = dat + cold * kk + bb;
}
if (ch < 14) //TC or TRD linerity
{
ptr = x_ad[ch];
for (i = 0;i <= linery_no[ch];i++)
{
line_no = i; if( dat < *(ptr+i) ) break;
}
if (i > linery_no[ch]) { ptr = x_ad[ch]; dat = *(ptr+line_no); }
ptr = k_ad[ch]; kk = *(ptr+line_no);
ptr = b_ad[ch]; bb = *(ptr+line_no);
dat = kk*dat + bb;
}
return dat;
}
//0-10V 不适用
void datadealt()
{
uchar i; uchar y; float temp;
cold = sqrt(2196200.0+((1.8639-(A2out + 1.00)*21.0)/0.00000388))-1481.96;
if ((cold > 69.9) || (cold < -25.0)) cold = 25.0; //计算冷端温度及补偿
for(i = 0; i < 1; i++)
{
y = in_mod; //75mV
if (y < 10) //DC
{
if ((y == 1)||(y == 6))
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机自动化微机课设
共16个文件
h:2个
obj:2个
lst:2个
需积分: 5 1 下载量 146 浏览量
2024-03-30
14:52:44
上传
评论
收藏 63KB ZIP 举报
温馨提示
本文的智能马桶控制器系统的主要功能为:完成马桶冲水、坐垫加热和控制(测温)、喷淋控制、风干控制。 智能马桶控制器系统的设计方案 使用的元器件:PCB板,实验箱上的直流电机、步进电机、扬声器、8个小灯,导线,杜邦线,绝缘胶布等。 (1)喷淋功能的设计方案 对于喷淋功能,选择无源扬声器模块来表示。具体实现过程:按下电路板上的开关,给CPU输入信号,扬声器播放出音乐,来模拟喷淋效果。 (2)风干功能的设计方案 对于风干功能,我们选择用步进电机来表示,具体实现过程:按下键盘上的按键08,步进电机开始转动,代表风干开始;按下键盘上的按键09,步进电机转动变慢,代表风干的功率变低;按下键盘上的按键10,步进电机的转动变快,代表风干的功率增大;按下键盘上的按键11,步进电机反转,代表风干时开始吹冷风。 (3)加热与测温功能的设计方案 对于测温功能,我们选择用温度传感器与AD来实现,具体实现过程:利用电路板上的温度传感器感知环境的温度,再利用AD模块转换为数字量在LED上显示。 对于加热功能,我们选择用流水灯与LED来表示,具体实现过程:按下键盘上的按键08,打开自动加热功能,在LED灯上出现温度
资源推荐
资源详情
资源评论
收起资源包目录
51课设代码.zip (16个子文件)
课设
keshi.LST 24KB
keshi.c 14KB
keshe.lnp 58B
STARTUP.LST 14KB
keshe.uvopt 54KB
keshe_uvproj.bak 13KB
keshe.M51 36KB
STARTUP.A51 6KB
sigmod.h 1KB
keshe.plg 0B
keshe_uvopt.bak 54KB
keshe.uvproj 13KB
STARTUP.OBJ 758B
TC.h 16KB
keshe.hex 2KB
keshi.OBJ 44KB
共 16 条
- 1
资源评论
自动化Cc努力学习
- 粉丝: 47
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功