找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3260|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

HT1621燃?xì)獬沓绦?/span>

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:399111 發(fā)表于 2020-1-18 22:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人自寫的燃?xì)獬幢沓绦,,用到HT1621驅(qū)動顯示屏,希望能幫到大家

單片機源程序如下:
  1. //ICC-AVR application builder : 2005-3-3 17:58:11
  2. // Target : M8
  3. // Crystal: 4.0000Mhz
  4. //1621引線:CS:PB4  WR:PB5  Data:PB3

  5. #include <iom8v.h>
  6. #include <macros.h>
  7. #include <eeprom.h>

  8. #define WR      0B00100000//時鐘線
  9. #define DATA    0B00001000//數(shù)據(jù)線
  10. #define CS      0b00010000//片選線
  11. #define P       0x80      
  12. #define data_length 8
  13. const char   seg_tab[]={0x5f,0x06,0x6b,0x2f,0x36,0x3d,0x7d,0x07,0x7f,0x3f,
  14.                         0x77,0x7c,0x59,0x6e,0x79,0x71,0x58,0x76,0x00};
  15. unsigned char disbuff[6] ={0,0,0,0,0,0};//對應(yīng)LCD的6位
  16. unsigned char p1 =0;
  17. unsigned char p2 =0;


  18. unsigned long int time =0;//每一毫秒加1
  19. //1621的顯存是4位*32的,故用16*8位的寄存器就能滿足要求奇數(shù)顯存放高4位,偶數(shù)放低4位
  20. /*****************************************************************/
  21.    //1621初始化命令
  22. const char init_tab[]={
  23.                                                 0b00000001,//打開系統(tǒng)振蕩器命令
  24.                              0b00000011,//打開LCD偏壓發(fā)生器命令
  25.                                         0b00000101,//WDT 溢出標(biāo)志輸出失效命令
  26.                                        0b00000110,//時基輸出使能命令
  27.                                        0b00011000,//系統(tǒng)時鐘源片內(nèi)RC振蕩器命令
  28.                                        0b00101001,//LCD1/3偏壓選項4個公共口命令
  29.                                        //0b01000000,//聲音頻率4KHz命令
  30.                                        //0b00001001,//打開聲音輸出命令
  31.                                        0b10100000,//時基/WDT 時鐘輸出1Hz命令
  32.                                        0b10001000 //使/IRQ 輸出有效命令
  33.                                           };
  34.        
  35.        
  36. void send_data(unsigned char data_bus,unsigned char loop);
  37. void delayns(void);
  38. void display(void);
  39. void display_init(void);
  40. void votlageget(void);
  41. void delay(int temp);
  42. void port_init(void)
  43. {
  44. PORTB = 0xFF;
  45. DDRB  = 0B11111000;
  46. PORTC = 0x00; //m103 output only
  47. DDRC  = 0x00;
  48. PORTD = 0xFF;
  49. DDRD  = 0XFF;
  50. }
  51. void timer1_init(void)
  52. {
  53. TCCR1B = 0x00; //stop
  54. TCNT1H = 0xFE; //setup
  55. TCNT1L = 0x0C;
  56. OCR1AH = 0x01;
  57. OCR1AL = 0xF4;
  58. OCR1BH = 0x01;
  59. OCR1BL = 0xF4;
  60. ICR1H  = 0x01;
  61. ICR1L  = 0xF4;
  62. TCCR1A = 0x00;
  63. TCCR1B = 0x02; //start Timer
  64. }

  65. #pragma interrupt_handler timer1_ovf_isr:9
  66. void timer1_ovf_isr(void)     //每毫秒中斷一次
  67. {
  68. //TIMER1 has overflowed
  69. TCNT1H = 0xFE; //reload counter high value
  70. TCNT1L = 0x0C; //reload counter low value
  71. time ++;

  72. disbuff[5] =time&0x0f;
  73. disbuff[4] =(time>>4)&0x0f;
  74. disbuff[3] =(time>>8)&0x0f;
  75. disbuff[2] =(time>>12)&0x0f;
  76. disbuff[1] =(time>>16)&0x0f;
  77. disbuff[0] =(time>>20)&0x0f;

  78. display();  //刷新1621的緩存
  79. }

  80. //***********************************************************************/
  81. void display_init(void)
  82. {
  83.   unsigned char t;
  84.   PORTB &=~CS;
  85.   send_data(0b10000000,3);//送3位命令模式代碼100
  86.   for(t=0;t<=7;t++)
  87.   {
  88.    send_data(init_tab[t],9);//送9位命令代碼
  89.   }
  90.   PORTB |=CS;
  91.   PORTB |=WR;
  92. }

  93. //***********************************************************************/
  94. void display(void)
  95. {
  96.   unsigned char t;
  97.   unsigned char seg_temp;
  98.   
  99.   PORTB &=~CS;
  100.   PORTB &=~WR;
  101.   send_data(0b10100000,3);//送3位“寫 ”模式命令代碼101
  102.   send_data(0,6);//送6位首地址00h
  103.   for(t=0;t<=5;t++)
  104.   {
  105.     seg_temp =seg_tab[disbuff[t]];
  106.   
  107.     send_data(seg_temp,data_length);//向顯存送數(shù)據(jù)
  108.   }
  109.   PORTB |=CS;
  110.   PORTB |=WR;
  111. }

  112. //***********************************************************************/

  113. void send_data(unsigned char data_temp,unsigned char loop)
  114. {
  115.   for(;loop!=0;loop--)
  116.   {
  117.     delayns();
  118.     PORTB &=~WR;
  119.     delayns();
  120.   if((data_temp&0b10000000)==0)
  121.   {
  122.     PORTB &=~DATA;
  123.   }
  124.   else
  125.   {
  126.     PORTB |=DATA;
  127.   }
  128.     data_temp=(data_temp<<1);
  129.     PORTB |=WR;
  130.   }
  131. }
  132. //~~~~~~~~~~~~~~~~~~~~~`
  133. void delayns(void)
  134. {
  135.   asm("nop");
  136.   asm("nop");
  137.   asm("nop");
  138.   asm("nop");
  139.   asm("nop");
  140.   asm("nop");
  141. }

  142. //call this routine to initialize all peripherals
  143. void init_devices(void)
  144. {
  145. //stop errant interrupts until set up
  146. CLI(); //disable all interrupts
  147. port_init();
  148. timer1_init();
  149. TIMSK = 0x04; //timer interrupt sources
  150. SEI(); //re-enable interrupts
  151. }

  152. void main(void)
  153. {
  154.   init_devices();  //單片機初始化

  155.   display_init();  //1621初始化
  156.   while(1)
  157.   {
  158.     ;
  159.   }
  160. }
復(fù)制代碼

所有資料51hei提供下載:
ht1621.rar (768.63 KB, 下載次數(shù): 24)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表