本帖最后由 xuanhuanzi 于 2019-2-19 22:32 编辑
*文件名: TM1628
*单片机型号: AT89S52
*开发环境: Keil uVision3
*晶震频率: 12M
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
//定义控制端口
sbit DIO =P2^0;
sbit CLK =P2^1;
sbit STB =P2^2;
//定义数据
uchar const CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xef,0x6f}; //共阴数码管0-9的编码
uchar KEY[5]={0}; //为存储按键值开辟的数组
//向TM1628发送8位数据,从低位开始------------------------
void send_8bit(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
if(dat&0x01)
DIO=1;
else DIO=0;
CLK=0;
CLK=1;
dat=dat>>1;
}
}
//向TM1628发送命令--------------------------------------
void command(uchar com)
{
STB=1;
STB=0;
send_8bit(com);
}
//读取按键值并存入KEY[]数组,从低字节开始,从低位开始----
void read_key()
{
uchar i,j;
command(0x42); //读键盘命令
DIO=1; //将DIO置高
for(j=0;j<5;j++)//连续读取5个字节
for(i=0;i<8;i++)
{
KEY[j]=KEY[j]>>1;
CLK=0;
CLK=1;
if(DIO)
KEY[j]=KEY[j]|0X80;
}
STB=1;
}
//显示函数,1-7位数码管显示数字0-6----------------------------
void display()
{
uchar i;
command(0x03); //设置显示模式,7位10段模式
command(0x40); //设置数据命令,采用地址自动加1模式
command(0xc0); //设置显示地址,从00H开始
for(i=0;i<7;i++) //发送显示数据
{
send_8bit(CODE[i]); //从00H起,偶数地址送显示数据
send_8bit(0); //因为SEG9-14均未用到,所以奇数地址送全“0”
}
command(0x8F); //显示控制命令,打开显示并设置为最亮
//read_key(); //读按键值
STB=1;
}
//按键处理函数-------------------------------------------------
void key_process()
{
//由用户编写
}
//主函数-------------------------------------------------------
void main()
{
display(); //显示
while(1)
{
read_key(); //读按键值
key_process(); //按键处理
}
}
|