sbit SER_595=P2^7;
void shu_ma_g()
{
digital_show(LED_ROW,LED_LINE);
}
void digital_show(uchar row,uchar line)
{
uchar one;
one=line%10;
input(one);
_nop_();_nop_();
one=(line-one)/10;
input(one);
_nop_();_nop_();
one=row%10;
input(one);
_nop_();_nop_();
one=(row-one)/10;
input(one);
_nop_();_nop_();
output();
}
//将移位寄存器内的数据锁存到输出寄存器并显示
void output()
{
RCLK_595=0;
_nop_();_nop_();
RCLK_595=1;
_nop_();_nop_();
RCLK_595=0;
}
//;*****移位寄存器接收一个字节(如3FH)数据子程序
void input(uchar word)
{
uchar i;
word=~word; //共阳,先取反
for(i=0;i<8;i++)
{
word=_cror_(word,1);
SER_595=CY;
SRCLK_595=0;
_nop_();_nop_();
SRCLK_595=1;
}
SER_595=word;
}
////////////////////////////////////END///////////////////////////////////////////////////////////////////////////
////////////////////////////////////文件 display.c/////////////////////////////////////////////////////////////////////////
#include"myself.h"
#include<reg52.h>
#include<intrins.h>
void dis_play(uchar show_obj[32][4])
{
uchar row,line,temp_row,templine;
for(row=0;row<32;row++)
{OUT_EN=1; //锁止输出
temp_row=P2&0XE0; //保存P2高三位数据,低五位置零
P2=temp_row|row; //P2口低五位输出行选数据,高三位保持不变
for(line=0;line<4;line++)
{
templine=0X08; //p1.3=1,p1.4,p1.5,p1.6=0 只打开第一个锁存器的锁存使能,P1.3接第一个锁存器
//0X08=0000 1000B
P1=P1&0X87; //P1&10000111
P1=P1|_crol_(templine,line); //保存了P1的0、1、2、7位,对3/4/5/6进行移位。
P0=show_obj[row][line]; //输出八位数据并锁存
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
//延时500ns,让数据能顺利进入74HC573
}
OUT_EN=0; //输出使能
delay_us(10*men_lig*li_level); //1MS左右的延时,row循环执行32次,即整个显示函数占时
OUT_EN=1; //30MS左右,而题目要求每秒钟至少扫描20次即平均分下来
delay_us(10*men_lig*(10-li_level)); //每扫描显示一次最多用时50MS
} //**************************************延时,level调节占空比,即屏幕亮度
OUT_EN=0; //锁止输出
}
////////////////////////////////////END///////////////////////////////////////////////////////////////////////////
////////////////////////////////////多字连写.c///////////////////////////////////////////////////////////
#include"myself.h"
#include<reg52.h>
#include<intrins.h>
;
void fourwords()
{
uchar count;
for(count=0;count<4;count++)
{
do{ //要是“确定”-----写下一个字、“esc”----退出多字连写模式,这两个没按下,