显示器件驱动技术实验报告.docx
- 文档编号:5907466
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:19
- 大小:25.94KB
显示器件驱动技术实验报告.docx
《显示器件驱动技术实验报告.docx》由会员分享,可在线阅读,更多相关《显示器件驱动技术实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
显示器件驱动技术实验报告
西安邮电大学
显示器件驱动技术实验报告
专业:
光电信息工程
班级:
光电0902
姓名宋科
学号05094055
实验1D/A实验
1、实验内容
使用TLC5615输出50hz频率的正弦波(简易信号发生器设计)。
2、实验结果
输出信号接到示波器上可以看到清晰的正弦波形。
3、源程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitcs=P3^5;
sbitsck=P3^6;
sbitdi=P3^7;
ucharj;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uintcodesin_tab[256]={
//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,
0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,
0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,
0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
//输出电压从最大值到0(正弦波1/4部分)
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,
0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
//输出电压从最小值到0(正弦波1/4部分)
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,
0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,
0x76,0x79,0x7c,0x80};
/******************************************************************/
/*作用:
向TLC5615写入数据*/
/******************************************************************/
voidwrite_5615(uintdat)//向TLC5615写数子函数
{
uchari;
dat<<=6;//因为是10位的DA里有个16位的移位寄存器,所以dat默认为10位,所以要向左移6位,左对齐
cs=0;
sck=0;
for(i=0;i<12;i++)//实际有12位数据,有效数据10位,后两位不重,要看资料
{
di=(bit)(dat&0x8000);//开始一位一位的送数据
sck=1;
dat<<=1;//送完一位我们移进一位
sck=0;
}
cs=1;
}
voidmain()
{
while
(1)
{
write_5615(sin_tab[j]/3);
delay
(1);
j++;
if(j>255)
j=0;
}
}
实验3
1、实验内容
1、用Verilog语言编程实现任意一个基本门电路(与、或、非等等)并仿真;
2、设计一个多数表决电路,要求:
(1)当输入A、B、C、D有三个或三个以上为
1时输出F为1,输入其他状态时输出为0.用Verilog语言编程实现该电路
并仿真;
3、24进制加法计数器的VerilogHDL描述,并用quartusII仿真;
4、16、18、19分频。
2、实验结果
1、与门电路
2、多数表决电路
3、24进制加法计数器quartusII仿真
4、19分频
3、源程序
1、用Verilog语言编程实现与门电路
moduleand1(
inputa,b,
outputout
);
assignout=a&b;
endmodule
2、多数表决电路
3、24进制加法计数器quartusII仿真
modulecount24(clk,clr,td,qq1,qq2);
inputclk,clr;
outputtd;
output[3:
0]qq1,qq2;
wire[3:
0]qq1,qq2;
regtds;
regc1,c2;
reg[3:
0]qq11,qq22;
always@(posedgeclk)
begin
if(clr==0)beginqq11<=0;qq22<=0;tds<=0;end
elseif(clr)
beginqq11<=qq11+1;//低位jia1
if(qq11==9)//如果低位jiadao9
beginqq22<=qq22+1;qq11<=0;end//高位jia1
elseqq22<=qq22;
end
if((qq11==3)&&(qq22==2))
begintds<=1;qq11<=0;qq22<=0;end//如果低4位为3,而且高4位也为2,tds=1
end
assignqq1=qq11;
assignqq2=qq22;
assigntd=tds;
endmodule
4、16分频
moduleshiliu(clk,clk_16);
inputclk;
outputclk_16;
reg[3:
0]cnt;
wireclk_16;
always@(posedgeclk)
begincnt<=cnt+1;end
assignclk_16=cnt[3];
Endmodule
18分频
moduleshiba(clk,reset,clk_18);
inputclk,reset;
outputclk_18;
reg[7:
0]cnt;
regclk_18;
always@(posedgeclk)
if(!
reset)
begin
clk_18<=0;
cnt<=0;
end
else
begin
if(cnt==8)
begin
cnt<=0;
clk_18<=~clk_18;
end
else
cnt<=cnt+1;
end
Endmodule
19分频
modulediv19(clk,clk19,clk19_j,clk19_o);
inputclk;
outputclk19,clk19_j,clk19_o;
regclk19_j,clk19_o;
reg[4:
0]state1,state2;
wireclk19;
always@(posedgeclk)
case(state1)
5'b00000:
beginclk19_j=0;state1=state1+1;end
5'b00001:
beginclk19_j=0;state1=state1+1;end
5'b00010:
beginclk19_j=0;state1=state1+1;end
5'b00011:
beginclk19_j=0;state1=state1+1;end
5'b00100:
beginclk19_j=0;state1=state1+1;end
5'b00101:
beginclk19_j=0;state1=state1+1;end
5'b00110:
beginclk19_j=0;state1=state1+1;end
5'b00111:
beginclk19_j=0;state1=state1+1;end
5'b01000:
beginclk19_j=0;state1=state1+1;end
5'b01001:
beginclk19_j=1;state1=state1+1;end
5'b01010:
beginclk19_j=1;state1=state1+1;end
5'b01011:
beginclk19_j=1;state1=state1+1;end
5'b01100:
beginclk19_j=1;state1=state1+1;end
5'b01101:
beginclk19_j=1;state1=state1+1;end
5'b01110:
beginclk19_j=1;state1=state1+1;end
5'b01111:
beginclk19_j=1;state1=state1+1;end
5'b10000:
beginclk19_j=1;state1=state1+1;end
5'b10001:
beginclk19_j=1;state1=state1+1;end
5'b10010:
beginclk19_j=1;state1=0;end
default:
state1=0;
endcase
always@(negedgeclk)
case(state2)
5'b00000:
beginclk19_o=0;state2=state2+1;end
5'b00001:
beginclk19_o=0;state2=state2+1;end
5'b00010:
beginclk19_o=0;state2=state2+1;end
5'b00011:
beginclk19_o=0;state2=state2+1;end
5'b00100:
beginclk19_o=0;state2=state2+1;end
5'b00101:
beginclk19_o=0;state2=state2+1;end
5'b00110:
beginclk19_o=0;state2=state2+1;end
5'b00111:
beginclk19_o=0;state2=state2+1;end
5'b01000:
beginclk19_o=0;state2=state2+1;end
5'b01001:
beginclk19_o=1;state2=state2+1;end
5'b01010:
beginclk19_o=1;state2=state2+1;end
5'b01011:
beginclk19_o=1;state2=state2+1;end
5'b01100:
beginclk19_o=1;state2=state2+1;end
5'b01101:
beginclk19_o=1;state2=state2+1;end
5'b01110:
beginclk19_o=1;state2=state2+1;end
5'b01111:
beginclk19_o=1;state2=state2+1;end
5'b10000:
beginclk19_o=1;state2=state2+1;end
5'b10001:
beginclk19_o=1;state2=state2+1;end
5'b10010:
beginclk19_o=1;state2=0;end
default:
state2=0;
endcase
assignclk19=clk19_j&clk19_o;
endmodule
实验4
1、实验内容
1、使用两位拨码开关实现8个流水灯速度调节(实现4种速度或4种花样);
2、0-999计时(通过调整数码管位选的占空比来使得数码管亮度降低一些)。
2、源程序
1、流水灯速度调节
moduleliushuideng(data_in,led_out,mainclk);
inputmainclk;
input[1:
0]data_in;
output[7:
0]led_out;
reg[7:
0]led_out;
reg[24:
0]cont;
reg[2:
0]state;
regcont1;
always@(posedgemainclk)
cont<=cont+1;
always@(data_in[0]ordata_in[1])
case(data_in)
2'b00:
cont1=cont[21];
2'b01:
cont1=cont[22];
2'b10:
cont1=cont[23];
2'b11:
cont1=cont[24];
endcase
always@(posedgecont1)
state<=state+1;
always@(state)
case(state)
3'b000:
led_out=8'b10000000;
3'b001:
led_out=8'b01000000;
3'b010:
led_out=8'b00100000;
3'b011:
led_out=8'b00010000;
3'b100:
led_out=8'b00001000;
3'b101:
led_out=8'b00000100;
3'b110:
led_out=8'b00000010;
3'b111:
led_out=8'b00000001;
endcase
Endmodule
2、0-999计时
实验5
1、实验内容
1、滚动显示两根横柱子;
2、滚动显示一根竖柱子。
2、源程序
1、两根横柱子
modulehz_16(mclk,rst,AB,CLK,RCK,SRCK,DATA);
inputmclk,rst;
outputAB,CLK,RCK,SRCK,DATA;
reg[3:
0]InitState;//初始化时状态机参数;
reg[2:
0]state_164;//刷新164时状态机参数;
reg[3:
0]init_cnt;//初始化时使用,控制595芯片输出16列的高电平,确保SRCK拉低拉高16次;
reg[3:
0]cnt_164;//控制164芯片依次输出16根横柱子,确保CLK拉低拉高16次;
regAB,DATA,RCK,SRCK,CLK;
reg[26:
0]delay_cnt;//初始化595时的延时计数器;
reg[26:
0]delay_cnt1;//控制164的延时计数器;
reg[20:
0]clk_cnt;//分频计数器;
wireclk_595,clk_164;
always@(posedgemclk)
clk_cnt=clk_cnt+1;
assignclk_595=clk_cnt[10];//595时钟;
assignclk_164=clk_cnt[10];//164时钟;
//初始化595
always@(posedgeclk_595ornegedgerst)
begin
if(!
rst)beginInitState=0;DATA=0;delay_cnt=0;init_cnt=0;end//上电复位时,初始化第一步
//595输出16列初始化为0;
else
begin
case(InitState)
0:
beginSRCK=0;DATA=0;InitState=InitState+1;init_cnt=0;end
1:
beginSRCK=1;InitState=InitState+1;end
2:
beginRCK=0;InitState=InitState+1;end
3:
beginRCK=1;InitState=InitState+1;end
4:
if(delay_cnt==10000)//延时,显示第一个横柱;
begindelay_cnt=0;InitState=InitState+1;end
elsedelay_cnt=delay_cnt+1;
5:
beginSRCK=0;DATA=1;InitState=InitState+1;end//初始化第二步:
SRCK=0
6:
beginSRCK=1;InitState=InitState+1;init_cnt=init_cnt+1;end//第三步:
SRCK=1;
7:
beginRCK=0;InitState=InitState+1;end
8:
beginRCK=1;InitState=InitState+1;end
9:
if(delay_cnt==10000)//延时,显示第一个横柱;
begindelay_cnt=0;InitState=InitState+1;end
elsedelay_cnt=delay_cnt+1;
10:
if(init_cnt==15)
beginInitState=0;init_cnt=0;end
elseInitState=5;//第二步和第三步重复16次,确保595初始化;
default:
InitState=0;
endcase
end
end
//164初始化:
always@(posedgeclk_164ornegedgerst)
begin
if(!
rst)begindelay_cnt1=0;state_164=0;cnt_164=0;AB=0;end
//写一个0进去:
点亮一行
else
begin
case(state_164)
0:
beginCLK=0;AB=0;state_164=state_164+1;end
1:
beginCLK=1;cnt_164=cnt_164+1;state_164=state_164+1;end//CLK拉低拉高一次,将0写入移位寄存器164
2:
if(cnt_164==15)
begincnt_164=0;state_164=3;end
elsestate_164=0;
3:
state_164=state_164;
default:
state_164=0;
endcase
end
end
endmodule
2、竖柱子
moduleshuzhu(mainclk,rst,DATA,SRCK,RCK,AB,CLK);
inputmainclk,rst;
outputDATA,SRCK,RCK,AB,CLK;
reg[26:
0]count;
wireclk_24;
reg[4:
0]state;
reg[3:
0]cnt_164,cnt_595;
reg[14:
0]delay_164;
reg[13:
0]delay_595;
regSRCK,RCK,DATA,CLK;
always@(posedgemainclk)
count=count+1;
assignclk_24=count[10];
assignAB=0;
always@(posedgeclk_24ornegedgerst)
if(!
rst)
begin
state=0;cnt_595=0;
end
else
case(state)
0:
beginCLK=0;state=state+1;end
1:
beginCLK=1;state=state+1;end
2:
if(cnt_164>=15)
beginstate=3;cnt_164=0;end
else
beginstate=0;cnt_164=cnt_164+1;end
3:
if(delay_164<5000)
begindelay_164=delay_164+1;end
else
beginstate=state+1;delay_164=0;end
4:
beginDATA=0;state=state+1;end
5:
beginSRCK=0;state=state+1;end
6:
beginSRCK=1;state=state+1;end
7:
beginDATA=1;state=state+1;end
8:
if(delay_595<5000)
begindelay_595=delay_595+1;end
else
beginstate=state+1;delay_595=0;end
9:
if(cnt_595>=14)
beginstate=10;cnt_595=0;end
else
beginstate=5;cnt_595=cnt_595+1;end
10:
beginRCK=0;state=state+1;end
11:
beginRCK=1;state=0;end
default:
state=0;
endcase
endmodule
实验6
1、实验内容
V
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 显示 器件 驱动 技术 实验 报告