📄 new_disp.c
字号:
#include "iom88v.h"
#define SS PB2
#define MOSI PB3
#define SCK PB5
#define _asm asm
#define WDR() asm("wdr")
#define SEI() asm("sei")
#define CLI() asm("cli")
#define a1 0x04
#define a2 0x0c
#define a3 0x14
#define a4 0x1c
#define a5 0x24
#define a6 0x2c
#define a7 0x34
#define a8 0x3c
#define a9 0x44
const char S[11]={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};
void port_init(void)//口方向设置
{
DDRB = 0xff;
DDRC = 0X00;
PORTC=0xff;
DDRD = 0x00;
PORTD=0xff;
}
void delay_us(int time)//微秒级延时程序
{
do
{
time--;
}
while (time>1);
}
void delay_ms(unsigned int time)//毫秒级延时程序
{
while(time!=0)
{
delay_us(1000);
time--;
}
}/*
void Delay()
{
unsigned char i;
for(i=0;i<10;i++); /*用于调整CLK 脉冲宽度*/
//}
void SendBit(unsigned char dat,unsigned char bitcnt)
{
unsigned char i;
CLI();
for(i=0;i<bitcnt;i++)
{
if(( dat & 0X80 ) == 0)
PORTB &=(~(1<<MOSI));
else
PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
//Delay();
delay_us(10);
PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
//Delay();
delay_us(10);
PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
dat=dat<<1; /*发送数据左移一位*/
}
SEI();
}
void Start_spi()
{
PORTB |=(1<<SS);
PORTB |=(1<<SCK);
PORTB |=(1<<MOSI);
//Delay();
delay_us(10);
PORTB &=(~(1<<SS));PORTB &=(~(1<<SS));
PORTB &=(~(1<<SCK));PORTB &=(~(1<<SCK));
}
void SendByte(unsigned char dat)
{
SendBit(dat,8); /*发送字节*/
}
void SENDCOMA(unsigned char com)
{
Start_spi();
SendBit(0X80,4); //*发送设置命令ID=100 0*
SendByte(com); //*发送命令字*
}
void SENDCOMB(unsigned char adr)
{
Start_spi();
SendBit(0XA0,3); /*发送写显示RAM 命令ID=101 */
SendBit(adr,6); /*指定写入地址*/
}
void disp_init(void)
{
unsigned char i;
SENDCOMA(0X0a); /*禁止WDT溢出标志输出*/
SENDCOMA(0X52); //设置偏压,背极数 定义1/3 偏压4背极
SENDCOMA(0X30); //*使用内部256KRC 振荡器*
SENDCOMA(0X02); //*启动振荡器*
SENDCOMA(0X06); //LCDON
SENDCOMA(0X08);//timer dis
SENDCOMB(0x00); //*把数据指针指回0 接着写入数据*
for(i=0;i<15;i++) /*写入16 字节数据*/
{
SendByte(0x0); /*写入数据*/
}
}
void disp_off(void)
{
SENDCOMA(0X04);//lcdoff
SENDCOMA(0X00);//sys dis
//SENDCOMA(0X0c);//timer en
}
void disp(char add,char dat)
{
switch(add)
{
case 1: add=a1;break;
case 2: add=a2;break;
case 3: add=a3;break;
case 4: add=a4;break;
case 5: add=a5;break;
case 6: add=a6;break;
case 7: add=a7;break;
case 8: add=a8;break;
case 9: add=a9;break;
}
SENDCOMB(add); //write address
SendByte(S[dat]); //write data
//SendByte(S[dat]); //write data
}
void main(void)
{
char i,j;
port_init();
disp_init();
for(i=1,j=1;i<10;i++,j++) disp(i,j);
//disp(2,3);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -