📄 main.c
字号:
#include<LPC21xx.h>
#define UART0 0x00000005;
#define SPI0 0x00005500 //P0.4(SCK),P0.6(MOSI),P0.7(SSEL),UART0(P0.0,P0.1)
#define HC595_CS1 0x00000100 //595片选P0.8
#define HC595_CS2 0x00000200 //595片选P0.9
#define HC595_CS3 0x00000400 //595片选P0.10
#define CR 0x0D //回车键
typedef unsigned char uint8;
typedef unsigned int uint32;
typedef char int8;
uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
char *msg = "Everything is OK!\n";
void delay(void) {
unsigned volatile long i,j;
for(i=0;i<10000;i++)
for(j=0;j<30;j++);
}
void spi0_init(void)
{
S0SPCCR = 0x52; //设置SPI时钟分频比
S0SPCR = 0x30; //主机模式,MSB先发送,无中断
PINSEL0 |= SPI0; //设置端口工作模式
IO0DIR |= HC595_CS1 + HC595_CS2 + HC595_CS3; //P0.8输出
}
uint8 spi01_send_data(uint8 sdat)
{
IO0CLR = HC595_CS1; //拉低片选
S0SPDR = sdat;
while(!(S0SPSR & 0x80)); //等待发送完成
IO0SET = HC595_CS1; //拉高片选
return sdat;
}
uint8 spi02_send_data(uint8 sdat)
{
IO0CLR = HC595_CS2; //拉低片选
S0SPDR = sdat;
while(!(S0SPSR & 0x80)); //等待发送完成
IO0SET = HC595_CS2; //拉高片选
return sdat;
}
uint8 spi03_send_data(uint8 sdat)
{
IO0CLR = HC595_CS3; //拉低片选
S0SPDR = sdat;
while(!(S0SPSR & 0x80)); //等待发送完成
IO0SET = HC595_CS3; //拉高片选
return sdat;
}
void uart0_init(void)
{
PINSEL0 |= UART0;
U0LCR = 0x83; //DLAB=1,8 bit, 1 stop, no parity
U0DLL = 122; //15MHz晶振,9600
U0LCR = 0x03; //DLAB = 0;
}
int8 putchar (int8 ch) { //向串口输出一个字符
if (ch == '\n') { //发送回车符
while (!(U0LSR & 0x20)); //等待发送完成
U0THR = CR;
}
while (!(U0LSR & 0x20));
return (U0THR = ch);
}
void puts(char *p){ //向串口输出字符串
while (*p != '\0'){
putchar(*p++);
}
}
int main(void)
{
int i = 0;
uart0_init();
spi0_init();
while(1)
{
for(i = 0;i<16;i++)
{
if(i<10)
putchar(i+'0');
else
putchar(i+7+'0');
spi01_send_data(DISP_TAB[i]); //发送显示数据
spi02_send_data(DISP_TAB[16-i]);
spi03_send_data(DISP_TAB[1]);
delay();
}
puts(msg);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -