青岛大学本科生毕业论文(设计)
void VS_sin_test(unsigned char x)
//SPI硬件读/写
void SPI_WriteByte(unsigned char x); unsigned char SPI_ReadByte();
4.2.4 SD卡驱动
由于单片机硬件SPI接口只有一个,而VS1003B和SD卡两个SPI器件只能连接一个,出于速度考虑所以这里SD卡使用模拟SPI接口。
//利用I/O口模拟SPI写时序,发送一个字节 void SD_spi_write(unsigned char x)
//利用I/O口模拟SPI读时序,读取一个字节 unsigned char SD_spi_read() //SPI读一个字节
//SD卡写命令函数,命令字节序列首地址为pcmd unsigned char SD_Write_Cmd(unsigned char *pcmd)
// SD卡复位函数,使用CMD0(命令0) unsigned char SD_Reset()
// SD卡初始化函数,使用CMD1(命令1) unsigned char SD_Init()
//写512 Byte的数据到SD卡的扇区addr中,使用CMD24(命令24) unsigned char SD_Write_Sector(unsigned long addr,unsigned char *buffer)
//从addr扇区读取512 Byte数据到数据缓冲区buffer,使用CMD17(17号命令) unsigned char SD_Read_Sector(unsigned long addr,unsigned char *buffer)[14]
4.2.5 DS1302、DS18B20驱动
26
青岛大学本科生毕业论文(设计)
// ds18b20复位函数 void ds18b20rst()
//读一个字节
unsigned char ds1820rd()
//写一个字节到ds1820 void ds1820wr(uchar wdata)
//读取温度值并转换 read_temp()
//温度值显示 void ds1820disp()
//ds1302初始化 void Init_1302(void)
//ds1302写数据
void write_clock(unsigned char ord, unsigned char dd)
//ds1302逐位读出字节 void clock_out(unsigned char dd)
//ds1302逐位写入字节 unsigned char clock_in(void)
//ds1302读数据,供调用时钟数据
unsigned char read_clock(unsigned char ord)[15]
4.2.6 UART驱动
27
青岛大学本科生毕业论文(设计)
//串口初始化 void UART_Init()
//串口中断函数
void sio_int() interrupt 4 using 3
//串口发送一字节
void UART_Send_Byte(unsigned char mydata)
//回车换行,即单片机的串口发送0d 0a ,在“超级终端”上会有回车换行的效果 void UART_Send_Enter()
//串口发送字符串s
void UART_Send_Str(char *s)
//串口发送数值dat
void UART_Put_Num(unsigned long dat)
4.2.7 其他功能函数
1、Main()函数
Main()函数实现了各个模块的初始化,以及多级菜单的显示 流程图见图4.1:
28
青岛大学本科生毕业论文(设计)
上电复位 液晶初始化 串口初始化 SD卡初始化 FAT32文件系统初始化 时钟芯片、温度传感器初始化 初始化完毕 N 按键检测 Y 显示默认界面
图4.1 主函数设计流程图
具体程序如下: void main() {
UINT32 b,c; uchar a=0,m,n,e=0; UART_Init(); //串口初始化 init();//系统初始化 init_img();//屏幕初始化
display_img(img_intel);//开机画面 FAT32_Device_Init(); //存储设备初始化
pArg=&Init_Arg_SDCARD; //指针指向SD卡文件系统参数集合,FAT32将从这个集合中获取参数
29
青岛大学本科生毕业论文(设计)
Dev_No=SDCARD; //设备号为SDCARD,FAT32依照此设备号选择存储设备驱动 FAT32_Init();
//文件系统初始化
//第一行显示 //第二行显示 //第三行显示 //第四行显示 //延时
b=znFAT_Get_Remain_Cap();//获取剩余容量 display1_mesg(\基于单片机的* \display2_mesg(\文本浏览器及* \display3_mesg(\播放器* \ display4_mesg(\ delay_2s(); lcd_init();//清屏
display1_mesg(\自动化工程学院\display2_mesg(\电子信息科学技术\display3_mesg(\指导老师:章平 \display4_mesg(\学 生:高森 \delay_2s(); lcd_init();//清屏
display1_mesg(\总容量为(mb): \初始化文件系统,显示容量 c=pArg->Total_Size; c=c/1024; c=c/1024; m=sizeof(c); b=b/1024; b=b/1024;
display3_mesg(\剩余容量为(mb):\n=sizeof(b); display44_num(b,n); delay_2s(); Init_1302(); lcm_init();
//时钟芯片初始化
//液晶初始化
//第四行显示剩余容量
//获得的容量单位为byte,因此两次除以1024可以得到的MB单位
//第二行显示总容量
display22_num(c,m);
lcm_clr(); //清屏 Clean_12864_GDRAM(); //清屏 while(1) {
30