附件有原理圖
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code num[4][32]={ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",0*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"二",1*/
- {0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00},/*"三",2*/
- {0x00,0x00,0x00,0x00,0x7F,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
- 0x48,0x44,0x48,0x3C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00},/*"四",3*/
- };
- uchar idata num_temp[16][8]; //數(shù)據(jù)緩存,用于移位
- uchar b[8]; //16*16點陣,每次發(fā)送1個字節(jié)。用b[8]保存
- int n1=0;
- uchar zuoyou=0;
- uchar hanzi;
- sbit EN=P1^0; //74hc154的使能端
- sbit A_R=P2^0; //A B C D每位數(shù)據(jù)對應(yīng)于74hc154的4個數(shù)據(jù)口
- sbit B_R=P2^1;
- sbit C_R=P2^2;
- sbit D_R=P2^3;
- sbit RST_C=P1^1; //74hc595的復(fù)位口
- sbit DATA_C=P3^2; //串行數(shù)據(jù)口
- sbit SRC_C=P3^3; //74hc595的寄存器時鐘線
- sbit SLC_C=P3^4; //74hc595的鎖存器的時鐘線
- /*************************************
- 函數(shù)功能:延時程序
- **************************************/
- void delay(int i)
- {
- inta;
- for(a=0;a<i;a++);
- }
- /**************************************************************
- 函數(shù)功能: 595在SLC上升沿的時候并行輸出到寄存器下的8位數(shù)據(jù)
- 入口參數(shù):無
- 返回值 :無
- **************************************************************/
- void SLC_595()
- {
- SLC_C=0;
- SLC_C=1;
- SLC_C=0;
- }
- /**************************************************************
- 函數(shù)功能:往num_temp[16][8]暫存器下存儲數(shù)據(jù) 16對應(yīng)著16個字節(jié)
- *************************************************************/
- void hanziku()
- {
- int i,j=0,k;
- for(i=0;i<16;i++){
- b[0]=num[0][j];b[2]=num[1][j];b[4]=num[2][j];b[6]=num[3][j];
- j++;
- b[1]=num[0][j];b[3]=num[1][j];b[5]=num[2][j];b[7]=num[3][j];
- j++;
- for(k=7;k>=0;k--){
- num_temp[k]=b[k];
- }
- }
- }
- /*******************************************************************
- 函數(shù)功能: 595輸出列向的數(shù)據(jù)64個(8位為一字節(jié),那就是8字節(jié)的數(shù)據(jù))
- 入口參數(shù):無
- 返回值 : 無
- *******************************************************************/
- //右移
- void column_zuoyi(int n)
- {
- inti,j,e=0,f;
- uchar a1,b1;
- for(i=7;i>=0;i--){
- f=e;
- e=num_temp[n]&0x80;
- num_temp[n]<<=1;
- if(f){
- num_temp[n]=num_temp[n]+0x01;
- }
- b1=num_temp[n];
- for(j=0;j<8;j++){
- a1=0x01;
- SRC_C=0;
- DATA_C=b1&a1;
- b1>>=1;
- SRC_C=1;
- }
- }
- }
- //左移
- void column_youyi(int n)
- {
- int i,j,e=0,f;
- uchar a1,b1;
- for(i=7;i>=0;i--){
- if(i!=0)
- {
- f=num_temp[n][i-1]&0x01;
- }
- else
- {
- f=0;
- }
- num_temp[n]>>=1;
- if(f)
- {
- num_temp[n]=num_temp[n]+0x80;
- }
- b1=num_temp[n];
- for(j=0;j<8;j++){
- a1=0x01;
- SRC_C=0;
- DATA_C=b1&a1;
- b1>>=1;
- SRC_C=1;
- }
- }
- }
- //靜止
- void column_stop(int n)
- {
- inti,j;
- uchar a1,b1;
-
- for(i=7;i>=0;i--){
- b1=num_temp[n];
- for(j=0;j<8;j++){
- a1=0x01;
- SRC_C=0;
- DATA_C=b1&a1;
- b1>>=1;
- SRC_C=1;
- }
- }
- }
- /**********************************************
- 函數(shù)功能:行掃描程序,16次為1個周期,利用154的譯碼器
- 入口參數(shù):無
- 返回值: 無
- ***********************************************/
- void column_16()
- {
- inti,j=0;
- char temp=0x00;
- //這里輸入行數(shù)據(jù)en打開
- n1++;
- //對應(yīng)16行數(shù)據(jù)
- for(i=0;i<16;i++)
- {
- switch(zuoyou)
- {
- case 0:
- if(hanzi==0)
- {
- hanziku();
- }
- hanzi++;
- column_stop[i];
- break;
- case 1:
- column_zuoyi[i];
- hanzi=0;
- break;
- case 2:
- if(hanzi==0)
- {
- hanziku();
- }
- hanzi++;
- column_stop[i];
- break;
- case 3:
- column_youyi[i];
- hanzi=0;
- break;
- }
- if(n1==70)
- {
- n1=0;
- zuoyou++;
- if(zuoyou==4)
- {
- zuoyou=0;
- }
- }
- EN=0;
- //每一行的數(shù)據(jù)
- P2=temp++; //P2從0000開始到1111
- SLC_595();
- }
- }
- int main()
- {
- inti=0;
- EN=1; //154使能端關(guān)上
- SRC_C=0; //595初始化
- SLC_C=0;
- hanziku(); //初始化漢字庫
- while(1){
- column_16();
- delay(5);
- EN=1;
- }
- }
復(fù)制代碼
|