📄 spi.c
字号:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dt256.h> /* derivative information */
#include "SCI.h"
#include "MC9S12.h"
#include "SPI.h"
#if SPI_EN
void SPI_Init(void){
unsigned char tmp;
SPI0BR = 0x02;// Baud Rate = BusClock / BaudRateDivisor = 2M
// 2M / 8 = 256k
SPI0CR1 = 0x1c;
SPI0CR2 = 0x00;
tmp = SPI0SR;
SPI0CR1 |= 0x40;
//SPI0DR = 0x00;
#if LCD_EN
// LCD_Init();
#endif
}
#endif
//interrupt 19 SPI_Interrupt(void){
/*****************************************************************/
/* 软件延时 */
/* 一个NOP为2个周期,即8个脉冲,而一个脉冲为1/2 US,一个NOP为4US */
/*---------------------------------------------------------------*/
void delay_Ms(unsigned int N)
{
unsigned int i,j;
j = N << 8;//N *1000 / 4
for(i = 0;i < j;i ++) asm("nop");
}
void delay_us(unsigned int N){
unsigned int i,j;
j = N >> 2;
for(i = 0;i < j;i ++) asm("nop");
}
#if LCD_EN
void LCD_Init(void){
delay_Ms(40);
Lcd_WrCommand(0x30);
delay_us(100);
Lcd_WrCommand(0x30);
delay_us(100);
Lcd_WrCommand(0x0c);//显示LCD但不显光标
delay_us(100);
Lcd_WrCommand(0x01);//清除DDRAM
delay_Ms(10);
Lcd_WrCommand(0x06);//设定输入时光标移动方向
}
void Spi_SendData(unsigned char Data){
// unsigned char tmp;
// tmp = SPI0SR & 0x20;
SPI0DR = Data;
while(!(SPI0SR & 0x20));// 等SPTEF = 1时,才去写数据寄存器
//SCI_Transmit("||");
// SCI_Tran(Data);
// SCI_Transmit("||");
// SCI_Tran(SPI0DR);
//Data ++;
// Data = SPI0DR;
//tmp = SPI0SR & 0x80;
while(!(SPI0SR & 0x80));// 等SPIF = 1时,数据发送完毕
}
void Lcd_WrCommand(byte Command){//写入指令
Spi_SendData(0xf8);//11111000:输入指令
Spi_SendData(Command & 0xf0);
Spi_SendData(Command << 4);
delay_Ms(3);//延时3ms
}
void Lcd_WrStr(unsigned char * str)//写一字符串到ddram中
{
byte Byte_N;//Byte_N用来标志即将写入DDRAM的字节是第多少个字节
Byte_N = 1;
while(*str != '\0')
{
switch(Byte_N)
{
case 1: Lcd_WrCommand(0x80);break;
case 17:Lcd_WrCommand(0x90);break;
case 33:Lcd_WrCommand(0x88);break;
case 49:Lcd_WrCommand(0x98);break;
}
/*控制DDRam的地址,向Line_Addr地址写入数据,控制输出的地址
每16个字节,使Ram地址Addr变动一次。
*/
Byte_N ++;
Lcd_WrByte(*str ++);
}
}
void Lcd_WrByte(byte data)//输出一个字节的内容到Ram(CGRam,DDRam,IRam,GDRam)
{
Spi_SendData(0xfa);//11111010:输入数据到ram
Spi_SendData(data & 0xf0);
Spi_SendData(data << 4);
delay_Ms(3);
}
/*void GDRam_Clr()
{
byte x,y;
Lcd_WrCommand(0x34);//使用扩充指令
for(y=0;y<64;y++)
{
for(x=0;x<16;x++)
{
Lcd_WrCommand(y|0x80);//写入纵坐标
Lcd_WrCommand(x|0x80);//写入横坐标
Lcd_WrByte(0x00);//清零
Lcd_WrByte(0x00);//清零
}
}
Lcd_WrCommand(0x36);//使GDRam显示
}
*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -