?? 鍵盤顯示da好使的1.txt
字號:
#include<reg51.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIN=P1^0; //串行數據輸入
sbit CLK=P1^2; //串行時鐘
sbit LOAD=P1^1; //顯示數據鎖存控制
sbit add=P0^3; //加鍵
sbit mov=P0^2; //位移鍵
sbit enter=P0^1; //確認鍵
sbit AD_CS=P2^0; //TLC1549片選信號
sbit AD_IOCLOCK=P2^1; //TLC1549時鐘信號
sbit AD_DATAOUT=P2^2; //TLC1549數據輸出信號
sbit DA_CS=P2^3; //TLC5615片選信號
sbit DA_SCLK=P2^4; //TLC5615時鐘信號
sbit DA_DIN=P2^5; //TLC5615數據輸出信號
/******************對7219的寫字節程序******************/
//功能:實現對控制寄存器的讀寫;
//時序要求:MAX7219采用串行數據傳輸方式,由16位數據包發送到DIN引腳的串行數據在每個CLK的上升沿被移入內部
//的16位移位寄存器中,然后在LOAD的上升沿將數據鎖存到數字或控制寄存器;LOAD信號必須在第十六個時鐘上升沿同
//時或之后,但在下一個時鐘上升沿變高,否則數據庫丟失。
void SendChar (uchar ch)
{
uchar i ,temp;
_nop_();
for(i=0;i<8;i++)
{
temp=ch&0x80;
ch=ch<<1;
if (temp)
{
DIN=1;
CLK=0;
CLK=1;
}
else
{
DIN=0;
CLK=0;
CLK=1;
}
}
}
/*****************7219寫數字程序************************/
//功能:先寫LED數字控制寄存器,再將要顯示的字符送到相應的數字寄存器顯示
void WriteWord (uchar addr,uchar num)
{
LOAD=0;
_nop_();
SendChar(addr);
_nop_();
SendChar(num);
_nop_();
LOAD=1; //鎖存進相應寄存器
}
/****************7219初始化程序**********************/
//功能:完成對各個內部寄存器的初始化
void Init_Max7219(void)
{
WriteWord (0x0b, 0x07); //譯碼寄存器,寫入0ffH,對0至7位均譯碼
WriteWord (0x09, 0xff); //亮度調節寄存器,寫入03H,實現一般的亮度顯示
WriteWord (0x0a, 0x0a); //掃描界限寄存器,寫入03H,實現對0到7位數碼管的顯示
WriteWord (0x0c, 0x01); //停機寄存器,寫入01H,實現正常工作
}
/*延時t 毫秒*/
void delay (uint t)
{
uint i;
while (t--)
{
/*對于12MHz時鐘,約延時1ms*/
for (i=0;i<125;i++)
{}
}
}
uint da_convert(uint da_data_10bit)
{
uchar i;
uint DA_DATA=da_data_10bit<<6;
DA_CS=0;
for (i=0;i<=11;i++)
{
DA_SCLK=0;
if((DA_DATA&0x8000)==0x8000)
{
DA_DIN=1;
}
else
{
DA_DIN=0;
}
DA_SCLK=1;
DA_DATA=DA_DATA<<1;
}
DA_SCLK=0;
DA_CS=1;
return(DA_DATA);
}
void DACONVERT(uint da_data)
{
uint da_data_10bit; //10位輸出的數據
DA_CS=1; //初始化TLC5615
DA_SCLK=0;
da_data_10bit=da_data; //輸出的實際數據,對應模擬電壓1.66
da_convert( da_data_10bit);
}
/*****************主程序******************/
//實現四個數碼顯示0123
void main()
{ uchar num[8]={0,0,0,0,0,0,0,0};
uchar digit[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
static i=3;
static DA ,da_data;
Init_Max7219();
WriteWord (0x0f,0x01); //開始顯示測試,點亮所有LED
delay (3000); //延時約3s
WriteWord(0x0f,0x00); //退出顯示測試模式
while(1){
delay(50);
if (add==0) {delay(50); if(add==0) {num[i]++;} if(num[i]>9) {num[i]=0;}}
delay(50);
if(mov==0) {delay(50); if(mov==0){i--;} if(i<0) {i=3;}}
if(enter==0) {delay(50); if(enter==0){DA=num[0]*1000+num[1]*100+num[2]*10+num[3];
da_data=DA*0.08; DACONVERT(da_data); }}
WriteWord(digit[i],num[i]);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -