?? 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 + -