1,1621顯示控制數字
2,通過HT66F3185,直接驅動顯示屏。
- #include "Smg.h"
- //--------聲音------光標-----
- uchar Sound_Flag,Cursor_Flag,Manual_falg;
- /********************從高位寫入數據*************************/
- void Write_Data_H(uchar Data, uchar Cnt) //Data的高cnt位寫入TM1621,高位在前
- {
- uchar i;
- for(i=0;i<Cnt;i++)
- {
- WRITE=0;
- if(Data&0x80) DATA=1;
- else DATA=0;
- WRITE=1;
- Data<<=1;
- }
- WRITE=1;
- DATA=1;
- }
- /********************從低位寫入數據*************************/
- void Write_Data_L(uchar Data,uchar Cnt) //Data 的低cnt位寫入TM1621,低位在前
- {
- unsigned char i;
- for(i=0;i<Cnt;i++)
- {
- WRITE=0;
- if(Data&0x01) DATA=1;
- else DATA=0;
- WRITE=1;
- Data>>=1;
- }
- WRITE=1;
- DATA=1;
- }
- /********************寫入控制命令*************************/
- void WriteCmd(uchar Cmd)
- {
- CS=0;
- Write_Data_H(0x80,4); //寫入命令標志100
- Write_Data_H(Cmd,8); //寫入命令數據
- CS=1;
- }
- void WriteOneData(uchar Addr, uchar Data)
- {
- CS=0;
- Write_Data_H(0xa0,3);
- Write_Data_H(Addr<<2,6);
- Write_Data_L(Data,4);
- CS=1;
- }
- /*******************TM1621初始化**********************/
- void Init_Tm1621()
- {
- //uchar i;
-
- CS_T = 0;
- WRITE_T = 0;
- DATA_T = 0;
-
- CS=1;
- WRITE=1;
- DATA=1;
-
- WriteCmd(BIAS); //1/3偏壓 4公共口
- WriteCmd(RC); //內部RC振蕩
- WriteCmd(SYSDIS); //關系統振蕩器和LCD偏壓發生器
- WriteCmd(WDTDIS); //禁止看門狗
- WriteCmd(SYSEN); //打開系統振蕩器
- WriteCmd(LCDON); //開LCD偏壓
-
- Sound_Flag=1;
- Manual_falg=0;
- }
- const uchar Smg_Buf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0x40,0x38};
- //----------------------------0----1----2----3----4----5----6----7----8----9---滅-
- const uchar Smg_Buf_Front[]={0x0f,0x06,0x0b,0x0f,0x06,0x0d,0x0d,0x07,0x0f,0x0f,0,0x40,0x38};
- const uchar Smg_Buf_After[]={0x0a,0x00,0x0c,0x04,0x06,0x06,0x0e,0x00,0x0e,0x06,0,0x40,0x38};
- //-----------------------------0----1----2----3----4----5----6----7----8----9---滅-
- const uchar Smg_Buf_Front1[]={0x0a,0x00,0x06,0x04,0x0c,0x0c,0x0f,0x00,0x0f,0x0c,0,0x04,0x38};
- const uchar Smg_Buf_After1[]={0x0f,0x06,0x0d,0x0f,0x06,0x0b,0x0b,0x0e,0x0f,0x0f,0,0x00,0x38};
- void Disp_Data(uint TEMP,uint TEMP_S,uint TEMP_T,uchar L_M_S_B,uchar MODE)
- {
- uchar i;
- if(MODE==0)
- {
- for(i=0;i<32;i++)
- {
- WriteOneData(i,0);
- }
-
- }
- else if(MODE==1)
- {
- for(i=0;i<32;i++)
- {
- WriteOneData(i,0xff);
- }
- }
- else if(MODE == 2)
- {
-
- Show_Top(L_M_S_B);
- Show_num(TEMP);
- Show_num2(TEMP_S);
- Show_num3(TEMP_T);
-
- Cursor_Flag=1;
- }else if(MODE == 3)
- {
- Show_Top(L_M_S_B);
- //Sound_Flag=1;
- Cursor_Flag=1;
-
- Show_num(TEMP);
- Show_num2(TEMP_S);
- Show_num3(TEMP_T);
-
- }else
- {
- Show_Top(L_M_S_B);
- //Sound_Flag=1;
- Cursor_Flag=1;
-
- Show_num(TEMP);
- Show_num2(TEMP_S);
- Show_num3(TEMP_T);
- }
- }
- void Show_num(uint TEMP)
- {
- uchar ge,sh,ba,tem;
-
- if(TEMP == 10001)
- {
- WriteOneData(7,Smg_Buf_Front[0]);
-
- if(Sound_Flag == 1)
- {
- tem=Smg_Buf_After[0];
- tem |= 0x01;
- WriteOneData(8,tem);
- }else
- {
- WriteOneData(8,Smg_Buf_After[0]);
- }
- //WriteOneData(8,Smg_Buf_After[0]);
-
- WriteOneData(9,Smg_Buf_Front[0]);
- WriteOneData(10,Smg_Buf_After[0]);
-
- WriteOneData(11,Smg_Buf_Front[0]);
- WriteOneData(12,Smg_Buf_After[0]+0x01);
-
- WriteOneData(13,Smg_Buf_Front[0]);
- WriteOneData(14,Smg_Buf_After[0]+0x01);
-
- }else
- {
- ge = TEMP%10;
- sh = TEMP%100/10;
- ba = TEMP%1000/100;
-
- //ge
- WriteOneData(7,Smg_Buf_Front[ge]);
-
- if(Sound_Flag == 1)
- {
- tem=Smg_Buf_After[ge];
- tem |= 0x01;
- WriteOneData(8,tem);
- }else
- {
- WriteOneData(8,Smg_Buf_After[ge]);
- }
-
-
- //sh
- if(ba == 0)
- {
- if(sh == 0)
- {
- WriteOneData(9,0x00);
- WriteOneData(10,0x00);
- }else
- {
- WriteOneData(9,Smg_Buf_Front[sh]);
- WriteOneData(10,Smg_Buf_After[sh]);
- }
- }else
- {
- WriteOneData(9,Smg_Buf_Front[sh]);
- WriteOneData(10,Smg_Buf_After[sh]);
- }
-
-
- //ba
-
- if(ba == 0)
- {
- WriteOneData(11,0x00);
- WriteOneData(12,0x00);
- }else
- {
- WriteOneData(11,Smg_Buf_Front[ba]);
- WriteOneData(12,Smg_Buf_After[ba]);
- }
-
- //去掉千位
- WriteOneData(13,0x00);
- WriteOneData(14,0x01);
-
- }
- }
- void Show_num2(uint TEMP)
- {
- uchar ge,sh,ba;
-
- if(TEMP == 10000)
- {
- WriteOneData(21,Smg_Buf_Front1[11]);
- WriteOneData(22,Smg_Buf_After1[11]);
-
- WriteOneData(19,Smg_Buf_Front1[11]);
- WriteOneData(20,Smg_Buf_After1[11]);
-
- WriteOneData(17,Smg_Buf_Front1[11]);
- WriteOneData(18,Smg_Buf_After1[11]);
-
- WriteOneData(15,Smg_Buf_Front1[11]+0x01);
- WriteOneData(16,Smg_Buf_After1[11]);
-
- }else if(TEMP == 10001)
- {
- WriteOneData(21,Smg_Buf_Front1[0]);
- WriteOneData(22,Smg_Buf_After1[0]);
-
- WriteOneData(19,Smg_Buf_Front1[0]);
- WriteOneData(20,Smg_Buf_After1[0]);
-
- WriteOneData(17,Smg_Buf_Front1[0]+0x01);
- WriteOneData(18,Smg_Buf_After1[0]);
-
- WriteOneData(15,Smg_Buf_Front1[0]+0x01);
- WriteOneData(16,Smg_Buf_After1[0]);
-
- }else
- {
- ge = TEMP%10;
- sh = TEMP%100/10;
- ba = TEMP%1000/100;
-
- //ge
- WriteOneData(21,Smg_Buf_Front1[ge]);
- WriteOneData(22,Smg_Buf_After1[ge]);
-
- //sh
- WriteOneData(19,Smg_Buf_Front1[sh]);
- WriteOneData(20,Smg_Buf_After1[sh]);
-
- //ba
- WriteOneData(17,Smg_Buf_Front1[ba]);
- WriteOneData(18,Smg_Buf_After1[ba]);
-
- //去掉千位
- WriteOneData(15,0x01);
- WriteOneData(16,0x00);
- }
- }
- void Show_num3(uint TEMP)
- {
- uchar ge,sh,ba;
-
- if(TEMP == 10000)
- {
- WriteOneData(23,Smg_Buf_Front[0]);
- WriteOneData(24,Smg_Buf_After[0]+0x01);
-
- WriteOneData(25,Smg_Buf_Front[10]);
- WriteOneData(26,Smg_Buf_After[10]+0x01);
-
- WriteOneData(27,Smg_Buf_Front[10]);
- WriteOneData(28,Smg_Buf_After[10]);
-
- WriteOneData(29,Smg_Buf_Front[10]);
- WriteOneData(30,Smg_Buf_After[10]+0x01);
-
- }else if(TEMP == 10001)
- {
- WriteOneData(23,Smg_Buf_Front[0]);
- WriteOneData(24,Smg_Buf_After[0]+0x01);
-
- WriteOneData(25,Smg_Buf_Front[0]);
- WriteOneData(26,Smg_Buf_After[0]+0x01);
-
- WriteOneData(27,Smg_Buf_Front[0]);
- WriteOneData(28,Smg_Buf_After[0]+0x01);
-
- WriteOneData(29,Smg_Buf_Front[0]);
- WriteOneData(30,Smg_Buf_After[0]+0x01);
- }else
- {
- ge = TEMP%10;
- sh = TEMP%100/10;
- ba = TEMP%1000/100;
-
- WriteOneData(23,Smg_Buf_Front1[ge]);
- WriteOneData(24,Smg_Buf_After1[ge]);
-
- WriteOneData(25,Smg_Buf_Front1[sh]);
- WriteOneData(26,Smg_Buf_After1[sh]);
-
- WriteOneData(27,Smg_Buf_Front1[ba]);
- WriteOneData(28,Smg_Buf_After1[ba]);
- }
-
- }
- void Show_Top(uchar L_M_S_B)
- {
- if(Manual_falg ==1)
- {
- WriteOneData(6,0x01);
- }else
- {
- WriteOneData(6,L_M_S_B);
- }
-
-
- if(Cursor_Flag == 1)
- {
- WriteOneData(31,0x01);
- }else if(Cursor_Flag == 2)
- {
- WriteOneData(31,0x02);
- }else if(Cursor_Flag == 3)
- {
- WriteOneData(31,0x04);
- }else
- {
- WriteOneData(31,0x08);
- }
- }
復制代碼 原理圖:無
仿真:無
Smg.c和Smg.h 2個文件下載:
smg.zip
(4.05 KB, 下載次數: 14)
2023-7-29 17:24 上傳
點擊文件名下載附件
1621顯示代碼 下載積分: 黑幣 -5
|