程序可分为四个模块:
主函数模块。
模数转换模块。
液晶显示模块。
时钟模块。其中,主函数模块做一些初始化和函数调用工作,模数转换模块主要将温度、压力和电压的值转化为数字量供液晶显示用,时钟模块主要读取时间,可以让时钟正常运行,液晶显示模块将得到的模数转换传递过来的数字量和时钟模块的时间显示到液晶面板上。
3.2 程序框图。
1、主流程图。
2、主函数模块。
3、模数转换模块。
4、液晶显示模块。
5、时钟模块。
3.3 源程序。
主函数模块。
#include ""
#include <>
void delay1us(unsigned char us)
while (us)
void sysclk_init (void系统始终初始化。
int ioscxcn = 0x67;
for (i=0; i < 256; i
while (!oscxcn & 0x80
oscicn = 0x88;
#define prt0cf p0mdout
#define prt1cf p1mdout
#define prt2cf p2mdout
void port_init (void端口初始化函数。
xbr0 = 0x07enable smbus, spi0, and uart0
xbr1 = 0x00;
xbr2 = 0x44enable crossbar and weak pull-ups
emi0cf = 0x27;
emi0tc = 0x21;
p74out = 0xff;
p0mdout = 0x15;
p1mdout |=0x3cp1.2-p1.5推挽输出。
p1 &=0xc3p1.2-p1.5=0
void spi0_init (voidspio初始化。
spi0cfg = 0x07data sampled on 1st sck rising edge
spi0cfg|=0xc0ckpol =1;
spi0cn = 0x03master mode; spi enabled; flags
spi0ckr = sysclk/2/8000000-1;//spi clock <=8mhz
unsigned char count1ms;
void timer0_init (void定时器0 初始化。
ckcon|=0x8;
tmod|=0x116bit
count1ms=10;
tr0 = 0stop timer0
th0 = sysclk/1000) >8set timer0 to overflow in 1ms
tl0 = sysclk/1000;
tr0 = 1start timer0
ie|= 0x2;
void timer0_isr (void) interrupt 1 //定时器0中断服务函数。
th0 = sysclk/1000) >8;
tl0 = sysclk/1000;
if (count1ms) count1ms--;
void delay1ms(unsigned char t延时1ms的函数。
count1ms=t;
while (count1ms);
void delay1s(unsigned char t延时1s的函数。
while (t)
void init_adc(void);
void testlcd(void);
void testi2c(void);
void main (void)
wdtcn = 0xde;
wdtcn = 0xad关看门狗。
sysclk_init初始化时钟。
timer0_init初始化定时器。
port_init初始化io口。
spi0_init初始化spi0
init_adc初始化adc
cpt1cn|=0x80使能比较器1
ref0cn = 0x03使能片内参考电压。
dac0cn |=0x80使能dac0
dac0h=0;
dac0l=0;
ea=1开中断。
testlcd();
testi2c();
模数转换模块。
#include ""
#include <>
#define mux_temp0x08
#define mux_volt0x01
#define mux_press0x02
unsigned int idata temp, press, volt;
unsigned char idata mux_select;
sfr16 adc0 = 0xbeadc0 data
/ad转换模块初始化。
void init_adc(void)
adc0cn = 0x81
ref0cn = 0x07
mux_select = mux_tempcpu on-chip temp sensor
amx0sl = mux_temp;
adc0cf = sysclk/2500000) <3;//adc conversion clock = 2.5mhz
eie2 &=0x02disable adc0 eoc interrupt
eie1 &=0x04disable adc0 window compare interrupt
void read_analog_inputs(void)
long temp_long;
ad0int = 0clear conversion complete indicator
ad0busy = 1initiate conversion
while (ad0int ==0wait for conversion complete
switch (mux_select)
unsigned int getadcvalue(char no) /读取片内温度传感器的转换结果,并将转换结果返回。
read_analog_inputs();
read_analog_inputs();
read_analog_inputs();
switch (no)
case 1:
return temp;
单片机课程设计报告
单片机系统课程设计报告。专业 电气技术。学生姓名 朱海李威张杰。学号。指导教师 陈高燕。完成日期 2014 年 7 月 5 日。目录。1 设计任务和性能指标 1 1.1设计任务 1 2 设计方案 1 2.1方案论证 2 2.2总体设计框图 2 3 系统硬件设计 4 3.1红外线解码电路设计 4 3....
单片机课程设计报告
韶关学院。课程设计说明书 设计题目 基于单片机控制的智能交通灯设计。课程名称 微机原理与应用实训。学生姓名 学号。院系 物理与机电工程学院汽车系。专业班级 12机械制造及其自动化 5班。指导教师姓名及职称 谢杰讲师。陈锦儒助理实验师。起止时间 2015 年 3 月 2015 年 5 月。课程设计评分...
单片机课程设计报告
南京工程学院。课程设计说明书 题目实时钟芯片pcf8563的应用 课程名称单片机原理及应用a 院 系 部 中心 通信工程学院。专业电子信息工程 传感网 班级。学生姓名。学号。设计地点信息楼 c 210 指导教师。设计起止时间 2013年12月23日至 2013年12月27日。一 摘要1 二 课程设计...