今天测试一个中六九的面板显示板,IC是ct1642
代码从网上stm8移植过来.
好像不能一次锁存多位并显示多位,就是锁存新的,忘记旧的.
请指正.
- #include <STC89C5xRC.H>
- #include "intrins.h"
- sbit CT_CLK=P1^1;
- sbit CT_DATA=P1^0;
- code char Lcd_tab[17]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E};//共阴极
- static void ct1642_send_data(unsigned char ct_dis_data, unsigned char ct_com)
- {
- unsigned char ct_addr; //存储数码管位置
- unsigned char i;
- switch(ct_com)
- {
- case 0: {ct_addr=0xef; ;break;}
- //显示C1位数据 数码管为共阴极,将要点亮的COM置0以显示该COM
-
- case 1: {ct_addr=0xdf; break;} //显示C2位数据
-
- case 2: {ct_addr=0xbf; break;} //显示C3位数据
- case 3: {ct_addr=0x7f; break;} //显示C4位数据
- case 4: {ct_addr=0xff; break;} //扫描键盘,关闭COM1
- default:{ct_addr=0xff; ct_dis_data=0x00;break;}
- }
-
- for(i=0;i<8;i++) //发送8位地址
- {
- CT_CLK=0 ;
- if( (ct_addr<<i)&0x80)
- {
- CT_DATA=1;
- }
- else
- {
- CT_DATA=0;
- }
- CT_CLK=1;//上升沿输出一位
- }
-
- CT_DATA=0; //发送两个空位,补足要发送的18位
- CT_CLK=0 ;
- _nop_();//此处根据单片机的指令周期而定
- CT_CLK=1;
-
- CT_DATA=0;
- CT_CLK=0 ;
- _nop_();
- CT_CLK=1;
- for(i=0;i<8;i++) //发送8位数据
- {
- CT_CLK=0 ;
- if( (ct_dis_data<<i)&0x80)
- {
- CT_DATA=1;
- }
- else
- {
- CT_DATA=0;
- }
- CT_CLK=1;
- }
- CT_CLK=1; //输出数据
-
- CT_DATA=0;
- _nop_();
- CT_DATA=1;
-
-
- CT_CLK=0 ;
- CT_DATA=0;
- _nop_();
- CT_DATA=1;
- CT_CLK=0;
- return;
- }
- void delay(unsigned char tme)
- { unsigned char i;
- i=tme;
- while(tme--)while(i--);
- }
- void main(void)
- {
- CT_DATA=1;
- CT_CLK=0;
-
- do
- {ct1642_send_data(Lcd_tab[6],0);
- //delay(100);
- ct1642_send_data(Lcd_tab[5],1);
- //delay(100);
- ct1642_send_data(Lcd_tab[4],2);
- //delay(100);
- // while(1);
- }while(1);
-
- }
复制代码
|