標(biāo)題:
HT1621燃?xì)獬沓绦?
[打印本頁(yè)]
作者:
YYZZ052
時(shí)間:
2020-1-18 22:30
標(biāo)題:
HT1621燃?xì)獬沓绦?br />本人自寫(xiě)的燃?xì)獬幢沓绦,,用到HT1621驅(qū)動(dòng)顯示屏,希望能幫到大家
單片機(jī)源程序如下:
//ICC-AVR application builder : 2005-3-3 17:58:11
// Target : M8
// Crystal: 4.0000Mhz
//1621引線(xiàn):CS:PB4 WR:PB5 Data:PB3
#include <iom8v.h>
#include <macros.h>
#include <eeprom.h>
#define WR 0B00100000//時(shí)鐘線(xiàn)
#define DATA 0B00001000//數(shù)據(jù)線(xiàn)
#define CS 0b00010000//片選線(xiàn)
#define P 0x80
#define data_length 8
const char seg_tab[]={0x5f,0x06,0x6b,0x2f,0x36,0x3d,0x7d,0x07,0x7f,0x3f,
0x77,0x7c,0x59,0x6e,0x79,0x71,0x58,0x76,0x00};
unsigned char disbuff[6] ={0,0,0,0,0,0};//對(duì)應(yīng)LCD的6位
unsigned char p1 =0;
unsigned char p2 =0;
unsigned long int time =0;//每一毫秒加1
//1621的顯存是4位*32的,故用16*8位的寄存器就能滿(mǎn)足要求奇數(shù)顯存放高4位,偶數(shù)放低4位
/*****************************************************************/
//1621初始化命令
const char init_tab[]={
0b00000001,//打開(kāi)系統(tǒng)振蕩器命令
0b00000011,//打開(kāi)LCD偏壓發(fā)生器命令
0b00000101,//WDT 溢出標(biāo)志輸出失效命令
0b00000110,//時(shí)基輸出使能命令
0b00011000,//系統(tǒng)時(shí)鐘源片內(nèi)RC振蕩器命令
0b00101001,//LCD1/3偏壓選項(xiàng)4個(gè)公共口命令
//0b01000000,//聲音頻率4KHz命令
//0b00001001,//打開(kāi)聲音輸出命令
0b10100000,//時(shí)基/WDT 時(shí)鐘輸出1Hz命令
0b10001000 //使/IRQ 輸出有效命令
};
void send_data(unsigned char data_bus,unsigned char loop);
void delayns(void);
void display(void);
void display_init(void);
void votlageget(void);
void delay(int temp);
void port_init(void)
{
PORTB = 0xFF;
DDRB = 0B11111000;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0XFF;
}
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFE; //setup
TCNT1L = 0x0C;
OCR1AH = 0x01;
OCR1AL = 0xF4;
OCR1BH = 0x01;
OCR1BL = 0xF4;
ICR1H = 0x01;
ICR1L = 0xF4;
TCCR1A = 0x00;
TCCR1B = 0x02; //start Timer
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void) //每毫秒中斷一次
{
//TIMER1 has overflowed
TCNT1H = 0xFE; //reload counter high value
TCNT1L = 0x0C; //reload counter low value
time ++;
disbuff[5] =time&0x0f;
disbuff[4] =(time>>4)&0x0f;
disbuff[3] =(time>>8)&0x0f;
disbuff[2] =(time>>12)&0x0f;
disbuff[1] =(time>>16)&0x0f;
disbuff[0] =(time>>20)&0x0f;
display(); //刷新1621的緩存
}
//***********************************************************************/
void display_init(void)
{
unsigned char t;
PORTB &=~CS;
send_data(0b10000000,3);//送3位命令模式代碼100
for(t=0;t<=7;t++)
{
send_data(init_tab[t],9);//送9位命令代碼
}
PORTB |=CS;
PORTB |=WR;
}
//***********************************************************************/
void display(void)
{
unsigned char t;
unsigned char seg_temp;
PORTB &=~CS;
PORTB &=~WR;
send_data(0b10100000,3);//送3位“寫(xiě) ”模式命令代碼101
send_data(0,6);//送6位首地址00h
for(t=0;t<=5;t++)
{
seg_temp =seg_tab[disbuff[t]];
send_data(seg_temp,data_length);//向顯存送數(shù)據(jù)
}
PORTB |=CS;
PORTB |=WR;
}
//***********************************************************************/
void send_data(unsigned char data_temp,unsigned char loop)
{
for(;loop!=0;loop--)
{
delayns();
PORTB &=~WR;
delayns();
if((data_temp&0b10000000)==0)
{
PORTB &=~DATA;
}
else
{
PORTB |=DATA;
}
data_temp=(data_temp<<1);
PORTB |=WR;
}
}
//~~~~~~~~~~~~~~~~~~~~~`
void delayns(void)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer1_init();
TIMSK = 0x04; //timer interrupt sources
SEI(); //re-enable interrupts
}
void main(void)
{
init_devices(); //單片機(jī)初始化
display_init(); //1621初始化
while(1)
{
;
}
}
復(fù)制代碼
所有資料51hei提供下載:
ht1621.rar
(768.63 KB, 下載次數(shù): 24)
2020-1-18 22:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1