武汉理工大学《单片机实习报告书》
参考文献
[1] 谢自美. 电子线路设计·实验·测试(第三版).武汉:华中科技大学出版社 [2] 李群芳. 单片微型计算机与接口技术(第3版).电子工业出版社,2008 [3] 刘教瑜. 单片机原理及应用.武汉理工大学出版社,2011 [4] 张东亮. [5] 郭天祥. 51
单片机原理与应用.人民邮电出版社,2009 单片机C语言教程.电子工业出版社 - 21 -
武汉理工大学《单片机实习报告书》
附录1:最小系统原理图
图1 最小系统原理图
- 22 -
武汉理工大学《单片机实习报告书》
附录2:C语言源程序
发送机主程序: #include
#define NO_DEF
20
//声明无效键值 //声明显示数字的标志 //声明显示温度的标志
#define SHOW_NUM 1 #define SHOW_TEP 0 #define CLEAR 11 #define
//定义清0键
//定义功能切换键
SWITCH 10
typedef unsigned char uchar; typedef unsigned int uint;
#define SM_PORT P0 #define KEY P3
//声明数码管数据端口 //声明矩阵键盘端口
sbit dula = P2^6; sbit wela = P2^7;
//声明数码管段选端口 //声明数码管位选端口
sbit DS = P2^2; //声明温度传感器的数据端口
uint temp; // variable of temperature ,用于接收来自DS18B20传回的温度数据 uint key_value=20; uchar show_flag=SHOW_TEP; uchar send_cnt=0;
uchar *s;
uint tep_index[4]={0,0,0,0};
//温度索引,因为用前4位数码管显
- 23 -
武汉理工大学《单片机实习报告书》
示温度值,后两位分别显示-C,故温度索引之定义了4位 uchar tem_value[6]={0x3f,0xbf,0x3f,0x3f,0x40,0x39}; 的,数码管显示码
uint num_index[6]={13,13,13,13,13,13}; uchar num_value[6]={0,0,0,0,0,0}; 显示码值
unsigned char code table[14]={0x3f,0x06,0x5b,
void delayms(uint count); void key_scan();
void display(uchar ch[6]);
void num_shift(uint *num,uint new_key_value); void dsreset(void); bit tmpreadbit(void); uchar tmpread(void);
void tmpwritebyte(uchar dat); void tmpchange(void); void tmp();
void toTmpIndex(uint *index);
void indexToValue(uint *index,uchar *value,int flag); void shut_down();
- 24 -
//温度值对应
//数字索引
//要显示的数字对应的数码管
0x4f,0x66,0x6d, 0x7d,0x07,0x7f, 0x6f, //数字:0——9
0x39, //字母:C 数组第10个字符 0x40, //字符:- 数组第11个字符 0x80, //字符:. 数组第12个字符 0x00 //无显示 数组第13个字符 };
武汉理工大学《单片机实习报告书》
void main() {
TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; SCON = 0x40; EA = 1; PCON = 0x80; ES = 1; TR1 = 1; while(1) {
key_scan(); delayms(1);
if(key_value==SWITCH)
//检测功能切换键
//开启定时器1,开始发送数据
//串口波特率加倍
//设置串口的工作方式为方式1
//设置定时器的工作方式为方式2
//设置波特率为19200
是否被按下
{ }
switch(show_flag) {
case SHOW_NUM:
//key_scan();
//检测数字键是否被按
shut_down(); key_value=NO_DEF;
//将键值赋值为无效值
if(show_flag==SHOW_TEP)
show_flag=SHOW_NUM;
else
show_flag=SHOW_TEP;
if(key_value<=9)
- 25 -